123456789101112131415161718192021222324252627282930313233343536373839404142434445464748 |
- extends Area2D
- class_name Bot
- const SKINS: Array[String] = ["blue", "green", "red", "yellow"]
- @onready var sprite: AnimatedSprite2D = $AnimatedSprite2D
- @onready var base: Area2D = null
- @onready var explosion_scene: PackedScene = load("res://assets/scenes/explosion.tscn")
- @export var speed: float = 64.0
- var health: int = 1
- func _ready() -> void:
- base = get_tree().get_first_node_in_group("base")
- if base != null:
- var base_center = get_base_center()
- global_rotation = global_position.angle_to_point(base_center)
- sprite.play(SKINS.pick_random())
-
- func get_base_center() -> Vector2:
- return base.get_child(0).global_position
- func _physics_process(delta: float) -> void:
- if not visible:
- return
-
- if base != null:
- global_position = global_position.move_toward(get_base_center(), speed * delta)
- func take_damage() -> void:
- health -= 1
- if health <= 0:
- die()
- else:
- sprite.modulate = Color(0.0, 0.0, 0.0)
- await get_tree().create_timer(0.05).timeout
- sprite.modulate = Color(1.0, 1.0, 1.0)
- func _on_area_entered(area: Area2D) -> void:
- if area.is_in_group("base"):
- die()
- func die() -> void:
- var explosion = explosion_scene.instantiate()
- add_sibling(explosion)
- explosion.global_position = global_position
- queue_free()
|