70 lines
1.7 KiB
GDScript
70 lines
1.7 KiB
GDScript
extends KinematicBody2D
|
|
|
|
var velocity = Vector2.ZERO
|
|
var input_vector = Vector2.ZERO
|
|
|
|
const ACCELERATION = 500
|
|
const MAX_SPEED = 80
|
|
const FRICTION = 500
|
|
|
|
enum {
|
|
MOVE,
|
|
ROLL,
|
|
ATTACK
|
|
}
|
|
|
|
var state = MOVE
|
|
|
|
onready var animationPlayer = $AnimationPlayer
|
|
onready var animationTree = $AnimationTree
|
|
onready var animationState = animationTree.get("parameters/playback")
|
|
|
|
func _ready():
|
|
animationTree.active = true
|
|
|
|
func _process(delta):
|
|
match state:
|
|
MOVE:
|
|
move_state(delta)
|
|
|
|
ROLL:
|
|
pass
|
|
|
|
ATTACK:
|
|
attack_state(delta)
|
|
|
|
func move_state(delta):
|
|
input_vector.x = Input.get_action_strength("ui_right") - Input.get_action_strength("ui_left")
|
|
input_vector.y = Input.get_action_strength("ui_down") - Input.get_action_strength("ui_up")
|
|
input_vector = input_vector.normalized()
|
|
if input_vector != Vector2.ZERO:
|
|
animationTree.set("parameters/Idle/blend_position", input_vector)
|
|
animationTree.set("parameters/Run/blend_position", input_vector)
|
|
animationState.travel("Run")
|
|
velocity = velocity.move_toward(input_vector * MAX_SPEED, ACCELERATION * delta)
|
|
else:
|
|
#animationPlayer.play("IdleRight")
|
|
animationState.travel("Idle")
|
|
velocity = velocity.move_toward(Vector2.ZERO, FRICTION * delta)
|
|
|
|
velocity = move_and_slide(velocity)
|
|
|
|
if Input.is_action_just_pressed("attack"):
|
|
state = ATTACK
|
|
|
|
func attack_state(delta):
|
|
#velocity = Vector2.ZERO
|
|
animationTree.set("parameters/Attack/blend_position", input_vector)
|
|
animationState.travel("Attack")
|
|
velocity = Vector2.ZERO
|
|
#velocity = velocity.move_toward(Vector2.ZERO, FRICTION*delta)
|
|
#velocity = move_and_slide(velocity)
|
|
|
|
|
|
func attack_aninimation_finished():
|
|
state = MOVE
|
|
|
|
# Called every frame. 'delta' is the elapsed time since the previous frame.
|
|
#func _process(delta):
|
|
# pass
|