AI can 'die' now; blackboard work

This commit is contained in:
Segey Lapin
2022-01-04 06:45:16 +03:00
parent 2573492f59
commit fedb6a38e1
19 changed files with 120929 additions and 93123 deletions

View File

@@ -101,6 +101,7 @@ func _ready():
data_hair_materials[mat] = load(mat)
CharacterSystemWorld.add_hair_material(data_hair_materials[mat], "male")
CharacterSystemWorld.add_hair_material(data_hair_materials[mat], "female")
CharacterSystemWorld.create_character_pool(1024)
assert(male_faces.size() > 0)
assert(female_faces.size() > 0)
assert(male_hairs.size() > 0)
@@ -159,114 +160,25 @@ func get_hair_node(sc: Node) -> Node:
return sc.get_node(e)
assert(0)
return null
func compose_kinematic_character(g, enable_modules = [], face = -1, hair = -1, hair_mat = -1):
return CharacterSystemWorld.create_character(g, enable_modules, face, hair, hair_mat)
var body = KinematicBody.new()
var cshape = CollisionShape.new()
body.add_child(cshape)
var capsule = CapsuleShape.new()
var character_data = {
"sex": g,
"modules": enable_modules
}
var face_scene: PackedScene
var hair_scene: PackedScene
var face_i: Node
var hair_i: Node
var face_node: Node
var hair_node: Node
match g:
"female":
if face == -1:
face = rnd.randi() % female_faces.size()
if hair == -1:
hair = rnd.randi() % female_hairs.size()
face_scene = mesh_female_faces[female_faces[face]]
hair_scene = mesh_female_hairs[female_hairs[hair]]
capsule.radius = 0.2
capsule.height = 1.1
capsule.margin = 0.05
cshape.translation.x = 0
cshape.translation.y = 0.751
cshape.translation.z = 0
cshape.rotation = Vector3(-PI/2.0, 0, 0)
var i = female.instance()
body.add_child(i)
i.transform = Transform()
face_node = get_face_node(i)
hair_node = get_hair_node(i)
"male":
if face == -1:
face = rnd.randi() % male_faces.size()
if hair == -1:
hair = rnd.randi() % male_hairs.size()
face_scene = mesh_male_faces[male_faces[face]]
hair_scene = mesh_male_hairs[male_hairs[hair]]
capsule.radius = 0.3
capsule.height = 1.2
capsule.margin = 0.05
cshape.translation.x = 0
cshape.translation.y = 0.899
cshape.translation.z = 0
cshape.rotation = Vector3(-PI/2.0, 0, 0)
var i = male.instance()
body.add_child(i)
i.transform = Transform()
face_node = get_face_node(i)
hair_node = get_hair_node(i)
assert(face_node)
face_i = face_scene.instance()
face_i.add_to_group("face")
prepare_extra_skeleton(face_i, "face")
hair_i = hair_scene.instance()
hair_i.add_to_group("hair")
prepare_extra_skeleton(hair_i, "hair")
if hair_mat == -1:
hair_mat = rnd.randi() % hair_materials.size()
var hmat = data_hair_materials[hair_materials[hair_mat]]
assert(hmat)
set_hair_material(hair_i, hmat)
for e in face_node.get_children():
e.queue_free()
for e in hair_node.get_children():
e.queue_free()
face_node.add_child(face_i)
hair_node.add_child(hair_i)
var face_ctrl_i = face_ctrl.instance()
face_ctrl_i.active = true
face_i.add_child(face_ctrl_i)
face_i.set_meta("body", body)
body.set_meta("face_control", face_ctrl_i)
body.set_meta("face_playback", "parameters/state/playback")
face_ctrl_i.add_to_group("face")
face_i.transform = Transform()
character_data.face = face
character_data.hair = hair
character_data.hair_mat = hair_mat
cshape.shape = capsule
body.set_meta("character_data", character_data)
for e in enable_modules:
assert(modules.has(e))
if modules.has(e):
assert(modules[e])
var obj = modules[e].new()
body.add_child(obj)
setup_character_physics(body)
body.add_to_group("character")
return body
#func compose_kinematic_character(g, enable_modules = [], face = -1, hair = -1, hair_mat = -1):
# var id = create_character_in_pool(
# return CharacterSystemWorld.create_character(g, enable_modules, face, hair, hair_mat)
func replace_character(obj, g, enable_modules = [], face = -1, hair = -1, hair_mat = -1):
func replace_player_character(obj, g, enable_modules = [], face = -1, hair = -1, hair_mat = -1):
assert(obj)
var xform = obj.global_transform
var p = obj.get_parent()
obj.queue_free()
CharacterSystemWorld.create_player_character_in_pool(enable_modules, xform)
var body = CharacterSystemWorld.create_character_visual(0)
# var body = compose_kinematic_character(g, enable_modules, face, hair, hair_mat)
var body = CharacterSystemWorld.create_character(g, enable_modules, face, hair, hair_mat)
p.add_child(body)
body.global_transform = xform
var orientation = Transform()
orientation.basis = xform.basis
body.set_meta("orientation", orientation)
# var body = CharacterSystemWorld.create_character(g, enable_modules, face, hair, hair_mat)
# p.add_child(body)
# body.global_transform = xform
# var orientation = Transform()
# orientation.basis = xform.basis
# body.set_meta("orientation", orientation)
return body
const basedir = "res://scenes/clothes/"
#func prepare_extra_skeleton(obj, g):

View File

@@ -350,7 +350,8 @@ func _physics_process(delta):
base.push_back("bandit")
if g.length() > 0:
print(g, " ", base)
characters.replace_character(n, g, base)
CharacterSystemWorld.create_character_in_pool(g, base, n.global_transform)
n.queue_free()
elif n.is_in_group("car"):
var p1 = cam.global_transform.origin
var p2 = n.global_transform.origin