diff options
-rw-r--r-- | client/player/controllable_player.gd | 6 | ||||
-rw-r--r-- | client/player/follow_camera.gd | 21 | ||||
-rw-r--r-- | client/settings.gd | 1 | ||||
-rw-r--r-- | locale/en.ini | 1 |
4 files changed, 22 insertions, 7 deletions
diff --git a/client/player/controllable_player.gd b/client/player/controllable_player.gd index 5dda6a69..8dcdc6f0 100644 --- a/client/player/controllable_player.gd +++ b/client/player/controllable_player.gd @@ -32,6 +32,7 @@ var direction := Vector2(0, 0) var stamina := 0. var chat_open := false var enable_input := true +var input_rotation = 0 var target: Vector2i = Vector2i(0, 0) @@ -61,8 +62,11 @@ func _process(delta): var moving_duration = 0 func _process_movement(delta): var input = Input.get_vector("left", "right", "forwards", "backwards") if is_input_enabled() else Vector2.ZERO + if Global.get_setting("gameplay.first_person"): + input.x *= 0.1 + input.y = min(input.y, 0) var boost = Input.is_action_pressed("boost") or (Global.get_setting("gameplay.latch_boost") and boosting) - input = input.rotated(-game.camera.angle_target) + input = input.rotated(input_rotation) if Input.is_action_pressed("interact") or Input.is_action_just_released("interact"): input *= 0 else: diff --git a/client/player/follow_camera.gd b/client/player/follow_camera.gd index 88b6cad4..b080f76e 100644 --- a/client/player/follow_camera.gd +++ b/client/player/follow_camera.gd @@ -70,14 +70,21 @@ func reset(): camera_distance_target = 10 func follow(delta): - if not _disable_input: angle_target += Input.get_axis("rotate_left", "rotate_right") * ( - ROTATE_SPEED * delta * (-1 if Global.get_setting("gameplay.invert_camera") else 1) - ) + if Global.get_setting("gameplay.first_person"): + global_position = target.global_position + Vector3.UP * 1.5 + rotation = target.rotation + Vector3(0,PI,0) + if target.get_parent() is ControllablePlayer: + target.get_parent().input_rotation = -rotation.y + return + + var invert_factor = -1 if Global.get_setting("gameplay.invert_camera") else 1; + + if not _disable_input: + angle_target += Input.get_axis("rotate_left", "rotate_right") * ROTATE_SPEED * delta * invert_factor angle = G.interpolate_angle(angle, angle_target, delta * ROTATE_WEIGHT) - if not _disable_input: angle_up_target += Input.get_axis("rotate_down", "rotate_up") * ( - ROTATE_UP_SPEED * delta * (-1 if Global.get_setting("gameplay.invert_camera") else 1) - ) + if not _disable_input: + angle_up_target += Input.get_axis("rotate_down", "rotate_up") * ROTATE_UP_SPEED * delta * invert_factor angle_up_target = clamp(angle_up_target, ANGLE_UP_MIN, ANGLE_UP_MAX) angle_up = G.interpolate_angle(angle_up, angle_up_target, delta * ROTATE_UP_WEIGHT) @@ -109,6 +116,8 @@ func follow(delta): camera_distance = G.interpolate(camera_distance, camera_distance_target, delta * ZOOM_WEIGHT) position = ground + offset + if target.get_parent() is ControllablePlayer: + target.get_parent().input_rotation = -angle_target func set_ingame(state: bool, in_lobby: bool): # Disable input in lobby diff --git a/client/settings.gd b/client/settings.gd index ec605899..d217dd6c 100644 --- a/client/settings.gd +++ b/client/settings.gd @@ -29,6 +29,7 @@ static func get_root(): ToggleSetting.new("hints_started", false), ToggleSetting.new("latch_boost", true), ToggleSetting.new("accessible_movement", false), + ToggleSetting.new("first_person", false), ]), SettingsCategory.new("graphics", [ PresetRow.new("preset", { diff --git a/locale/en.ini b/locale/en.ini index 4dc87dae..749b887a 100644 --- a/locale/en.ini +++ b/locale/en.ini @@ -74,6 +74,7 @@ c.settings.gameplay.tutorial_disabled=Disable tutorial c.settings.gameplay.hints_started=Hints started c.settings.gameplay.usernames=Show username tags c.settings.gameplay.accessible_movement=Accessible movement controls +c.settings.gameplay.first_person=Enable first-person mode (reduces playability) c.settings.gameplay=Gameplay c.settings.graphics.aa.disabled=Disabled c.settings.graphics.aa.fx=FXAA |