49 lines
1.1 KiB
GDScript
49 lines
1.1 KiB
GDScript
|
extends ActorState
|
||
|
class_name ActorPossessed
|
||
|
|
||
|
var sub_state = null
|
||
|
|
||
|
func _init(_actor):
|
||
|
super(_actor)
|
||
|
|
||
|
func _ready():
|
||
|
pass
|
||
|
|
||
|
func _process(_delta):
|
||
|
if Input.is_action_just_pressed("actor_convulse"):
|
||
|
set_sub_state(ActorConvulse.new(self.actor))
|
||
|
if Input.is_action_just_released("actor_convulse"):
|
||
|
set_sub_state(null)
|
||
|
|
||
|
func _physics_process(_delta):
|
||
|
self.actor.modulate = Color.RED
|
||
|
|
||
|
var mydir = Vector2(0, 0)
|
||
|
if Input.is_action_pressed("actor_up"):
|
||
|
mydir.y -= 1
|
||
|
if Input.is_action_pressed("actor_down"):
|
||
|
mydir.y += 1
|
||
|
if Input.is_action_pressed("actor_left"):
|
||
|
mydir.x -= 1
|
||
|
if Input.is_action_pressed("actor_right"):
|
||
|
mydir.x += 1
|
||
|
|
||
|
if mydir.length_squared() > 0:
|
||
|
mydir = mydir.normalized()
|
||
|
self.actor.sprite().rotation = mydir.angle() - PI/2
|
||
|
self.actor.anim_walk()
|
||
|
else:
|
||
|
self.actor.anim_idle()
|
||
|
|
||
|
|
||
|
if self.actor:
|
||
|
self.actor.velocity = mydir * self.actor.SPEED
|
||
|
self.actor.move_and_slide()
|
||
|
|
||
|
func set_sub_state(new_state):
|
||
|
if self.sub_state:
|
||
|
remove_child(self.sub_state)
|
||
|
self.sub_state = new_state
|
||
|
if self.sub_state:
|
||
|
add_child(self.sub_state)
|