ld55/src3/Actor/actor_convulse.gd

68 lines
1.9 KiB
GDScript
Raw Permalink Normal View History

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))