bot.gd 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. extends Area2D
  2. class_name Bot
  3. const SKINS: Array[String] = ["blue", "green", "red", "yellow"]
  4. @onready var sprite: AnimatedSprite2D = $AnimatedSprite2D
  5. @onready var base: Area2D = null
  6. @onready var explosion_scene: PackedScene = load("res://assets/scenes/explosion.tscn")
  7. @export var speed: float = 64.0
  8. var health: int = 1
  9. func _ready() -> void:
  10. base = get_tree().get_first_node_in_group("base")
  11. if base != null:
  12. var base_center = get_base_center()
  13. global_rotation = global_position.angle_to_point(base_center)
  14. sprite.play(SKINS.pick_random())
  15. func get_base_center() -> Vector2:
  16. return base.get_child(0).global_position
  17. func _physics_process(delta: float) -> void:
  18. if not visible:
  19. return
  20. if base != null:
  21. global_position = global_position.move_toward(get_base_center(), speed * delta)
  22. func take_damage() -> void:
  23. health -= 1
  24. if health <= 0:
  25. die()
  26. else:
  27. sprite.modulate = Color(0.0, 0.0, 0.0)
  28. await get_tree().create_timer(0.05).timeout
  29. sprite.modulate = Color(1.0, 1.0, 1.0)
  30. func _on_area_entered(area: Area2D) -> void:
  31. if area.is_in_group("base"):
  32. die()
  33. func die() -> void:
  34. var explosion = explosion_scene.instantiate()
  35. add_sibling(explosion)
  36. explosion.global_position = global_position
  37. queue_free()