Files
tgcc/core/ai/agents/human/dress_human.gd
2026-06-27 18:13:09 +02:00

60 lines
1.8 KiB
GDScript

extends Node
@export var farmers: Array[Node3D]
@export var colors: Array[Color]
@export var main_anim_player: AnimationPlayer
var dress_anim_player: AnimationPlayer
func _ready() -> void:
if farmers.is_empty():
return
for farmer in farmers:
if farmer:
farmer.hide()
var selected_farmer = farmers.pick_random()
if selected_farmer:
selected_farmer.show()
dress_anim_player = selected_farmer.get_node_or_null("AnimationPlayer")
if main_anim_player and dress_anim_player:
main_anim_player.current_animation_changed.connect(_on_animation_sync)
main_anim_player.animation_started.connect(_on_animation_sync)
if main_anim_player.current_animation != "":
_on_animation_sync(main_anim_player.current_animation)
dress_anim_player.seek(main_anim_player.current_animation_position)
if colors.size() > 0:
var parts_to_color = ["pants", "shirt"]
var shared_color = colors.pick_random()
for part_name in parts_to_color:
var piece_node = _find_mesh_case_insensitive(selected_farmer, part_name)
if piece_node:
var mat = StandardMaterial3D.new()
mat.albedo_color = shared_color
piece_node.set_surface_override_material(0, mat)
func _on_animation_sync(anim_name: StringName) -> void:
if dress_anim_player and dress_anim_player.has_animation(anim_name):
dress_anim_player.play(anim_name)
dress_anim_player.speed_scale = main_anim_player.speed_scale
func _find_mesh_case_insensitive(parent: Node, part_name: String) -> MeshInstance3D:
var target = part_name.to_lower()
for child in parent.get_children():
if child.name.to_lower().contains(target) and child is MeshInstance3D:
return child
var found = _find_mesh_case_insensitive(child, target)
if found:
return found
return null