Attention | Topic was automatically imported from the old Question2Answer platform. | |
Asked By | Moldor2 |
So here I am just jaunting along on my player script, I finish it, try to run the player instance on a basic test scene and low and behold, the debugger freezes, is it my code, or is it another issue?
Here’s my code:
extends KinematicBody2D
#SIMPLE STATE MACHINE FOR ANIMATIONS
enum {
IDLE,
IDLE_SWORD,
WALK,
RUN,
ATTACK1,
ATTACK2,
ATTACK3,
JUMP,
CROUCH,
CLIMB,
FALL,
HIT,
DEATH,
SLIDE,
NONE
}
#STATE CONTROL VARIABLES
var state = IDLE
var prev_state = IDLE
#PLAYER CHILDREN
onready var sprite = $AnimatedSprite
onready var attackright = $AttackBox1
onready var attackleft = $AttackBox2
onready var collisionlow = $CollisionShapeLow
onready var collisionstill = $CollisionShapeStill
onready var collisionmove = $CollisionShapeMove
var animplay
func _ready():
animplay = $AnimationTree.get("parameters/playback")
#MOVEMENT VARIABLES
var dir = 0
var velocity = Vector2()
var MAX_SPEED = 100
var ACCEL = 0.25
var DEACCEL = 0.1
var JUMP_FORCE = -300
var GRAV = 1000
var attack_state = 0
var attack_num
func _process(delta):
process_input(delta)
process_movement(delta)
process_animations()
func process_input(_delta):
#CHECK TO SEE IF PLAYER IS DEAD
while(state != DEATH):
#PROCESS X-AXIS INPUT
if Input.is_action_pressed("left"):
dir -= 1
state = WALK
if Input.is_action_pressed("run"):
state = RUN
elif Input.is_action_pressed("crouch"):
state = CROUCH
elif Input.is_action_pressed("right"):
dir += 1
state = WALK
if Input.is_action_pressed("run"):
state = RUN
elif Input.is_action_pressed("crouch"):
state = CROUCH
else:
state = IDLE
#PROCESS Y-AXIS INPUT
if Input.is_action_pressed("jump") and is_on_floor():
state = JUMP
elif velocity.y < 0.0 and !is_on_floor():
state = FALL
#SPECIAL STATE CASES
#ATTACKS
if Input.is_action_pressed("action_primary") and (state != ATTACK1 or state != ATTACK2 or state != ATTACK3):
state = ATTACK1
attack_num = 1
attack_state = OS.get_ticks_msec() + 1000
if OS.get_ticks_msec() < attack_state and Input.is_action_pressed("action_primary"):
if state == ATTACK1:
state = ATTACK2
attack_num = 2
attack_state = OS.get_ticks_msec() + 1000
elif state == ATTACK2:
state = ATTACK3
attack_num = 3
attack_state = OS.get_ticks_msec() + 1200
#CHECK IF ATTACK ANIM IS PLAYING
if attack_state > OS.get_ticks_msec():
match attack_num:
1:
state = ATTACK1
2:
state = ATTACK2
3:
state = ATTACK3
else:
if attack_num != -1:
attack_num = -1
func process_movement(delta):
#CHECK FOR MOVEMENT TYPE IN THE X-AXIS
match state:
IDLE:
velocity.x = lerp(velocity.x, 0.0, DEACCEL)
WALK:
velocity.x = lerp(velocity.x, dir * MAX_SPEED, ACCEL)
RUN:
velocity.x = lerp(velocity.x, (dir * MAX_SPEED * 2.0), ACCEL)
CROUCH:
velocity.x = lerp(velocity.x, 0.0, DEACCEL)
ATTACK1:
velocity.x = lerp(velocity.x, 0.0, DEACCEL)
ATTACK2:
velocity.x = lerp(velocity.x, 0.0, DEACCEL)
ATTACK3:
velocity.x = lerp(velocity.x, 0.0, DEACCEL)
#CHECK FOR MOVEMENT TYPE IN THE Y-AXIS
if state == JUMP and is_on_floor():
velocity.y = JUMP_FORCE
elif !is_on_floor():
velocity.y += GRAV * delta
else:
velocity.y = 0.0
#DO MOVEMENT
velocity = move_and_slide(velocity, Vector2.UP)
func process_animations():
#SYNC SPRITE TO MOVEMENT DIRECTION
if velocity.x > 0:
sprite.flip_h = false
elif velocity.x < 0:
sprite.flip_h = true
#SYNC ANIMATION TO STATE
if state != prev_state:
prev_state = state
match state:
IDLE:
animplay.travel("idle")
IDLE_SWORD:
animplay.travel("idle_sword")
WALK:
animplay.travel("walk")
RUN:
animplay.travel("run")
ATTACK1:
animplay.travel("attack1")
ATTACK2:
animplay.travel("attack2")
ATTACK3:
animplay.travel("attack3")
JUMP:
animplay.travel("jump")
CROUCH:
animplay.travel("crouch")
CLIMB:
animplay.travel("climb")
FALL:
animplay.travel("fall")
HIT:
animplay.travel("hit")
DEATH:
animplay.travel("death")
SLIDE:
animplay.travel("slide")