survivor_spot.gd 1001 B

12345678910111213141516171819202122232425262728293031323334353637383940
  1. extends Area2D
  2. const STATES: Array[CompressedTexture2D] = [
  3. preload("res://assets/textures/survivor_slot.png"),
  4. preload("res://assets/textures/survivor_slot_highlighted.png"),
  5. ]
  6. @onready var sprite: Sprite2D = $Sprite2D
  7. var highlighted: bool = false:
  8. set(new_value):
  9. highlighted = new_value
  10. if new_value:
  11. sprite.texture = STATES[1]
  12. else:
  13. sprite.texture = STATES[0]
  14. func is_occupied():
  15. return get_children().any(func (child): return child.is_in_group("survivor"))
  16. func drop(object: Node2D):
  17. object.reparent(self)
  18. func _on_mouse_entered():
  19. var da = GlobalInput.dragged_object
  20. if da == null:
  21. return
  22. var object_is_survivor = da.is_in_group("survivor")
  23. var spot_is_free = not is_occupied()
  24. var spot_is_not_source = not is_ancestor_of(da)
  25. if object_is_survivor && spot_is_free && spot_is_not_source:
  26. highlighted = true
  27. GlobalInput.set_drop_spot(self)
  28. func _on_mouse_exited():
  29. if GlobalInput.drop_spot == self:
  30. highlighted = false
  31. GlobalInput.set_drop_spot(null)