TurnQueue.gd 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. extends Node
  2. const combatant = preload("../combatants/Combatant.gd")
  3. export (NodePath) var combatants_list
  4. var queue = [] setget set_queue
  5. var active_combatant = null setget _set_active_combatant
  6. signal active_combatant_changed(active_combatant)
  7. func _ready():
  8. combatants_list = get_node(combatants_list)
  9. func initialize():
  10. set_queue(combatants_list.get_children())
  11. play_turn()
  12. func play_turn():
  13. yield(active_combatant, "turn_finished")
  14. get_next_in_queue()
  15. play_turn()
  16. func get_next_in_queue():
  17. var current_combatant = queue.pop_front()
  18. current_combatant.active = false
  19. queue.append(current_combatant)
  20. self.active_combatant = queue[0]
  21. return active_combatant
  22. func remove(combatant):
  23. var new_queue = []
  24. for n in queue:
  25. new_queue.append(n)
  26. new_queue.remove(new_queue.find(combatant))
  27. combatant.queue_free()
  28. self.queue = new_queue
  29. func set_queue(new_queue):
  30. queue.clear()
  31. var names = []
  32. for node in new_queue:
  33. if not node is combatant:
  34. continue
  35. queue.append(node)
  36. node.active = false
  37. if queue.size() > 0:
  38. self.active_combatant = queue[0]
  39. func _set_active_combatant(new_combatant):
  40. active_combatant = new_combatant
  41. active_combatant.active = true
  42. emit_signal("active_combatant_changed", active_combatant)