summaryrefslogtreecommitdiff
path: root/client/player
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2024-09-21 19:51:44 +0200
committermetamuffin <metamuffin@disroot.org>2024-09-21 19:51:44 +0200
commit9aae9ed16b3072ce46e7448c0dd5482c95a38faf (patch)
tree90890ad911ecd8805ca155fcbd74c1e258b3e8a8 /client/player
parentf2a61d6d60ba1d628ccc7ee3b591e5fdb601e59f (diff)
downloadhurrycurry-9aae9ed16b3072ce46e7448c0dd5482c95a38faf.tar
hurrycurry-9aae9ed16b3072ce46e7448c0dd5482c95a38faf.tar.bz2
hurrycurry-9aae9ed16b3072ce46e7448c0dd5482c95a38faf.tar.zst
first person mode
Diffstat (limited to 'client/player')
-rw-r--r--client/player/controllable_player.gd6
-rw-r--r--client/player/follow_camera.gd21
2 files changed, 20 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