aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--client/game.gd14
-rw-r--r--client/player/follow_camera.gd27
2 files changed, 25 insertions, 16 deletions
diff --git a/client/game.gd b/client/game.gd
index b2d16f56..50230f93 100644
--- a/client/game.gd
+++ b/client/game.gd
@@ -298,6 +298,7 @@ func handle_packet(p):
follow_camera.set_ingame(p.state, p.lobby)
if p.state:
+ reset_camera()
map.gi_bake()
await get_parent()._menu_open()
map.autobake = true
@@ -450,6 +451,13 @@ func get_tile_interactive(pos: Vector2i, hands: Array) -> bool:
if item_index_by_name[hand.item_name] in tile_placeable_items[tile]: return true
return false
+func reset_camera():
+ var extents = map.extents()
+ var map_center = ((extents[0] + extents[1]) / 2) + Vector2(.5, .5)
+ $FollowCamera.reset()
+ $Center.position = Vector3(map_center.x, 0., map_center.y)
+ $FollowCamera.jump_to_target()
+ $FollowCamera.camera_distance = 20.
func update_center():
$FollowCamera.autozoom = spectating_mode == SpectatingMode.CENTER and join_state == JoinState.SPECTATING
@@ -464,10 +472,8 @@ func update_center():
elif spectating_mode == SpectatingMode.FREE and Input.is_action_just_pressed("reset"):
spectating_mode = SpectatingMode.CENTER
match spectating_mode:
- SpectatingMode.CENTER:
- spectate_center()
- SpectatingMode.FREE:
- spectate_free()
+ SpectatingMode.CENTER: spectate_center()
+ SpectatingMode.FREE: spectate_free()
func spectate_center():
var any_chefs = false
diff --git a/client/player/follow_camera.gd b/client/player/follow_camera.gd
index 42670118..60b7cc6d 100644
--- a/client/player/follow_camera.gd
+++ b/client/player/follow_camera.gd
@@ -56,6 +56,7 @@ func _ready():
func _process(delta):
if target != null:
+ handle_input(delta)
follow(delta)
func _input(event):
@@ -74,6 +75,20 @@ func zoom(zoom_dist: float) -> void:
camera_distance_target *= exp(zoom_dist * ZOOM_SPEED)
camera_distance_target = clamp(camera_distance_target, MIN_ZOOM, MAX_ZOOM)
+func handle_input(delta):
+ if _disable_input: return
+ var invert_factor = -1 if Settings.read("gameplay.invert_camera") else 1;
+ angle_target += Input.get_axis("rotate_left", "rotate_right") * ROTATE_SPEED * delta * invert_factor
+ angle_up_target += Input.get_axis("rotate_down", "rotate_up") * ROTATE_UP_SPEED * delta * invert_factor
+
+ var zoom_dist = Input.get_axis("zoom_in", "zoom_out") * delta
+ zoom_dist += float(Input.is_action_just_pressed("zoom_out_discrete")) * DISCRETE_DURATION
+ zoom_dist -= float(Input.is_action_just_pressed("zoom_in_discrete")) * DISCRETE_DURATION
+ zoom(zoom_dist)
+
+func jump_to_target():
+ follow(INF)
+
func follow(delta):
if Settings.read("gameplay.first_person"):
var player = target.get_parent()
@@ -86,15 +101,9 @@ func follow(delta):
target.get_parent().input_rotation = -rotation.y
return
else: fov = 45.
-
- var invert_factor = -1 if Settings.read("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 * 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)
@@ -116,12 +125,6 @@ func follow(delta):
# add 0.5, this is the head height
ground = G.interpolate(ground, target.position + Vector3(0., 0.5, 0.), delta * MOVE_WEIGHT)
- if not _disable_input:
- var zoom_dist = Input.get_axis("zoom_in", "zoom_out") * delta
- zoom_dist += float(Input.is_action_just_pressed("zoom_out_discrete")) * DISCRETE_DURATION
- zoom_dist -= float(Input.is_action_just_pressed("zoom_in_discrete")) * DISCRETE_DURATION
- zoom(zoom_dist)
-
camera_distance = G.interpolate(camera_distance, camera_distance_target, delta * (ZOOM_WEIGHT_AUTO if autozoom else ZOOM_WEIGHT))
position = ground + offset