So, I'm coding a State machine for a player character. Problem is, when i press the Jump input, there seems to be no way for the guy to start falling and he remains in the jump state forever.
Code:
jump state:
extends State
@export var player: Player
var state_name = "jump"
func enter():
print("transitioned to jump")
func exit():
print("exited jump")
@warning_ignore("unused_parameter")
func process(delta: float):
if player.velocity.y == 0:
Transition.emit("idle")
elif player.velocity.y > 0:
Transition.emit("fall")
player.velocity.y = player.jumpForce
if player.velocity.y < 0:
player.player_anim.play("jump")
fall state:
extends State
@export var player: Player
var state_name = "fall"
func enter():
print("transitioned to fall")
func exit():
print("exited fall")
@warning_ignore("unused_parameter")
func process(delta: float):
if player.is_on_floor():
Transition.emit("idle")
elif player.velocity.y < 0:
Transition.emit("jump")
player.velocity.y += player.gravity * delta
player.player_anim.play("fall")
player code:
extends CharacterBody2D
class_name Player
var gravity = 100
@export var moveSpeed = 300
@export var jumpForce = -300
@onready var sprite_2d = $Sprite2D
@onready var player_anim = $PlayerAnim
var direction = Input.get_axis("move_left", "move_right")
@warning_ignore("unused_parameter")
func _physics_process(delta):
direction = Input.get_axis("move_left", "move_right")
move_and_slide()
if not is_on_floor():
velocity.y += gravity * delta