diff options
author | metamuffin <metamuffin@disroot.org> | 2025-06-04 20:00:46 +0200 |
---|---|---|
committer | metamuffin <metamuffin@disroot.org> | 2025-06-04 20:00:46 +0200 |
commit | fe11bc036ad342e178ba29e66e014baa1e60d380 (patch) | |
tree | f89a1801a6a948f8774354cb797cd33bd03a5d78 /client/game.gd | |
parent | 16a10279073a117729bf7de00df1345fe0570366 (diff) | |
download | hurrycurry-fe11bc036ad342e178ba29e66e014baa1e60d380.tar hurrycurry-fe11bc036ad342e178ba29e66e014baa1e60d380.tar.bz2 hurrycurry-fe11bc036ad342e178ba29e66e014baa1e60d380.tar.zst |
implement specator auto-zoom; closes #281
Diffstat (limited to 'client/game.gd')
-rw-r--r-- | client/game.gd | 33 |
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") |