feat: add movment based on needs with themed zones
This commit is contained in:
@@ -4,6 +4,13 @@ extends Node
|
||||
@export var simulation_manager: Node
|
||||
@export var active_npcs_parent: Node3D
|
||||
|
||||
@export var farm_zone: Marker3D
|
||||
@export var forest_zone: Marker3D
|
||||
@export var guard_zone: Marker3D
|
||||
@export var study_zone: Marker3D
|
||||
@export var rest_zone: Marker3D
|
||||
@export var food_zone: Marker3D
|
||||
|
||||
var active_npc_visuals := {} # sim_id -> NPCVisual
|
||||
|
||||
func _ready() -> void:
|
||||
@@ -32,3 +39,38 @@ func spawn_npc_visual(npc: SimNPC) -> void:
|
||||
visual.setup_from_sim(npc)
|
||||
|
||||
active_npc_visuals[npc.id] = visual
|
||||
|
||||
func _process(delta: float) -> void:
|
||||
update_npc_targets()
|
||||
|
||||
|
||||
func update_npc_targets() -> void:
|
||||
if simulation_manager == null:
|
||||
return
|
||||
|
||||
for npc in simulation_manager.npcs:
|
||||
if not active_npc_visuals.has(npc.id):
|
||||
continue
|
||||
|
||||
var visual = active_npc_visuals[npc.id]
|
||||
var target := get_target_for_task(npc.current_task)
|
||||
|
||||
if target != null:
|
||||
visual.set_target_position(target.global_position)
|
||||
|
||||
func get_target_for_task(task: String) -> Marker3D:
|
||||
match task:
|
||||
"gather_food":
|
||||
return farm_zone
|
||||
"gather_wood":
|
||||
return forest_zone
|
||||
"patrol":
|
||||
return guard_zone
|
||||
"study":
|
||||
return study_zone
|
||||
"rest":
|
||||
return rest_zone
|
||||
"eat":
|
||||
return food_zone
|
||||
_:
|
||||
return rest_zone
|
||||
|
||||
Reference in New Issue
Block a user