Large update with mostly rewritten character subsystem

This commit is contained in:
Segey Lapin
2019-10-17 08:48:21 +03:00
parent 6e18c898b4
commit 0945ef76ee
224 changed files with 77854 additions and 13113 deletions

View File

@@ -1,17 +1,198 @@
extends Node
# Declare member variables here. Examples:
# var a = 2
# var b = "text"
#var accessory_data = {}
#var slots = ["body", "top", "panties", "shirt", "pants"]
#var slots_female = ["body", "top", "panties"]
#var slots_male = ["body"]
#var helpers = {
# "body": "base",
# "top": "base",
# "panties": "base",
# "shirt": "tights",
# "pants": "tights"
# }
#var data_male = {}
#var data_female = {}
#var characters = [load("res://characters/male_2018.tscn"), load("res://characters/female_2018.tscn")]
#var character_data = []
#func load_accessory_data():
# var fd = File.new()
# fd.open("res://characters/accessory.json", File.READ)
# var confs = fd.get_as_text()
# var json = JSON.parse(confs)
# accessory_data = json.result
# Called when the node enters the scene tree for the first time.
var characters = [load("res://characters/male_2018.tscn"), load("res://characters/female_2018.tscn")]
func _ready():
pass # Replace with function body.
# var cha_male: CharacterModifierSet
# var cha_female: CharacterModifierSet
# var base_male = characters[0].instance()
# var base_female = characters[1].instance()
# var fd = File.new()
## fd.open("characters/blendmaps.bin", File.READ);
# cha_male = CharacterModifierSet.new()
# character_data.push_back(cha_male)
# cha_female = CharacterModifierSet.new()
# character_data.push_back(cha_female)
# cha_female.set_base_name("body")
# cha_male.set_base_name("body")
# for e in slots:
# print(e)
# cha_female.add_slot(e, helpers[e], 1)
# cha_male.add_slot(e, helpers[e], 1)
# cha_female.add_mesh_scene(characters[1])
# cha_male.add_mesh_scene(characters[0])
# cha_female.process()
# cha_male.process()
# Called every frame. 'delta' is the elapsed time since the previous frame.
#func _process(delta):
# pass
#func _physics_process(delta):
# for obj in get_tree().get_nodes_in_group("characters"):
# pass
### cha_male.add_bone_modifier("head_scale", base_male, "head", Transform().scaled(Vector3(1.3, 1.3, 1.3)))
### cha_female.add_bone_modifier("head_scale", base_female, "head", Transform().scaled(Vector3(1.3, 1.3, 1.3)))
### cha_male.add_bone_modifier("head_up", base_male, "head", Transform().translated(Vector3(0.0, 0.1, 0.0)))
### cha_female.add_bone_modifier("head_up", base_female, "head", Transform().translated(Vector3(0.0, 0.1, 0.0)))
### # cha_male.add_bone_modifier("shoulder_l_rot", base_male, "shoulder01_L", Transform().rotated(Vector3(1, 0, 0), 95 * PI / 360.0))
### # cha_female.add_bone_modifier("shoulder_l_rot", base_female, "shoulder01_L", Transform().rotated(Vector3(1, 0, 0), 95 * PI / 360.0))
### cha_male.add_bone_modifier("height", base_male, "pelvis", Transform().scaled(Vector3(1.2, 1.2, 1.2)))
### cha_female.add_bone_modifier("height", base_female, "pelvis", Transform().scaled(Vector3(1.2, 1.2, 1.2)))
### # cha_male.add_bone_modifier_pair("shoulder", base_male,
### # ["shoulder01_L", Transform().rotated(Vector3(1, 0, 0), 95 * PI / 360.0)],
### # ["shoulder01_R", Transform().rotated(Vector3(1, 0, 0), 95 * PI / 360.0)])
### # cha_female.add_bone_modifier_pair("shoulder", base_female,
### # ["shoulder01_L", Transform().rotated(Vector3(1, 0, 0), 95 * PI / 360.0)],
### # ["shoulder01_R", Transform().rotated(Vector3(1, 0, 0), 95 * PI / 360.0)])
### cha_male.add_bone_modifier_group("mouth_up", base_male,
### PoolStringArray(["special01", "special04", "levator04_L", "levator04_R"]),
### [Transform().translated(Vector3(0.0, -0.004, 0.0)),
### Transform().translated(Vector3(0.0, 0.008, 0.0)),
### Transform().translated(Vector3(0.016, -0.019, 0.0)),
### Transform().translated(Vector3(-0.016, -0.019, 0.0))
### ])
### cha_female.add_bone_modifier_group("mouth_up", base_female,
### PoolStringArray(["special01", "special04", "levator04_L", "levator04_R"]),
### [Transform().translated(Vector3(0.0, -0.004, 0.0)),
### Transform().translated(Vector3(0.0, 0.008, 0.0)),
### Transform().translated(Vector3(0.016, -0.019, 0.0)),
### Transform().translated(Vector3(-0.016, -0.019, 0.0))
### ])
### cha_male.add_bone_modifier_group("eyes_up", base_male,
### PoolStringArray(["orbicularis03_L", "orbicularis04_L", "eye_L", "eye_tracker.L",
### "orbicularis03_R", "orbicularis04_R", "eye_R", "eye_tracker.R"]),
### [Transform().translated(Vector3(0.0, 0.002, 0.004)),
### Transform().translated(Vector3(0.0, 0.002, 0.004)),
### Transform().translated(Vector3(0.0, 0.002, 0.004)),
### Transform().translated(Vector3(0.0, 0.002, 0.004)),
### Transform().translated(Vector3(0.0, 0.002, 0.004)),
### Transform().translated(Vector3(0.0, 0.002, 0.004)),
### Transform().translated(Vector3(0.0, 0.002, 0.004)),
### Transform().translated(Vector3(0.0, 0.002, 0.004))])
### cha_female.add_bone_modifier_group("eyes_up", base_female,
### PoolStringArray(["orbicularis03_L", "orbicularis04_L", "eye_L",
### "orbicularis03_R", "orbicularis04_R", "eye_R"]),
### [Transform().translated(Vector3(0.0, 0.002, 0.004)),
### Transform().translated(Vector3(0.0, 0.002, 0.004)),
### Transform().translated(Vector3(0.0, 0.002, 0.004)),
### Transform().translated(Vector3(0.0, 0.002, 0.004)),
### Transform().translated(Vector3(0.0, 0.002, 0.004)),
### Transform().translated(Vector3(0.0, 0.002, 0.004))])
### cha_male.add_bone_modifier_group("eyebrows_up", base_male,
### PoolStringArray(["temporalis01_L", "temporalis01_R"]),
### [Transform().translated(Vector3(0.0, 0.015, 0.0)),
### Transform().translated(Vector3(0.0, 0.015, 0.0))])
### cha_female.add_bone_modifier_group("eyebrows_up", base_female,
### PoolStringArray(["temporalis01_L", "temporalis01_R"]),
### [Transform().translated(Vector3(0.0, 0.015, 0.0)),
### Transform().translated(Vector3(0.0, 0.015, 0.0))])
### cha_male.add_bone_modifier_group("eyebrows_rotate1", base_male,
### PoolStringArray(["oculi02_L", "oculi02_R"]),
### [Transform().rotated(Vector3(0, 1, 0), -PI/14.0),
### Transform().rotated(Vector3(0, 1, 0), PI/14.0)])
### cha_female.add_bone_modifier_group("eyebrows_rotate1", base_female,
### PoolStringArray(["oculi02_L", "oculi02_R"]),
### [Transform().rotated(Vector3(0, 1, 0), -PI/14.0),
### Transform().rotated(Vector3(0, 1, 0), PI/14.0)])
### cha_male.add_bone_modifier_group("eyebrows_rotate2", base_male,
### PoolStringArray(["oculi01_L", "oculi01_R"]),
### [Transform().rotated(Vector3(0, 1, 0), -PI/4.0),
### Transform().rotated(Vector3(0, 1, 0), PI/4.0)])
### cha_female.add_bone_modifier_group("eyebrows_rotate2", base_female,
### PoolStringArray(["oculi01_L", "oculi01_R"]),
### [Transform().rotated(Vector3(0, 1, 0), -PI/4.0),
### Transform().rotated(Vector3(0, 1, 0), PI/4.0)])
# base_male.queue_free()
# base_female.queue_free()
# load_accessory_data()
CharacterGenderList.config()
#var root_scene: Node
#func set_root_scene(sc: Node):
# root_scene = sc
var genders = ["male", "female"]
#func select_front_hair(ch: Node, value: float):
# var cha = ch.get_meta("mod")
# var id = ch.get_meta("data_id")
# var front_list = cha.get_accessory_list(genders[id], "hair", "front_hair")
# var num = int(front_list.size() * value)
# num = clamp(num, 0, front_list.size() - 1)
# character_data[id].set_accessory(ch, "front_hair", genders[id], "hair", front_list[num])
# ch.set_meta("front_hair", front_list[num])
#
#func select_back_hair(ch: Node, value: float):
# var cha = ch.get_meta("mod")
# var id = ch.get_meta("data_id")
# var back_list = cha.get_accessory_list(genders[id], "hair", "back_hair")
# var num = int(front_list.size() * value)
# num = clamp(num, 0, front_list.size() - 1)
# character_data[id].set_accessory(ch, "front_hair", genders[id], "hair", front_list[num])
# ch.set_meta("back_hair", "back_hair1")
func spawn_character(id, xform):
# var ch = character_data[id].spawn()
var ch = CharacterInstanceList.create(genders[id], xform, {})
# root_scene.add_child(ch)
# ch.transform = xform
ch.set_meta("data_id", id)
# character_data[id].hide_slot(ch, "hair")
# character_data[id].set_accessory(ch, "front_hair", genders[id], "hair", "front_hair1")
# character_data[id].set_accessory(ch, "back_hair", genders[id], "hair", "back_hair1")
# ch.set_meta("front_hair", "front_hair1")
# ch.set_meta("back_hair", "back_hair1")
return ch
func get_modifier_list(ch: Node):
# var cha = ch.get_meta("mod")
# return cha.get_modifier_list()
return CharacterInstanceList.get_base_modifier_list()
func get_modifier_value(ch: Node, mod_id):
# var cha = ch.get_meta("mod")
# var mesh_id = ch.get_meta("mesh_id")
# return cha.get_modifier_value(mesh_id, mod_id)
return CharacterInstanceList.get_mod_value(ch, mod_id)
func set_modifier_value(ch: Node, mod_id, value):
# var cha = ch.get_meta("mod")
# var mesh_id = ch.get_meta("mesh_id")
# cha.set_modifier_value(mesh_id, mod_id, value)
CharacterInstanceList.set_mod_value(ch, mod_id, value)
#func modify(ch: Node):
# var cha = ch.get_meta("mod")
# cha.modify(ch)
func update():
CharacterInstanceList.update()
func remove(ch):
# var cha = ch.get_meta("mod")
# cha.remove(ch)
CharacterInstanceList.remove(ch)
#func spawn_accessory(slot: MeshInstance, gender: String, atype: String, aname: String):
# var mesh: ArrayMesh = load(accessory_data[gender][atype][aname].path)
# for c in range(mesh.get_surface_count()):
# var mat: SpatialMaterial = load(accessory_data[gender][atype][aname].materials[c].path)
# mesh.surface_set_material(c, mat)
# slot.mesh = mesh

View File

@@ -101,10 +101,10 @@ func _unhandled_input(event):
if event.button_mask & BUTTON_MASK_LEFT:
click2d = event.position
click2d_update = true
print("click!")
# print("click!")
func _physics_process(delta):
if click2d_update:
print("click! 2")
# print("click! 2")
if camera:
var world : = camera.get_world()
var space := world.direct_space_state
@@ -115,7 +115,7 @@ func _physics_process(delta):
if result.has("position"):
click3d = result.position
click3d_update = true
print("click! 3")
# print("click! 3")
emit_signal("user_click", click3d)
click2d_update = false

View File

@@ -511,7 +511,7 @@ func convert_vertices():
for e in range(vertices.size()):
vertices[e]._neighbors = []
for h in vertices[e].neighbors:
assert h
assert(h)
# print(pos2vertex[h.pos])
vertices[e]._neighbors.push_back(pos2vertex[h.pos]._index)
func has_neighbor(v, n):
@@ -581,7 +581,7 @@ func remove_neighbor(v, n):
# var triangle = [e1, e2, e3]
# triangles.push_back(triangle)
func sort_edges(edge_data: PoolIntArray) -> PoolIntArray:
assert edge_data.size() > 0
assert(edge_data.size() > 0)
var inb = Array(edge_data)
var cur = -1
var cur_p = -1
@@ -613,7 +613,7 @@ func sort_edges(edge_data: PoolIntArray) -> PoolIntArray:
# for p in edge_data:
# print(p, ": ", edges[p].p1, " - ", edges[p].p2)
# print(ret.size(), " ", edge_data.size(), " ", edge_data, " -> ", ret)
assert ret.size() > 0 && ret.size() == edge_data.size()
assert(ret.size() > 0 && ret.size() == edge_data.size())
return ret
func edges2points(edge_data):
var ret = {}
@@ -631,7 +631,7 @@ func edges2points(edge_data):
"road": edges[e].road
})
idx += 1
assert ret.points.size() > 0 && ret.points.size() == edge_data.size()
assert(ret.points.size() > 0 && ret.points.size() == edge_data.size())
return ret
#func build_polygons():
# print("triangulation: ", triangulation.size())
@@ -1060,8 +1060,8 @@ class VertexData:
data = v
_road_width = road_width
_sidewalk_width = sidewalk_width
assert v.has("_index")
assert v.has("_neighbors")
assert(v.has("_index"))
assert(v.has("_neighbors"))
func angle_sort_helper(a, b):
var v1: Vector2 = a[1] - a[0]
var v2: Vector2 = b[1] - b[0]
@@ -1069,7 +1069,7 @@ class VertexData:
return true
return false
func get_wedges(vertices: Array) -> Array:
assert data
assert(data)
var edges = []
for id in data._neighbors:
edges.push_back([data.pos, vertices[id].pos, data._index, id])

View File

@@ -20,6 +20,11 @@ var quests : = []
var team_train_count : = 0
# warning-ignore:unused_class_variable
var arrow: Spatial
# warning-ignore:unused_class_variable
var next_scene: String
var player_visual = {
"gender": "male"
}
func room_event(ev: String):
if current_room: