From 416b90236d90e1018d94becae036e8f90b8d6f89 Mon Sep 17 00:00:00 2001 From: Daniel Snider Date: Thu, 16 Jun 2022 11:02:43 -0700 Subject: [PATCH] Add better controls --- Main.tscn | 2 +- Player.gd | 20 ++++++++++++++++++-- UI.gd | 1 + 3 files changed, 20 insertions(+), 3 deletions(-) diff --git a/Main.tscn b/Main.tscn index 283bf53..30aec6f 100644 --- a/Main.tscn +++ b/Main.tscn @@ -38,7 +38,7 @@ directional_shadow_normal_bias = 0.493 transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0 ) [node name="Camera" type="Camera" parent="CameraOffset"] -transform = Transform( -1, -6.18172e-08, 6.18172e-08, 0, 0.707107, 0.707107, -8.74228e-08, 0.707107, -0.707107, 0, 20, -15 ) +transform = Transform( 1, 1.50729e-14, -1.50729e-14, 0, 0.707107, 0.707107, 2.13163e-14, -0.707107, 0.707107, 0, 20, 15 ) [node name="UI" type="CanvasLayer" parent="."] script = ExtResource( 4 ) diff --git a/Player.gd b/Player.gd index 156823a..10e2865 100644 --- a/Player.gd +++ b/Player.gd @@ -3,12 +3,28 @@ extends KinematicBody const MAX_ANGULAR_VELOCITY = deg2rad(135.0) # rad/s const MAX_VELOCITY = 600.0 # m/s -func _physics_process(delta): +export var camera_relative_controls: bool = false + +func process_player_relative_controls(delta: float): rotate_y(Input.get_axis("right", "left") * MAX_ANGULAR_VELOCITY * delta) - var movement_input = Vector3(0.0, 0.0, Input.get_axis("down", "up")) + var movement_input = Vector3(0.0, 0.0, Input.get_axis("up", "down")) move_and_slide(transform.basis.xform(movement_input) * MAX_VELOCITY * delta) update_audio(movement_input.length_squared() > 0.1) +func process_camera_relative_controls(delta: float): + var screen_input = Vector3(Input.get_axis("left", "right"), Input.get_axis("down", "up"), 0.0) + var world_input = get_viewport().get_camera().global_transform.basis.xform(screen_input) + var movement_input = world_input - world_input.project(global_transform.basis.y) + look_at(global_transform.origin + movement_input, Vector3(0.0, 1.0, 0.0)) + move_and_slide(movement_input.normalized() * MAX_VELOCITY * delta) + update_audio(movement_input.length_squared() > 0.1) + +func _physics_process(delta): + if camera_relative_controls: + process_camera_relative_controls(delta) + else: + process_player_relative_controls(delta) + func update_audio(is_moving: bool): if is_moving != $AudioStreamPlayer.playing: $AudioStreamPlayer.playing = is_moving diff --git a/UI.gd b/UI.gd index 1fbb562..55d15a2 100644 --- a/UI.gd +++ b/UI.gd @@ -2,3 +2,4 @@ extends CanvasLayer func _on_FollowRotation_toggled(button_pressed: bool): $"%Player/RemoteTransform".update_rotation = button_pressed + $"%Player".camera_relative_controls = !button_pressed