46 lines
1.8 KiB
GDScript
46 lines
1.8 KiB
GDScript
extends CharacterBody2D
|
|
|
|
# Скорость хождения
|
|
@export var base_movement_speed = 300.0
|
|
|
|
func _ready():
|
|
pass
|
|
|
|
func _physics_process(_delta):
|
|
var horizontal_direction = Input.get_axis("ui_left", "ui_right")
|
|
var vertical_direction = Input.get_axis("ui_up", "ui_down")
|
|
if horizontal_direction:
|
|
velocity.x = horizontal_direction * base_movement_speed
|
|
if vertical_direction:
|
|
velocity.x = velocity.x/2
|
|
# иначе будет складываться скорость по вертикали и горизонтали
|
|
else:
|
|
velocity.x = move_toward(velocity.x, 0, base_movement_speed)
|
|
if vertical_direction:
|
|
velocity.y = vertical_direction * base_movement_speed
|
|
if horizontal_direction:
|
|
velocity.x = velocity.x/2
|
|
# иначе будет складываться скорость по вертикали и горизонтали
|
|
else:
|
|
velocity.y = move_toward(velocity.y, 0, base_movement_speed)
|
|
|
|
# Проверка, куда должен смотреть персонаж
|
|
# вертикальная анимация имеет больший приоритет
|
|
if horizontal_direction < 0 and !vertical_direction:
|
|
$PlayerSprite.animation = "left-go"
|
|
if horizontal_direction > 0 and !vertical_direction:
|
|
$PlayerSprite.animation = "right-go"
|
|
if vertical_direction < 0:
|
|
$PlayerSprite.animation = "up-go"
|
|
if vertical_direction > 0:
|
|
$PlayerSprite.animation = "down-go"
|
|
|
|
# Проверка, должна ли играть анимация
|
|
if (velocity.x == 0) and (velocity.y == 0):
|
|
$PlayerSprite.frame = 0 # поставить анимацию на первый кадр
|
|
$PlayerSprite.stop() # остановить анимацию
|
|
else:
|
|
$PlayerSprite.play() # играть анимацию
|
|
|
|
move_and_slide() # Применяет передедвижение
|