gae_wild_jam/scripts/tornado.gd

48 lines
1.5 KiB
GDScript

extends Area2D
@export var pull_duration: float = 1.2
@export var pull_strength: float = 140.0
@export var explosion_damage: int = 50
@onready var animated_sprite_2d: AnimatedSprite2D = $AnimatedSprite2D
@onready var tornado_area: CollisionShape2D = $TornadoArea
@onready var explosion_collision: CollisionShape2D = $ExplosionCollision
var _is_pulling := true
var _damaged_enemies: Array[Node] = []
func _ready() -> void:
tornado_area.disabled = false
explosion_collision.disabled = true
if animated_sprite_2d.sprite_frames.has_animation("default"):
animated_sprite_2d.play("default")
await get_tree().create_timer(pull_duration).timeout
_explode()
func _physics_process(delta: float) -> void:
if not _is_pulling:
return
for enemy in get_overlapping_bodies():
if not enemy.is_in_group("enemies"):
continue
if enemy.is_dying:
continue
enemy.global_position = enemy.global_position.move_toward(global_position, pull_strength * delta)
func _explode() -> void:
_is_pulling = false
tornado_area.disabled = true
explosion_collision.disabled = false
if animated_sprite_2d.sprite_frames.has_animation("explosion"):
animated_sprite_2d.play("explosion")
await get_tree().physics_frame
for body in get_overlapping_bodies():
if body.is_in_group("enemies") and not _damaged_enemies.has(body):
body.take_damage(explosion_damage)
_damaged_enemies.append(body)
if animated_sprite_2d.sprite_frames.has_animation("explosion"):
await animated_sprite_2d.animation_finished
else:
await get_tree().create_timer(0.35).timeout
queue_free()