55 lines
1.2 KiB
GDScript
55 lines
1.2 KiB
GDScript
extends Node2D
|
|
|
|
@export var speed = 300;
|
|
@export var spawn_points : Node2D
|
|
var target_pos := Vector2(0, 0)
|
|
@onready var marker : Sprite2D = $DangerRound
|
|
@onready var claw : Claw = $DangerRound/Claw
|
|
|
|
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(marker, "global_position", p, 1).finished
|
|
await claw.pickup()
|
|
state = s.Follow
|
|
|
|
func smash():
|
|
await claw.smash();
|
|
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):
|
|
marker.global_position = marker.global_position.move_toward(pos, delta * speed)
|