Add better controls

This commit is contained in:
Daniel Snider 2022-06-16 11:02:43 -07:00
parent a71b9445b7
commit 416b90236d
3 changed files with 20 additions and 3 deletions

View File

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

View File

@ -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

1
UI.gd
View File

@ -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