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) n_actor.get_node('SFXClone').play() 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))