GodotWIP/src/playerC/states/fire.gd

75 lines
1.8 KiB
GDScript

extends State
export (NodePath) var jump_node
export (NodePath) var idle_node
export (NodePath) var fall_node
export (NodePath) var move_node
onready var jump_state: State = get_node(jump_node)
onready var idle_state: State = get_node(idle_node)
onready var fall_state: State = get_node(fall_node)
onready var move_state: State = get_node(move_node)
var can_fire = true
func enter() -> void:
.enter()
parent.set_hurtbox(false)
state_timeout.start()
can_fire = true
if modifier_stack_ref.has($"../attack") == false:
$"../attack".enter()
modifier_stack_ref.push_front($"../attack")
func process_input(_event: InputEvent) -> State:
if move_component.wants_jump() and parent.is_on_floor():
return jump_state
move_component.get_movement_direction()
# if Input.is_action_just_pressed('dash'):
# return dash_state
return null
func process_frame(delta: float) -> State:
if state_timeout.time_left == 0:
return idle_state
return null
func process_physics(delta: float) -> State:
if can_fire: # trying to do this in the physics because irrecular behavior
parent.shoot_projectile()
can_fire = false
parent.velocity.y += gravity * delta
parent.velocity = parent.move_and_slide(parent.velocity, Vector2(0, -1))
parent.velocity.x = move_component.desired_movement_vector.x * move_speed
parent.velocity = parent.move_and_slide(parent.velocity, Vector2(0, -1))
if parent.velocity.x != 0.0:
return move_state
if !parent.is_on_floor():
return fall_state
# if move_component.flipped_sprite == true:
# animations.flip_h = parent.direction.x > 0
# else:
# animations.flip_h = parent.direction.x < 0
return null
func exit() -> void:
# force timer reset
$"../attack".state_timeout.start()
for mods in modifier_stack_ref:
print(mods.name)
# var testmod :StateModifier = StateModifier.new()
# testmod.name
return