2024-04-14 15:43:40 +00:00
|
|
|
extends ActorState
|
|
|
|
class_name ActorConvulse
|
|
|
|
|
|
|
|
var time = 0.7
|
|
|
|
var timer = 0.0
|
|
|
|
var initial_scale: Vector2
|
|
|
|
var current_scale: Vector2
|
|
|
|
|
|
|
|
func _init(_actor):
|
|
|
|
super(_actor)
|
|
|
|
self.initial_scale = actor.sprite().scale
|
|
|
|
self.current_scale = self.initial_scale
|
|
|
|
|
|
|
|
# Called when the node enters the scene tree for the first time.
|
|
|
|
func _ready():
|
|
|
|
pass # Replace with function body.
|
|
|
|
|
|
|
|
func _exit_tree():
|
|
|
|
self.actor.sprite().scale = self.initial_scale
|
|
|
|
|
|
|
|
# Called every frame. 'delta' is the elapsed time since the previous frame.
|
|
|
|
func _process(delta):
|
|
|
|
self.actor.sprite().scale = Vector2(0.2, 0.2) * (sin(self.timer*delta*8000) + 1.0)/2.0 \
|
|
|
|
+ self.current_scale
|
|
|
|
self.current_scale += Vector2(1, 1) * delta * 0.1
|
|
|
|
|
|
|
|
if self.timer > self.time:
|
|
|
|
var found = false
|
|
|
|
for penta in get_tree().get_nodes_in_group('pentagrams'):
|
|
|
|
if penta.position.distance_to(self.actor.position) <= Gstate.possess_dist:
|
|
|
|
if penta.try_activate():
|
|
|
|
Gstate.won_level = true
|
|
|
|
|
|
|
|
var n_actor = null
|
|
|
|
var others: Array = []
|
|
|
|
|
|
|
|
for next_actor in get_tree().get_nodes_in_group('actors'):
|
|
|
|
if next_actor == self.actor:
|
|
|
|
continue
|
|
|
|
|
|
|
|
if next_actor.position.distance_to(self.actor.position) <= Gstate.possess_dist:
|
|
|
|
var next_dist = next_actor.position.distance_to(self.actor.position)
|
|
|
|
others.push_back(next_actor)
|
|
|
|
if n_actor == null or n_actor.position.distance_to(self.actor.position) > next_dist:
|
|
|
|
n_actor = next_actor
|
|
|
|
|
|
|
|
if n_actor:
|
|
|
|
others.remove_at(others.find(n_actor))
|
|
|
|
for o in others:
|
|
|
|
o.set_state(ActorExplode.new(o))
|
|
|
|
n_actor.set_state(ActorPossessed.new(n_actor))
|
|
|
|
n_actor.player = true
|
|
|
|
Gstate.kill(n_actor)
|
2024-04-14 23:10:28 +00:00
|
|
|
n_actor.get_node('SFXClone').play()
|
2024-04-14 15:43:40 +00:00
|
|
|
found = true
|
|
|
|
|
|
|
|
|
|
|
|
if not found:
|
|
|
|
Gstate.kill(null)
|
|
|
|
|
|
|
|
self.actor.set_state(null)
|
|
|
|
self.actor.explode()
|
|
|
|
|
|
|
|
self.timer += delta
|
|
|
|
|
|
|
|
func _draw():
|
|
|
|
pass#draw_circle(to_local(self.actor.global_position), Gstate.possess_dist, Color(0.5, 0.0, 0.0, 0.1))
|