feat: add npc path finding to the zones based on needs
This commit is contained in:
@@ -1,5 +1,7 @@
|
||||
extends Node
|
||||
|
||||
const DEBUG_LOGS := true
|
||||
|
||||
@export var npc_visual_scene: PackedScene
|
||||
@export var simulation_manager: Node
|
||||
@export var active_npcs_parent: Node3D
|
||||
@@ -11,11 +13,24 @@ extends Node
|
||||
@export var rest_zone: Marker3D
|
||||
@export var food_zone: Marker3D
|
||||
|
||||
var active_npc_visuals := {} # sim_id -> NPCVisual
|
||||
var active_npc_visuals := {}
|
||||
|
||||
func debug_log(message: String) -> void:
|
||||
if DEBUG_LOGS:
|
||||
print("[WorldViewManager] ", message)
|
||||
|
||||
func _ready() -> void:
|
||||
call_deferred("spawn_initial_npcs")
|
||||
|
||||
var target_update_timer := 0.0
|
||||
var target_update_interval := 0.5
|
||||
|
||||
func _process(delta: float) -> void:
|
||||
target_update_timer += delta
|
||||
if target_update_timer >= target_update_interval:
|
||||
target_update_timer = 0.0
|
||||
update_npc_targets()
|
||||
|
||||
func spawn_initial_npcs() -> void:
|
||||
if simulation_manager == null:
|
||||
push_error("WorldViewManager: simulation_manager is missing")
|
||||
@@ -25,6 +40,12 @@ func spawn_initial_npcs() -> void:
|
||||
push_error("WorldViewManager: npc_visual_scene is missing")
|
||||
return
|
||||
|
||||
if active_npcs_parent == null:
|
||||
push_error("WorldViewManager: active_npcs_parent is missing")
|
||||
return
|
||||
|
||||
debug_log("Spawning NPC visuals. Count: %s" % simulation_manager.npcs.size())
|
||||
|
||||
for npc in simulation_manager.npcs:
|
||||
spawn_npc_visual(npc)
|
||||
|
||||
@@ -32,7 +53,7 @@ func spawn_npc_visual(npc: SimNPC) -> void:
|
||||
if active_npc_visuals.has(npc.id):
|
||||
return
|
||||
|
||||
var visual := npc_visual_scene.instantiate()
|
||||
var visual = npc_visual_scene.instantiate()
|
||||
active_npcs_parent.add_child(visual)
|
||||
|
||||
visual.global_position = npc.position
|
||||
@@ -40,10 +61,8 @@ func spawn_npc_visual(npc: SimNPC) -> void:
|
||||
|
||||
active_npc_visuals[npc.id] = visual
|
||||
|
||||
func _process(delta: float) -> void:
|
||||
update_npc_targets()
|
||||
|
||||
|
||||
debug_log("Spawned visual for %s at %s" % [npc.npc_name, npc.position])
|
||||
|
||||
func update_npc_targets() -> void:
|
||||
if simulation_manager == null:
|
||||
return
|
||||
@@ -55,8 +74,11 @@ func update_npc_targets() -> void:
|
||||
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)
|
||||
if target == null:
|
||||
debug_log("No target for task: %s" % npc.current_task)
|
||||
continue
|
||||
|
||||
visual.set_target_position(target.global_position)
|
||||
|
||||
func get_target_for_task(task: String) -> Marker3D:
|
||||
match task:
|
||||
|
||||
Reference in New Issue
Block a user