extends KinematicBody2D var velocity = Vector2.ZERO var roll_vector = Vector2.ZERO const MAX_SPEED = 80 const ROLL_SPEED = MAX_SPEED*1.5 const ACCELERATION = 500 const FRICTION = 500 enum states{ MOVE, ROLL, ATTACK } var state = states.MOVE onready var animationPlayer = $AnimationPlayer onready var animationTree = $AnimationTree onready var animationState = animationTree.get('parameters/playback') onready var swordHitbox = $HitBoxPivot/SwordHitbox func _ready(): animationTree.active = true swordHitbox.knockbackvector = roll_vector func _physics_process(delta): match state: states.MOVE: do_move(delta) states.ATTACK: do_attack(delta) states.ROLL: do_roll(delta) func do_roll(delta): animationState.travel('Roll') velocity = roll_vector * ROLL_SPEED move_sprite() pass func do_attack(_delta): animationState.travel('Attack') velocity = Vector2.ZERO func set_facing_direction(input_vector): animationTree.set("parameters/Walk/blend_position",input_vector) animationTree.set("parameters/Idle/blend_position",input_vector) animationTree.set("parameters/Attack/blend_position",input_vector) animationTree.set("parameters/Roll/blend_position",input_vector) func do_move(delta): var input_vector=Vector2.ZERO input_vector.x = Input.get_action_strength("move_right") - Input.get_action_strength("move_left") input_vector.y = Input.get_action_strength("move_down") - Input.get_action_strength("move_up") input_vector = input_vector.normalized() if input_vector != Vector2.ZERO: roll_vector = input_vector swordHitbox.knockbackvector = roll_vector set_facing_direction(input_vector) animationState.travel("Walk") velocity = velocity.move_toward(input_vector*MAX_SPEED,ACCELERATION*delta) else: animationState.travel("Idle") velocity = velocity.move_toward(Vector2.ZERO, FRICTION*delta) move_sprite() if Input.is_action_just_pressed("attack"): state = states.ATTACK if Input.is_action_just_pressed('roll'): state = states.ROLL func move_sprite(): velocity = move_and_slide(velocity) func attack_animation_finished(): state = states.MOVE func roll_animation_finished(): velocity = velocity / 2 state = states.MOVE