- Added position markers for host and players during each round.

- Current player list updated to podium owners when round 1 is loaded.
- Rewrote video player code to hopefully load videos more reliably on restarts.
- Round 3 timer should no longer continue running when a new round is loaded.
- Overlays from round 3 now properly disable when a new round is loaded.
- Fixed cameras erroneously resetting to round 3 positions on new game start.
This commit is contained in:
2026-04-15 19:06:06 -04:00
parent 674e5b67ef
commit ace89dc62d
21 changed files with 2206 additions and 1438 deletions
@@ -65,7 +65,7 @@ public class CaseManager : UdonSharpBehaviour
[UdonSynced] private ContinentMap _FinalRoundContinent = ContinentMap.INDEX_MAX;
[UdonSynced] private string[] _CurrentWinningPlayers = new string[3];
[UdonSynced] private string[] _CurrentWinningPlayers = new string[0];
private DataDictionary _CaseFileDictionary;
@@ -44,7 +44,7 @@ MonoBehaviour:
Data:
- Name:
Entry: 12
Data: 9
Data: 11
- Name:
Entry: 7
Data:
@@ -410,19 +410,19 @@ MonoBehaviour:
Data:
- Name: $k
Entry: 1
Data: _CameraController
Data: _HostPositionMarker
- Name: $v
Entry: 7
Data: 26|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
- Name: <Name>k__BackingField
Entry: 1
Data: _CameraController
Data: _HostPositionMarker
- Name: <UserType>k__BackingField
Entry: 7
Data: 27|System.RuntimeType, mscorlib
- Name:
Entry: 1
Data: CameraControllerBase, Assembly-CSharp
Data: PositionMarker, Assembly-CSharp
- Name:
Entry: 8
Data:
@@ -479,16 +479,151 @@ MonoBehaviour:
Data:
- Name: $k
Entry: 1
Data: _Initialised
Data: _PlayerPositionMarkers
- Name: $v
Entry: 7
Data: 31|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
- Name: <Name>k__BackingField
Entry: 1
Data: _Initialised
Data: _PlayerPositionMarkers
- Name: <UserType>k__BackingField
Entry: 7
Data: 32|System.RuntimeType, mscorlib
- Name:
Entry: 1
Data: PositionMarker[], Assembly-CSharp
- Name:
Entry: 8
Data:
- Name: <SystemType>k__BackingField
Entry: 7
Data: 33|System.RuntimeType, mscorlib
- Name:
Entry: 1
Data: UnityEngine.Component[], UnityEngine.CoreModule
- Name:
Entry: 8
Data:
- Name: <SyncMode>k__BackingField
Entry: 7
Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib
- Name:
Entry: 6
Data:
- Name:
Entry: 8
Data:
- Name: <IsSerialized>k__BackingField
Entry: 5
Data: true
- Name: _fieldAttributes
Entry: 7
Data: 34|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib
- Name:
Entry: 12
Data: 1
- Name:
Entry: 7
Data: 35|UnityEngine.SerializeField, UnityEngine.CoreModule
- Name:
Entry: 8
Data:
- Name:
Entry: 13
Data:
- Name:
Entry: 8
Data:
- Name:
Entry: 8
Data:
- Name:
Entry: 8
Data:
- Name:
Entry: 7
Data:
- Name: $k
Entry: 1
Data: _CameraController
- Name: $v
Entry: 7
Data: 36|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
- Name: <Name>k__BackingField
Entry: 1
Data: _CameraController
- Name: <UserType>k__BackingField
Entry: 7
Data: 37|System.RuntimeType, mscorlib
- Name:
Entry: 1
Data: CameraControllerBase, Assembly-CSharp
- Name:
Entry: 8
Data:
- Name: <SystemType>k__BackingField
Entry: 9
Data: 4
- Name: <SyncMode>k__BackingField
Entry: 7
Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib
- Name:
Entry: 6
Data:
- Name:
Entry: 8
Data:
- Name: <IsSerialized>k__BackingField
Entry: 5
Data: true
- Name: _fieldAttributes
Entry: 7
Data: 38|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib
- Name:
Entry: 12
Data: 2
- Name:
Entry: 7
Data: 39|UnityEngine.SpaceAttribute, UnityEngine.CoreModule
- Name: height
Entry: 4
Data: 8
- Name:
Entry: 8
Data:
- Name:
Entry: 7
Data: 40|UnityEngine.SerializeField, UnityEngine.CoreModule
- Name:
Entry: 8
Data:
- Name:
Entry: 13
Data:
- Name:
Entry: 8
Data:
- Name:
Entry: 8
Data:
- Name:
Entry: 8
Data:
- Name:
Entry: 7
Data:
- Name: $k
Entry: 1
Data: _Initialised
- Name: $v
Entry: 7
Data: 41|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
- Name: <Name>k__BackingField
Entry: 1
Data: _Initialised
- Name: <UserType>k__BackingField
Entry: 7
Data: 42|System.RuntimeType, mscorlib
- Name:
Entry: 1
Data: System.Boolean, mscorlib
@@ -497,7 +632,7 @@ MonoBehaviour:
Data:
- Name: <SystemType>k__BackingField
Entry: 9
Data: 32
Data: 42
- Name: <SyncMode>k__BackingField
Entry: 7
Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib
@@ -512,7 +647,7 @@ MonoBehaviour:
Data: false
- Name: _fieldAttributes
Entry: 7
Data: 33|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib
Data: 43|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib
- Name:
Entry: 12
Data: 0
@@ -536,16 +671,16 @@ MonoBehaviour:
Data: _AllowInteractionFromHostCard
- Name: $v
Entry: 7
Data: 34|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
Data: 44|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
- Name: <Name>k__BackingField
Entry: 1
Data: _AllowInteractionFromHostCard
- Name: <UserType>k__BackingField
Entry: 9
Data: 32
Data: 42
- Name: <SystemType>k__BackingField
Entry: 9
Data: 32
Data: 42
- Name: <SyncMode>k__BackingField
Entry: 7
Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib
@@ -560,7 +695,7 @@ MonoBehaviour:
Data: false
- Name: _fieldAttributes
Entry: 7
Data: 35|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib
Data: 45|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib
- Name:
Entry: 12
Data: 0
@@ -48,9 +48,10 @@ public class GameManagerBase : UdonSharpBehaviour
[SerializeField] protected AudioManager _AudioManager;
[SerializeField] protected Microphone _PlayerMicrophone;
[SerializeField] protected Microphone _AudienceSilencer;
[Space]
[SerializeField] private PositionMarker _HostPositionMarker;
[SerializeField] private PositionMarker[] _PlayerPositionMarkers;
[Space]
[SerializeField] protected CameraControllerBase _CameraController;
@@ -112,6 +113,22 @@ public class GameManagerBase : UdonSharpBehaviour
SendCustomNetworkEvent(NetworkEventTarget.All, nameof(EnablePlayerMicrophone), true);
_HostPositionMarker.SetPlayer(_CaseManager.GetHostOwner().displayName);
string[] WinningPlayers = _CaseManager.GetCurrentWinningPlayers();
for (int i = 0; i < _PlayerPositionMarkers.Length; i++)
{
string PlayerName = "";
if (i < WinningPlayers.Length)
{
PlayerName = WinningPlayers[i];
}
else
{
PlayerName = _CaseManager.GetHostOwner().displayName;
}
_PlayerPositionMarkers[i].SetPlayer(PlayerName);
}
_Initialised = true;
}
@@ -119,6 +136,12 @@ public class GameManagerBase : UdonSharpBehaviour
{
SendCustomNetworkEvent(NetworkEventTarget.All, nameof(EnablePlayerMicrophone), false);
_HostPositionMarker.ClearPlayer();
for (int i = 0; i < _PlayerPositionMarkers.Length; i++)
{
_PlayerPositionMarkers[i].ClearPlayer();
}
_Initialised = false;
}
File diff suppressed because it is too large Load Diff
@@ -92,8 +92,6 @@ public class GameManagerRound1 : GameManagerBase
public override void InitialiseGameMode()
{
base.InitialiseGameMode();
_GameHasBegun = false;
_QuestionIndex = 0;
_QuestionStage = 0;
@@ -116,6 +114,8 @@ public class GameManagerRound1 : GameManagerBase
DisableInteraction();
base.InitialiseGameMode();
RequestSerialization();
}
@@ -187,13 +187,19 @@ public class GameManagerRound1 : GameManagerBase
return;
}
string[] CurrentPlayers = new string[3] {
_PlayerPodiums[0].PlayerName,
_PlayerPodiums[1].PlayerName,
_PlayerPodiums[2].PlayerName
};
_CaseManager.SetCurrentWinningPlayers(CurrentPlayers);
Interface.HeaderUI.text = _CaseManager.GetCaseTitle() + " has been loaded.";
Interface.CommentUI.text = _CaseManager.GetCaseDescription();
_GameHasBegun = false;
_VideoPlayer.LoadLists(_CaseManager.GetMaps(), _CaseManager.GetVideos());
_VideoPlayer.SetVideoIndex(_CaseManager.GetIntroVideo());
_VideoPlayer.PrepareMapsAndVideos(_CaseManager);
}
File diff suppressed because it is too large Load Diff
@@ -26,7 +26,6 @@ public class GameManagerRound2 : GameManagerBase
[SerializeField] private JailChain _JailChain;
[SerializeField] private JailPhone _JailPhone;
[SerializeField] private ParticleSystem[] _PlayerConfettiCannons;
[SerializeField] private PositionMarker[] _PlayerPositionMarkers;
[SerializeField] private RandomVideoPlayer _JailPlayer;
@@ -62,8 +61,6 @@ public class GameManagerRound2 : GameManagerBase
public override void InitialiseGameMode()
{
base.InitialiseGameMode();
_StageIndex = 0;
_PlayingJailCall = false;
@@ -72,12 +69,6 @@ public class GameManagerRound2 : GameManagerBase
_JailChain.Initialise();
_JailPhone.Initialise();
string[] WinningPlayers = _CaseManager.GetCurrentWinningPlayers();
for (int i = 0; i < _PlayerPositionMarkers.Length && i < WinningPlayers.Length; i++)
{
_PlayerPositionMarkers[i].SetPlayer(WinningPlayers[i]);
}
SendCustomNetworkEvent(NetworkEventTarget.All, nameof(EnableAudienceSilencer), true);
_CameraControllerRound2.InitialiseCameras();
@@ -87,6 +78,8 @@ public class GameManagerRound2 : GameManagerBase
_CameraControllerRound2.PlayModemZoom(true);
_CameraControllerRound2.WinningPlayerCamera_StopFollowingPlayers();
base.InitialiseGameMode();
RequestSerialization();
}
@@ -97,11 +90,6 @@ public class GameManagerRound2 : GameManagerBase
_JailPhone.Activate = false;
_JailChain.Show = false;
for (int i = 0; i < _PlayerPositionMarkers.Length; i++)
{
_PlayerPositionMarkers[i].ClearPlayer();
}
_CameraControllerRound2.DeinitialiseCameras();
_CameraControllerRound2.PlayModemZoom(false);
File diff suppressed because it is too large Load Diff
@@ -94,8 +94,6 @@ public class GameManagerRound3 : GameManagerBase
public override void InitialiseGameMode()
{
base.InitialiseGameMode();
_GameStatus = GameStatus.Pregame;
_StageIndex = 0;
@@ -133,17 +131,30 @@ public class GameManagerRound3 : GameManagerBase
DeinitialiseGameplayCameraFollowers();
DeinitialiseEndingCameraFollowers();
base.InitialiseGameMode();
RequestSerialization();
}
public override void DeinitialiseGameMode()
{
_RunTimer = false;
_EndingPlayer.PlayVideo = false;
_CameraControllerRound3.DeinitialiseCameras();
_NewspaperPublicDisplay.Activate(false);
_TimerPublicDisplay.Activate(false);
foreach (CameraOverlay Overlay in _TimerCameraOverlays)
{
Overlay.EnableOverlayElements(false);
}
foreach (CameraOverlay Overlay in _NewspaperCameraOverlays)
{
Overlay.EnableOverlayElements(false);
}
_VideoPlayerTimer = -1.0f;
base.DeinitialiseGameMode();
@@ -186,7 +197,6 @@ public class GameManagerRound3 : GameManagerBase
_Markers[i].SendCustomNetworkEvent(NetworkEventTarget.All, "Initialise");
}
ActiveMarker = 0;
GetCurrentMarker().SendCustomNetworkEvent(NetworkEventTarget.All, "SetPickupable", true);
}
@@ -230,6 +240,8 @@ public class GameManagerRound3 : GameManagerBase
private void DisplayBriefing()
{
ActiveMarker = 0;
HostCardCaptureCarmenExplainerInterface CaptureCarmenExplainerInterface =
(HostCardCaptureCarmenExplainerInterface)GetHostCardInterface(RoundSegmentType.CaptureCarmenExplainer);