main.gd 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. # 主场景脚本
  2. extends Node2D
  3. # NPC节点引用
  4. @onready var npc_zhang: Node2D = $NPCs/NPC_Zhang
  5. @onready var npc_li: Node2D = $NPCs/NPC_Li
  6. @onready var npc_wang: Node2D = $NPCs/NPC_Wang
  7. # API客户端
  8. var api_client: Node = null
  9. # NPC状态更新计时器
  10. var status_update_timer: float = 0.0
  11. func _ready():
  12. print("[INFO] 主场景初始化")
  13. # 获取API客户端
  14. api_client = get_node_or_null("/root/APIClient")
  15. if api_client:
  16. api_client.npc_status_received.connect(_on_npc_status_received)
  17. # 立即获取一次NPC状态
  18. api_client.get_npc_status()
  19. else:
  20. print("[ERROR] API客户端未找到")
  21. func _process(delta: float):
  22. # 定时更新NPC状态
  23. status_update_timer += delta
  24. if status_update_timer >= Config.NPC_STATUS_UPDATE_INTERVAL:
  25. status_update_timer = 0.0
  26. if api_client:
  27. api_client.get_npc_status()
  28. func _on_npc_status_received(dialogues: Dictionary):
  29. """收到NPC状态更新"""
  30. print("[INFO] 更新NPC状态: ", dialogues)
  31. # 更新各个NPC的对话
  32. for npc_name in dialogues:
  33. var dialogue = dialogues[npc_name]
  34. update_npc_dialogue(npc_name, dialogue)
  35. func update_npc_dialogue(npc_name: String, dialogue: String):
  36. """更新指定NPC的对话"""
  37. var npc_node = get_npc_node(npc_name)
  38. if npc_node and npc_node.has_method("update_dialogue"):
  39. npc_node.update_dialogue(dialogue)
  40. func get_npc_node(npc_name: String) -> Node2D:
  41. """根据名字获取NPC节点"""
  42. match npc_name:
  43. "张三":
  44. return npc_zhang
  45. "李四":
  46. return npc_li
  47. "王五":
  48. return npc_wang
  49. _:
  50. return null