X-Git-Url: http://git.purplebirdman.com/knight.git/blobdiff_plain/dff18309792f5f7c4ac032fc3bd6faed7a1203bd..f7bede5002d87d7baeff8a311029431fbe430357:/player/player.gd diff --git a/player/player.gd b/player/player.gd index f6b6c56..eae307e 100644 --- a/player/player.gd +++ b/player/player.gd @@ -1,41 +1,73 @@ -extends CharacterBody3D +class_name Player extends CharacterBody3D -@onready var _skin: KnightSkin = $skin +# class variables +@export_category("Movement") +@export var _walk_speed := 5.0 +@export var _jump_speed := 9.0 +@export var _fall_speed := 2.0 +@export var _locked_z := true + +@export_category("Camera") +@export var _camera_distance := 5.0 +@export var _dof_blur_far_distance := 5.0 +@export var _camera_pivot_rotate_y := 0.0 -const SPEED = 5.0 -const JUMP_VELOCITY = 4.5 * 3 -const FALL_SPEED = 2.0 +var _last_movement_direction := Vector3.RIGHT +@onready var _skin: KnightSkin = $skin +@onready var _camera_pivot: Node3D = $"camera-pivot" +@onready var _spring_arm: SpringArm3D = $"camera-pivot/SpringArm3D" +@onready var _camera: Camera3D = $"camera-pivot/SpringArm3D/Camera3D" +@onready var _camera_attr: CameraAttributes = _camera.attributes -var _last_movement_direction := Vector3.FORWARD +# inherited functions +func _ready() -> void: + _spring_arm.spring_length = _camera_distance + _camera_attr.dof_blur_far_distance = _dof_blur_far_distance + _camera_pivot.rotate_y(_camera_pivot_rotate_y) func _input(event: InputEvent) -> void: - if event.is_action_released("ui_accept"): - velocity.y = 0 + if event.is_action_released("player-jump"): + if velocity.y > 0: + velocity.y = 0 elif event.is_action_pressed("player-attack"): _skin.attack() +func _physics_process(delta: float) -> void: + # Add the gravity. + if not is_on_floor(): + velocity += get_gravity() * _fall_speed * delta + + _process_player_input(delta) + _process_player_skin(delta) + + move_and_slide() + + +# my functions func _process_player_input(_delta: float) -> void: + # Handle jump. + if Input.is_action_just_pressed("player-jump") and is_on_floor(): + velocity.y = _jump_speed + # Get the input direction and handle the movement/deceleration. # As good practice, you should replace UI actions with custom gameplay actions. - var input_dir := Input.get_vector("ui_left", "ui_right", "ui_up", "ui_down") + var input_dir := Input.get_vector("player-left", "player-right", "player-up", "player-down") var direction := -(transform.basis * Vector3(input_dir.x, 0, input_dir.y)).normalized() + if direction: - velocity.x = direction.x * SPEED - velocity.z = direction.z * SPEED + velocity.x = direction.x * _walk_speed + if not _locked_z: + velocity.z = direction.z * _walk_speed _last_movement_direction = direction else: velocity.x = 0 velocity.z = 0 - # Handle jump. - if Input.is_action_just_pressed("ui_accept") and is_on_floor(): - velocity.y = JUMP_VELOCITY - func _process_player_skin(_delta: float) -> void: _skin.global_rotation.y = Vector3.BACK.signed_angle_to(_last_movement_direction, Vector3.UP) @@ -44,14 +76,3 @@ func _process_player_skin(_delta: float) -> void: _skin.move(velocity.length()) else: _skin.fall() - - -func _physics_process(delta: float) -> void: - # Add the gravity. - if not is_on_floor(): - velocity += get_gravity() * FALL_SPEED * delta - - _process_player_input(delta) - _process_player_skin(delta) - - move_and_slide()