- Added correct and incorrect buzzers during multiple choice rounds.

- Fixed sync issues with map displays.
- Fixed sync issues with podium ownership changes after a reset.
This commit is contained in:
2025-07-11 03:02:28 -04:00
parent 1bb921d8ed
commit 6de4cef1aa
25 changed files with 795 additions and 463 deletions
@@ -433,8 +433,8 @@ MonoBehaviour:
Entry: 7
Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib
- Name:
Entry: 6
Data:
Entry: 3
Data: 1
- Name:
Entry: 8
Data:
@@ -446,7 +446,13 @@ MonoBehaviour:
Data: 28|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib
- Name:
Entry: 12
Data: 0
Data: 1
- Name:
Entry: 7
Data: 29|UdonSharp.UdonSyncedAttribute, UdonSharp.Runtime
- Name:
Entry: 8
Data:
- Name:
Entry: 13
Data:
@@ -467,7 +473,7 @@ MonoBehaviour:
Data: _CaseFileLootImage
- Name: $v
Entry: 7
Data: 29|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
Data: 30|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
- Name: <Name>k__BackingField
Entry: 1
Data: _CaseFileLootImage
@@ -481,8 +487,8 @@ MonoBehaviour:
Entry: 7
Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib
- Name:
Entry: 6
Data:
Entry: 3
Data: 1
- Name:
Entry: 8
Data:
@@ -491,10 +497,16 @@ MonoBehaviour:
Data: false
- Name: _fieldAttributes
Entry: 7
Data: 30|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib
Data: 31|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib
- Name:
Entry: 12
Data: 0
Data: 1
- Name:
Entry: 7
Data: 32|UdonSharp.UdonSyncedAttribute, UdonSharp.Runtime
- Name:
Entry: 8
Data:
- Name:
Entry: 13
Data:
@@ -515,13 +527,13 @@ MonoBehaviour:
Data: _CaseFileMaps
- Name: $v
Entry: 7
Data: 31|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
Data: 33|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
- Name: <Name>k__BackingField
Entry: 1
Data: _CaseFileMaps
- Name: <UserType>k__BackingField
Entry: 7
Data: 32|System.RuntimeType, mscorlib
Data: 34|System.RuntimeType, mscorlib
- Name:
Entry: 1
Data: VRC.SDKBase.VRCUrl[], VRCSDKBase
@@ -530,61 +542,13 @@ MonoBehaviour:
Data:
- Name: <SystemType>k__BackingField
Entry: 9
Data: 32
Data: 34
- 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: false
- Name: _fieldAttributes
Entry: 7
Data: 33|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib
- Name:
Entry: 12
Data: 0
- 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: _CaseFileVideos
- Name: $v
Entry: 7
Data: 34|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
- Name: <Name>k__BackingField
Entry: 1
Data: _CaseFileVideos
- Name: <UserType>k__BackingField
Entry: 9
Data: 32
- Name: <SystemType>k__BackingField
Entry: 9
Data: 32
- Name: <SyncMode>k__BackingField
Entry: 7
Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib
- Name:
Entry: 6
Data:
Entry: 3
Data: 1
- Name:
Entry: 8
Data:
@@ -596,7 +560,67 @@ MonoBehaviour:
Data: 35|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib
- Name:
Entry: 12
Data: 0
Data: 1
- Name:
Entry: 7
Data: 36|UdonSharp.UdonSyncedAttribute, UdonSharp.Runtime
- 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: _CaseFileVideos
- Name: $v
Entry: 7
Data: 37|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
- Name: <Name>k__BackingField
Entry: 1
Data: _CaseFileVideos
- Name: <UserType>k__BackingField
Entry: 9
Data: 34
- Name: <SystemType>k__BackingField
Entry: 9
Data: 34
- Name: <SyncMode>k__BackingField
Entry: 7
Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib
- Name:
Entry: 3
Data: 1
- Name:
Entry: 8
Data:
- Name: <IsSerialized>k__BackingField
Entry: 5
Data: false
- Name: _fieldAttributes
Entry: 7
Data: 38|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib
- Name:
Entry: 12
Data: 1
- Name:
Entry: 7
Data: 39|UdonSharp.UdonSyncedAttribute, UdonSharp.Runtime
- Name:
Entry: 8
Data:
- Name:
Entry: 13
Data:
@@ -617,13 +641,13 @@ MonoBehaviour:
Data: _CaseFileDictionary
- Name: $v
Entry: 7
Data: 36|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
Data: 40|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
- Name: <Name>k__BackingField
Entry: 1
Data: _CaseFileDictionary
- Name: <UserType>k__BackingField
Entry: 7
Data: 37|System.RuntimeType, mscorlib
Data: 41|System.RuntimeType, mscorlib
- Name:
Entry: 1
Data: VRC.SDK3.Data.DataDictionary, VRCSDK3
@@ -632,7 +656,7 @@ MonoBehaviour:
Data:
- Name: <SystemType>k__BackingField
Entry: 9
Data: 37
Data: 41
- Name: <SyncMode>k__BackingField
Entry: 7
Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib
@@ -647,7 +671,7 @@ MonoBehaviour:
Data: false
- Name: _fieldAttributes
Entry: 7
Data: 38|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib
Data: 42|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib
- Name:
Entry: 12
Data: 0
@@ -37,10 +37,11 @@ public class CaseManager : UdonSharpBehaviour
[SerializeField] private Texture[] CrookPortraits;
private VRCUrl _CaseFileCluesURL;
private VRCUrl _CaseFileLootImage;
private VRCUrl[] _CaseFileMaps;
private VRCUrl[] _CaseFileVideos;
[UdonSynced] private VRCUrl _CaseFileCluesURL;
[UdonSynced] private VRCUrl _CaseFileLootImage;
[UdonSynced] private VRCUrl[] _CaseFileMaps;
[UdonSynced] private VRCUrl[] _CaseFileVideos;
private DataDictionary _CaseFileDictionary;
@@ -113,6 +114,8 @@ public class CaseManager : UdonSharpBehaviour
{
Debug.LogError("Malformed case file. " + ErrorString);
}
RequestSerialization();
}
public string ContinueToRound1()
@@ -48,7 +48,6 @@ public class GameManagerRound1 : GameManagerBase
_QuestionStage = 0;
_PlayerBuzzInAllowed = new bool[_PlayerPodiums.Length];
ResetBuzzers();
base.InitialiseGameMode();
}
@@ -152,7 +151,8 @@ public class GameManagerRound1 : GameManagerBase
DataList Maps = _CurrentQuestion["Maps"].DataList;
for (int i = 0; i < Maps.Count; i++)
{
_VideoPlayer.LoadMap((int)Maps[i].Number);
NetworkCalling.SendCustomNetworkEvent((IUdonEventReceiver)_VideoPlayer, NetworkEventTarget.All,
"LoadMap", (int)Maps[i].Number);
}
}
@@ -205,7 +205,7 @@ public class GameManagerRound1 : GameManagerBase
private void MultipleChoiceRevealQuestion()
{
_QuestionSubstage = 0;
_VideoPlayer.ShowSubMap(SubMap.NoLabels);
_VideoPlayer.SubMapIndex = SubMap.NoLabels;
HostCardMultipleChoiceInterface Interface =
(HostCardMultipleChoiceInterface)GetHostCardInterface(RoundSegmentType.MultipleChoice);
@@ -240,7 +240,7 @@ public class GameManagerRound1 : GameManagerBase
private void MultipleChoiceRevealChoice1()
{
_VideoPlayer.ShowSubMap(SubMap.OneLabel);
_VideoPlayer.SubMapIndex = SubMap.OneLabel;
HostCardMultipleChoiceInterface Interface =
(HostCardMultipleChoiceInterface)GetHostCardInterface(RoundSegmentType.MultipleChoice);
@@ -254,7 +254,7 @@ public class GameManagerRound1 : GameManagerBase
}
private void MultipleChoiceRevealChoice2()
{
_VideoPlayer.ShowSubMap(SubMap.TwoLabels);
_VideoPlayer.SubMapIndex = SubMap.TwoLabels;
HostCardMultipleChoiceInterface Interface =
(HostCardMultipleChoiceInterface)GetHostCardInterface(RoundSegmentType.MultipleChoice);
@@ -268,7 +268,7 @@ public class GameManagerRound1 : GameManagerBase
}
private void MultipleChoiceRevealChoice3()
{
_VideoPlayer.ShowSubMap(SubMap.ThreeLabels);
_VideoPlayer.SubMapIndex = SubMap.ThreeLabels;
HostCardMultipleChoiceInterface Interface =
(HostCardMultipleChoiceInterface)GetHostCardInterface(RoundSegmentType.MultipleChoice);
@@ -342,12 +342,22 @@ public class GameManagerRound1 : GameManagerBase
Interface.HeaderUI.text = "ANSWER REVEALED";
bool IsSomeoneCorrect = false;
for (int i = 0; i < _PlayerPodiums.Length; i++)
{
NetworkCalling.SendCustomNetworkEvent(
(IUdonEventReceiver)_PlayerPodiums[i],
NetworkEventTarget.All,
"VerifyMultipleChoiceResponse", _QuestionCorrectResponse);
bool Correct = _PlayerPodiums[i].VerifyMultipleChoiceResponse(_QuestionCorrectResponse);
IsSomeoneCorrect = IsSomeoneCorrect ? true : Correct;
}
if (IsSomeoneCorrect)
{
NetworkCalling.SendCustomNetworkEvent((IUdonEventReceiver)_AudioManager, NetworkEventTarget.All,
"PlaySFX", SFXEventType.Round1Correct);
}
else
{
NetworkCalling.SendCustomNetworkEvent((IUdonEventReceiver)_AudioManager, NetworkEventTarget.All,
"PlaySFX", SFXEventType.Round1Incorrect);
}
_VideoPlayer.FlashCorrectAnswer = true;
@@ -416,10 +426,7 @@ public class GameManagerRound1 : GameManagerBase
int PodiumIndex = _BuzzedInPlayer - 1;
if (PodiumIndex >= 0 && PodiumIndex < _PlayerPodiums.Length)
{
NetworkCalling.SendCustomNetworkEvent(
(IUdonEventReceiver)_PlayerPodiums[PodiumIndex],
NetworkEventTarget.All,
"AdjustScore", 5);
_PlayerPodiums[PodiumIndex].AdjustScore(5);
}
EndBuzzInPeriod();
@@ -518,10 +525,7 @@ public class GameManagerRound1 : GameManagerBase
int PodiumIndex = _BuzzedInPlayer - 1;
if (PodiumIndex >= 0 && PodiumIndex < _PlayerPodiums.Length)
{
NetworkCalling.SendCustomNetworkEvent(
(IUdonEventReceiver)_PlayerPodiums[PodiumIndex],
NetworkEventTarget.All,
"AdjustScore", 5);
_PlayerPodiums[PodiumIndex].AdjustScore(5);
}
}
@@ -570,7 +574,8 @@ public class GameManagerRound1 : GameManagerBase
DataList Maps = _CurrentQuestion["Maps"].DataList;
for (int i = 0; i < Maps.Count; i++)
{
_VideoPlayer.LoadMap((int)Maps[i].Number);
NetworkCalling.SendCustomNetworkEvent((IUdonEventReceiver)_VideoPlayer, NetworkEventTarget.All,
"LoadMap", (int)Maps[i].Number);
}
}
@@ -579,7 +584,7 @@ public class GameManagerRound1 : GameManagerBase
private void FinalRoundShowMapPreview()
{
_VideoPlayer.ShowSubMap(SubMap.ThreeLabels);
_VideoPlayer.SubMapIndex = SubMap.ThreeLabels;
EnableRiskCards();
@@ -638,7 +643,7 @@ public class GameManagerRound1 : GameManagerBase
}
private void FinalRoundRevealChoice1()
{
_VideoPlayer.ShowSubMap(SubMap.OneLabel);
_VideoPlayer.SubMapIndex = SubMap.OneLabel;
HostCardMultipleChoiceInterface Interface =
(HostCardMultipleChoiceInterface)GetHostCardInterface(RoundSegmentType.FinalRound);
@@ -651,7 +656,7 @@ public class GameManagerRound1 : GameManagerBase
}
private void FinalRoundRevealChoice2()
{
_VideoPlayer.ShowSubMap(SubMap.TwoLabels);
_VideoPlayer.SubMapIndex = SubMap.TwoLabels;
HostCardMultipleChoiceInterface Interface =
(HostCardMultipleChoiceInterface)GetHostCardInterface(RoundSegmentType.FinalRound);
@@ -664,7 +669,7 @@ public class GameManagerRound1 : GameManagerBase
}
private void FinalRoundRevealChoice3()
{
_VideoPlayer.ShowSubMap(SubMap.ThreeLabels);
_VideoPlayer.SubMapIndex = SubMap.ThreeLabels;
HostCardMultipleChoiceInterface Interface =
(HostCardMultipleChoiceInterface)GetHostCardInterface(RoundSegmentType.FinalRound);
@@ -777,10 +782,7 @@ public class GameManagerRound1 : GameManagerBase
int PlayerNumber = _FinalRoundPlayersSortedByScore[PlayerPlace - 1];
_PlayerPodiums[PlayerNumber - 1].EnableBuzzInEffect(false);
NetworkCalling.SendCustomNetworkEvent(
(IUdonEventReceiver)_PlayerPodiums[PlayerNumber - 1],
NetworkEventTarget.All,
"VerifyFinalRoundResponse", _QuestionCorrectResponse);
_PlayerPodiums[PlayerNumber - 1].VerifyFinalRoundResponse(_QuestionCorrectResponse);
// If we're assigning points to the first-place player, then we're
// about to finish up, so just move on to determining winners.
@@ -53,6 +53,9 @@ public class GameManagerRound3 : GameManagerBase
public override void InitialiseGameMode()
{
_StageIndex = 0;
// We'll need to reset the markers and regenerate the map here, too.
base.InitialiseGameMode();
}
@@ -221,15 +224,22 @@ public class GameManagerRound3 : GameManagerBase
NetworkCalling.SendCustomNetworkEvent((IUdonEventReceiver)_AudioManager, NetworkEventTarget.All,
"PlaySFXLoop", SFXEventType.CarmenInJail);
SendCustomEventDelayedSeconds(nameof(StopFinalRoundMusic), 1.0f);
SendCustomEventDelayedSeconds(nameof(PlayWindDownMusic), 5.0f);
SendCustomEventDelayedSeconds(nameof(EndCarmenInJailSFX), 7.0f);
}
}
public void StopFinalRoundMusic()
{
NetworkCalling.SendCustomNetworkEvent((IUdonEventReceiver)_AudioManager, NetworkEventTarget.All, "StopMusic");
}
public void PlayWindDownMusic()
{
NetworkCalling.SendCustomNetworkEvent((IUdonEventReceiver)_AudioManager, NetworkEventTarget.All,
"PlayMusicLoop", MusicEventType.CarmenSandiegoWindDown);
SendCustomEventDelayedSeconds(nameof(EndCarmenInJailSFX), 2.0f);
EnableInteraction("Do It, Rockapella!");
}
public void EndCarmenInJailSFX()
{
@@ -252,11 +262,37 @@ public class GameManagerRound3 : GameManagerBase
(HostCardBetweenRoundsInterface)GetHostCardInterface(RoundSegmentType.BetweenSegments);
GameLossInterface.HeaderUI.text = "The player has lost. " + _SuccessCounter + " countries in " + TIMER_LENGTH + " seconds.";
NetworkCalling.SendCustomNetworkEvent((IUdonEventReceiver)_AudioManager, NetworkEventTarget.All,
"StopMusic");
StopFinalRoundMusic();
SendCustomEventDelayedSeconds(nameof(PlayWindDownMusic), 2.5f);
}
}
private void DoItRockapella()
{
HostCardBetweenRoundsInterface Interface =
(HostCardBetweenRoundsInterface)GetHostCardInterface(RoundSegmentType.BetweenSegments);
Interface.HeaderUI.text = "Rockin' it acapella";
NetworkCalling.SendCustomNetworkEvent((IUdonEventReceiver)_AudioManager, NetworkEventTarget.All,
"PlayMusicLoop", MusicEventType.CarmenSandiegoTheme);
EnableInteraction("End Game");
}
private void EndGame()
{
HostCardBetweenRoundsInterface Interface =
(HostCardBetweenRoundsInterface)GetHostCardInterface(RoundSegmentType.BetweenSegments);
Interface.HeaderUI.text = "Game is over. Load a new case file to start again.";
NetworkCalling.SendCustomNetworkEvent((IUdonEventReceiver)_AudioManager, NetworkEventTarget.All, "StopMusic");
EnableInteraction("Game is over. Load a new case file to start again.");
}
private void GameStatusUpdate(GameStatus NewStatus)
{
if ((int)_GameStatus <= (int)GameStatus.Begin)
@@ -272,14 +308,12 @@ public class GameManagerRound3 : GameManagerBase
{
NetworkCalling.SendCustomNetworkEvent((IUdonEventReceiver)_AudioManager, NetworkEventTarget.All,
"PlaySFX", SFXEventType.MapCorrect);
//_AudioManager.PlaySFX(SFXEventType.MapCorrect);
}
public void PlayIncorrectSound()
{
NetworkCalling.SendCustomNetworkEvent((IUdonEventReceiver)_AudioManager, NetworkEventTarget.All,
"PlaySFX", SFXEventType.MapIncorrect);
//_AudioManager.PlaySFX(SFXEventType.MapIncorrect);
}
private void UpdateInterface()
@@ -307,6 +341,8 @@ public class GameManagerRound3 : GameManagerBase
{
case 1: DisplayBriefing(); break;
case 2: BeginRound(); break;
case 3: DoItRockapella(); break;
case 4: EndGame(); break;
}
}
}