aboutsummaryrefslogtreecommitdiff
path: root/client
diff options
context:
space:
mode:
Diffstat (limited to 'client')
-rw-r--r--client/game.gd33
1 files changed, 22 insertions, 11 deletions
diff --git a/client/game.gd b/client/game.gd
index 5b0062f9..5503c017 100644
--- a/client/game.gd
+++ b/client/game.gd
@@ -406,28 +406,39 @@ func update_center():
spectate_free()
func spectate_center():
+ var no_chefs = true
+ for v in players.values():
+ no_chefs = no_chefs or v.is_chef
+
var sum: int = 0
- var player_sum: int = 0
var center: Vector3 = Vector3(0.,0.,0.)
- var player_center: Vector3 = Vector3(0.,0.,0.)
for v in players.values():
var p: Player = v
- if !p.is_customer:
- player_sum += 1
- player_center += p.movement_base.position
sum += 1
center += p.movement_base.position
- var new_center: Vector3 = Vector3(0.,0.,0.)
- if player_sum > 0:
- new_center = player_center / player_sum
+ var bmin = Vector2.INF
+ var bmax = -Vector2.INF
+ for p in players.values():
+ if !p.is_customer or no_chefs:
+ bmin.x = min(bmin.x, p.movement_base.position.x)
+ bmin.y = min(bmin.y, p.movement_base.position.z)
+ bmax.x = max(bmax.x, p.movement_base.position.x)
+ bmax.y = max(bmax.y, p.movement_base.position.z)
+ var extent = max(bmax.x - bmin.x, bmax.y - bmin.y)
+
+ if sum > 0:
+ $Center.position = center / sum
+ $FollowCamera.camera_distance_target = max(extent * 2, 5)
elif sum > 0:
- new_center = center / sum
+ $Center.position = center / sum
+ $FollowCamera.camera_distance_target = max(extent * 2, 5)
else:
var extents = map.extents()
var map_center = ((extents[0] + extents[1]) / 2) + Vector2(.5, .5)
- new_center = Vector3(map_center.x, 0.,map_center.y)
- $Center.position = new_center
+ $Center.position = Vector3(map_center.x, 0.,map_center.y)
+ $FollowCamera.camera_distance_target = (extents[1] - extents[0]).length() / 2
+
func spectate_free():
var direction := Input.get_vector("left", "right", "forwards", "backwards")