player_spawn_zone.gd 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. extends Area2D
  2. class_name PlayerSpawnZone
  3. @onready var shape: CollisionShape2D = $CollisionShape2D
  4. @onready var markers: Node2D = $Markers
  5. const DEMON_SCENE: PackedScene = preload("res://assets/scenes/demon.tscn")
  6. func add_survivor() -> void:
  7. var demon_count = get_tree().get_nodes_in_group("survivor").size()
  8. if demon_count >= 9:
  9. return
  10. var spot = find_first_free_spot()
  11. if spot == null:
  12. return
  13. var demon = DEMON_SCENE.instantiate()
  14. demon.name = "Demon #%d" % (demon_count + 1)
  15. spot.add_child(demon)
  16. func find_first_free_spot() -> Node2D:
  17. for marker in markers.get_children():
  18. if marker.get_child_count() == 0:
  19. return marker
  20. return null
  21. func is_occupied() -> bool:
  22. return find_first_free_spot() == null
  23. func drop(object: Node2D) -> void:
  24. object.reparent(find_first_free_spot())
  25. func _on_mouse_entered() -> void:
  26. var da = GlobalInput.dragged_object
  27. if da == null:
  28. return
  29. var object_is_survivor = da.is_in_group("survivor")
  30. var spot_is_free = not is_occupied()
  31. var spot_is_not_source = not is_ancestor_of(da)
  32. if object_is_survivor && spot_is_free && spot_is_not_source:
  33. GlobalInput.set_drop_spot(self)
  34. func _on_mouse_exited() -> void:
  35. if GlobalInput.drop_spot == self:
  36. GlobalInput.set_drop_spot(null)