extends CharacterBody3D
# Настройки скорости и физики
@export var SPEED: float = 12.0
@export var DASH_SPEED: float = 28.0
@export var ROTATION_SPEED: float = 3.0
@export var GRAVITY: float = 20.0
var is_dashing: bool = false
var dash_timer: float = 0.0
var dash_duration: float = 0.15 # Длительность рывка в секундах
func _physics_process(delta: float) -> void:
# Гравитация
if not is_on_floor():
velocity.y -= GRAVITY * delta
# Поворот персонажа (влево / вправо)
var rotate_input = Input.get_axis("ui_right", "ui_left") # Клавиши Стрелка Вправо/Влево или A/D
rotate_y(rotate_input * ROTATION_SPEED * delta)
# Обработка Рывка (Dash) на Shift
if Input.is_action_just_pressed("ui_select") or Input.is_key_pressed(KEY_SHIFT):
if not is_dashing:
is_dashing = true
dash_timer = dash_duration
if is_dashing:
dash_timer -= delta
if dash_timer <= 0:
is_dashing = false
# Движение вперед / назад
var forward_input = Input.get_axis("ui_down", "ui_up") # Клавиши Стрелка Вверх/Вниз или W/S
var current_speed = DASH_SPEED if is_dashing else SPEED
# Вычисляем направление относительно того, куда смотрит персонаж
var direction = (transform.basis * Vector3(0, 0, forward_input)).normalized()
if direction:
velocity.x = direction.x * current_speed
velocity.z = direction.z * current_speed
else:
velocity.x = move_toward(velocity.x, 0, current_speed)
velocity.z = move_toward(velocity.z, 0, current_speed)
move_and_slide()