Загрузка данных


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()