From 4ae38adb208c435ff6a021cdd0517768c5314fe6 Mon Sep 17 00:00:00 2001 From: Leonardo Bishop Date: Sun, 30 Jul 2023 19:12:09 +0100 Subject: Add observed health and team colours to spectator mode --- code/pawn/component/camera/BaseCameraComponent.cs | 15 +++++++++++++++ code/pawn/component/camera/PlayerCameraComponent.cs | 15 +++++++++++++++ code/pawn/component/camera/SpectatorCameraComponent.cs | 15 +++++++++++++++ code/ui/PlayerInfo.razor | 9 +++++---- code/ui/health/Health.razor | 6 +++--- code/ui/team/TeamInfo.razor | 6 +++--- code/ui/weapon/Reload.razor | 8 ++++---- 7 files changed, 60 insertions(+), 14 deletions(-) diff --git a/code/pawn/component/camera/BaseCameraComponent.cs b/code/pawn/component/camera/BaseCameraComponent.cs index be310c8..029586a 100644 --- a/code/pawn/component/camera/BaseCameraComponent.cs +++ b/code/pawn/component/camera/BaseCameraComponent.cs @@ -17,4 +17,19 @@ public class BaseCameraComponent : EntityComponent, ISingletonComponent { } + + public virtual InventoryComponent GetObservedInventory() + { + return null; + } + + public virtual float GetObservedHealth() + { + return 0; + } + + public virtual Team GetObservedTeam() + { + return Team.Spectator; + } } diff --git a/code/pawn/component/camera/PlayerCameraComponent.cs b/code/pawn/component/camera/PlayerCameraComponent.cs index 5011c67..702f0c8 100644 --- a/code/pawn/component/camera/PlayerCameraComponent.cs +++ b/code/pawn/component/camera/PlayerCameraComponent.cs @@ -45,4 +45,19 @@ public class PlayerCameraComponent : BaseCameraComponent pl.ViewAngles = viewAngles.WithPitch( viewAngles.pitch.Clamp( -89f, 89f ) ); return; } + + public override InventoryComponent GetObservedInventory() + { + return Entity.Inventory; + } + + public override float GetObservedHealth() + { + return Entity.Health; + } + + public override Team GetObservedTeam() + { + return Entity.CurrentTeam; + } } diff --git a/code/pawn/component/camera/SpectatorCameraComponent.cs b/code/pawn/component/camera/SpectatorCameraComponent.cs index f81e186..bba92f6 100644 --- a/code/pawn/component/camera/SpectatorCameraComponent.cs +++ b/code/pawn/component/camera/SpectatorCameraComponent.cs @@ -38,4 +38,19 @@ public class SpectatorCameraComponent : BaseCameraComponent { return Game.Clients.Where(c => c.Pawn is Player player && player.CurrentTeam != Team.Spectator && player.LifeState == LifeState.Alive).ToList(); } + + public override InventoryComponent GetObservedInventory() + { + return Target?.Inventory; + } + + public override float GetObservedHealth() + { + return Target?.Health ?? Entity.Health; + } + + public override Team GetObservedTeam() + { + return Target?.CurrentTeam ?? Entity.CurrentTeam; + } } diff --git a/code/ui/PlayerInfo.razor b/code/ui/PlayerInfo.razor index 2acdef0..fed61c0 100644 --- a/code/ui/PlayerInfo.razor +++ b/code/ui/PlayerInfo.razor @@ -26,12 +26,13 @@ playerinfo { { public string GetTeamColour() { - var ClientPawn = Game.LocalPawn; - if (ClientPawn is Player) + var clientPawn = Game.LocalPawn; + if (clientPawn is Player {Camera: not null } player) { - return TeamOperations.GetTeamColour(((Player)ClientPawn).CurrentTeam); + var colour = TeamOperations.GetTeamColour(player.Camera.GetObservedTeam()); + return string.IsNullOrWhiteSpace(colour) ? "white" : colour; } - return ""; + return "white"; } protected override int BuildHash() diff --git a/code/ui/health/Health.razor b/code/ui/health/Health.razor index 8961f63..9600c8b 100644 --- a/code/ui/health/Health.razor +++ b/code/ui/health/Health.razor @@ -30,10 +30,10 @@ Health { public int GetHealth() { - var ClientPawn = Game.LocalPawn; - if (ClientPawn is Player) + var clientPawn = Game.LocalPawn; + if (clientPawn is Player {Camera: not null } player) { - return ClientPawn.Health.CeilToInt(); + return player.Camera.GetObservedHealth().CeilToInt(); } return 0; } diff --git a/code/ui/team/TeamInfo.razor b/code/ui/team/TeamInfo.razor index 883dcf0..4451810 100644 --- a/code/ui/team/TeamInfo.razor +++ b/code/ui/team/TeamInfo.razor @@ -22,10 +22,10 @@ public string GetTeamName() { - var ClientPawn = Game.LocalPawn; - if (ClientPawn is Player) + var clientPawn = Game.LocalPawn; + if (clientPawn is Player {Camera: not null } player) { - return TeamOperations.GetTeamName(((Player)ClientPawn).CurrentTeam); + return TeamOperations.GetTeamName(player.Camera.GetObservedTeam()); } return ""; } diff --git a/code/ui/weapon/Reload.razor b/code/ui/weapon/Reload.razor index d325ade..190a84c 100644 --- a/code/ui/weapon/Reload.razor +++ b/code/ui/weapon/Reload.razor @@ -60,11 +60,11 @@ reload { protected override int BuildHash() { - var localPawn = Game.LocalPawn; - if (localPawn is Player player) + var clientPawn = Game.LocalPawn; + if (clientPawn is Player {Camera: not null } player) { - var inventory = player.Inventory; - if (inventory != null && inventory.GetCurrentWeapon() != null) + var inventory = player.Camera.GetObservedInventory(); + if (inventory?.GetCurrentWeapon() != null) { var weapon = inventory.GetCurrentWeapon(); var ammo = weapon.Ammo; -- cgit v1.2.3-70-g09d2