From 7bfa7fcf02124a4508dffa9d78e8ef921b86a315 Mon Sep 17 00:00:00 2001 From: Lucas Fryzek Date: Sun, 17 Sep 2023 22:00:55 -0400 Subject: Setup basic player controller --- scripts/player.gd | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 scripts/player.gd (limited to 'scripts/player.gd') diff --git a/scripts/player.gd b/scripts/player.gd new file mode 100644 index 0000000..49bf1b7 --- /dev/null +++ b/scripts/player.gd @@ -0,0 +1,39 @@ +extends CharacterBody3D + + +const SPEED = 5.0 +const JUMP_VELOCITY = 4.5 + +# Get the gravity from the project settings to be synced with RigidBody nodes. +var gravity = ProjectSettings.get_setting("physics/3d/default_gravity") + +func _ready(): + Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED) + $ThirdPersonCamera.mouse_follow = true + +func _physics_process(delta): + # Add the gravity. + if not is_on_floor(): + velocity.y -= gravity * delta + + # Handle Jump. + if Input.is_action_just_pressed("ui_accept") and is_on_floor(): + velocity.y = JUMP_VELOCITY + + var fwd = $ThirdPersonCamera.get_front_direction() + var right = $ThirdPersonCamera.get_right_direction() + + look_at(position + fwd, Vector3.UP) + + # 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_down", "ui_up") + var direction = (input_dir.y * fwd + input_dir.x * right).normalized() + if direction: + velocity.x = direction.x * SPEED + velocity.z = direction.z * SPEED + else: + velocity.x = move_toward(velocity.x, 0, SPEED) + velocity.z = move_toward(velocity.z, 0, SPEED) + + move_and_slide() -- cgit