extends Node2D @export var speed = 300; @export var spawn_points : Node2D @export var spawn_scene : PackedScene @export var anim_player : AnimationPlayer @export var movable : Node2D var target_pos := Vector2(0, 0) enum s { Follow, Smash, Spawn, Laser} var state = s.Follow var max_follow_time = 2; var following = max_follow_time; var timer = 0; func _ready() -> void: target_pos = position func _physics_process(delta: float) -> void: match(state): s.Follow: follow(delta) s.Smash: pass func spawn_minions(times : int): var points : Array[Node]= spawn_points.get_children() points.shuffle() for i in range(times): var p = points[i].global_position await create_tween().tween_property(movable, "global_position", p, 1).finished anim_player.play("grab") await anim_player.animation_finished state = s.Follow func spawn_enemies(): for j in range(3): var enemy = spawn_scene.instantiate() enemy.global_position = movable.global_position add_child(enemy) await get_tree().create_timer(0.1).timeout func smash(): anim_player.play("smash") await anim_player.animation_finished if randf() < 0.7: state = s.Follow else: state = s.Spawn spawn_minions(3) func follow(delta : float): var player : Player = get_tree().get_first_node_in_group("player") if not player: return move_to(player.global_position, delta) following -= delta if following < 0: state = s.Smash smash() following = max_follow_time; func move_to(pos : Vector2, delta : float): movable.global_position = movable.global_position.move_toward(pos, delta * speed)