- Added an admin panel, activated by pressing Jump while holding the host card.

- Improved the host card interface, and added more info between questions.
- Started preliminary work on a permissions system.
This commit is contained in:
Jamie Greunbaum 2025-06-05 19:08:34 -04:00
parent de0a866e6d
commit 3ca027c381
47 changed files with 12692 additions and 713 deletions

View File

@ -61,16 +61,19 @@
</ItemGroup>
<ItemGroup>
<Compile Include="Assets\VRChatCameraSystem\Ottpossum\Camera System\Scripts\CameraSystem_Console.cs" />
<Compile Include="Assets\UdonSharp\PlayerPermissions\PermissionsPanel.cs" />
<Compile Include="Assets\UdonSharp\HostCardInterfaces\HostCardLightningRoundInterface.cs" />
<Compile Include="Assets\UdonSharp\ChoiceCard.cs" />
<Compile Include="Assets\UdonSharp\HostCardInterfaces\HostCardMultipleChoiceInterface.cs" />
<Compile Include="Assets\UdonSharp\Buzzer.cs" />
<Compile Include="Assets\UdonSharp\PlayerPodium.cs" />
<Compile Include="Assets\UdonSharp\UtilityScripts\InteractToggle.cs" />
<Compile Include="Assets\UdonSharp\HostCardInterfaces\HostCardPregameInterface.cs" />
<Compile Include="Assets\UdonSharp\HostCardInterfaces\HostCardBetweenRoundsInterface.cs" />
<Compile Include="Assets\UdonSharp\PlayerPermissions\PermissionsPanelPlayerEntry.cs" />
<Compile Include="Assets\UdonSharp\HostCardInterfaces\HostCardInterfaceBase.cs" />
<Compile Include="Assets\UdonSharp\GameManager.cs" />
<Compile Include="Assets\UdonSharp\UtilityScripts\Synced\MasterToggleObject.cs" />
<Compile Include="Assets\UdonSharp\PlayerPermissions\AdminPanelInterface.cs" />
<Compile Include="Assets\UdonSharp\UtilityScripts\PlayerModSetter.cs" />
<Compile Include="Assets\UdonSharp\ChoiceCardGroup.cs" />
<Compile Include="Assets\VRChatCameraSystem\Ottpossum\Camera System\Scripts\CameraLightSystemManager.cs" />

View File

@ -9,13 +9,31 @@ AudioImporter:
sampleRateSetting: 0
sampleRateOverride: 44100
compressionFormat: 1
quality: 1
quality: 0.84999996
conversionMode: 0
preloadAudioData: 0
platformSettingOverrides: {}
forceToMono: 0
platformSettingOverrides:
4:
serializedVersion: 2
loadType: 0
sampleRateSetting: 0
sampleRateOverride: 44100
compressionFormat: 1
quality: 0.25
conversionMode: 0
preloadAudioData: 0
7:
serializedVersion: 2
loadType: 0
sampleRateSetting: 0
sampleRateOverride: 44100
compressionFormat: 1
quality: 0.25
conversionMode: 0
preloadAudioData: 0
forceToMono: 1
normalize: 1
loadInBackground: 0
loadInBackground: 1
ambisonic: 0
3D: 1
userData:

View File

@ -9,11 +9,29 @@ AudioImporter:
sampleRateSetting: 0
sampleRateOverride: 44100
compressionFormat: 1
quality: 1
quality: 0.84999996
conversionMode: 0
preloadAudioData: 0
platformSettingOverrides: {}
forceToMono: 0
platformSettingOverrides:
4:
serializedVersion: 2
loadType: 0
sampleRateSetting: 0
sampleRateOverride: 44100
compressionFormat: 1
quality: 0.25
conversionMode: 0
preloadAudioData: 0
7:
serializedVersion: 2
loadType: 0
sampleRateSetting: 0
sampleRateOverride: 44100
compressionFormat: 1
quality: 0.25
conversionMode: 0
preloadAudioData: 0
forceToMono: 1
normalize: 1
loadInBackground: 1
ambisonic: 0

View File

@ -9,13 +9,31 @@ AudioImporter:
sampleRateSetting: 0
sampleRateOverride: 44100
compressionFormat: 1
quality: 1
quality: 0.84999996
conversionMode: 0
preloadAudioData: 0
platformSettingOverrides: {}
forceToMono: 0
platformSettingOverrides:
4:
serializedVersion: 2
loadType: 0
sampleRateSetting: 0
sampleRateOverride: 44100
compressionFormat: 1
quality: 0.25
conversionMode: 0
preloadAudioData: 0
7:
serializedVersion: 2
loadType: 0
sampleRateSetting: 0
sampleRateOverride: 44100
compressionFormat: 1
quality: 0.25
conversionMode: 0
preloadAudioData: 0
forceToMono: 1
normalize: 1
loadInBackground: 0
loadInBackground: 1
ambisonic: 0
3D: 1
userData:

View File

@ -9,11 +9,29 @@ AudioImporter:
sampleRateSetting: 0
sampleRateOverride: 44100
compressionFormat: 1
quality: 1
quality: 0.84999996
conversionMode: 0
preloadAudioData: 0
platformSettingOverrides: {}
forceToMono: 0
platformSettingOverrides:
4:
serializedVersion: 2
loadType: 0
sampleRateSetting: 0
sampleRateOverride: 44100
compressionFormat: 1
quality: 0.25
conversionMode: 0
preloadAudioData: 0
7:
serializedVersion: 2
loadType: 0
sampleRateSetting: 0
sampleRateOverride: 44100
compressionFormat: 1
quality: 0.25
conversionMode: 0
preloadAudioData: 0
forceToMono: 1
normalize: 1
loadInBackground: 1
ambisonic: 0

View File

@ -9,13 +9,31 @@ AudioImporter:
sampleRateSetting: 0
sampleRateOverride: 44100
compressionFormat: 1
quality: 1
quality: 0.7
conversionMode: 0
preloadAudioData: 1
platformSettingOverrides: {}
forceToMono: 0
platformSettingOverrides:
4:
serializedVersion: 2
loadType: 0
sampleRateSetting: 0
sampleRateOverride: 44100
compressionFormat: 1
quality: 0.14999999
conversionMode: 0
preloadAudioData: 1
7:
serializedVersion: 2
loadType: 0
sampleRateSetting: 0
sampleRateOverride: 44100
compressionFormat: 1
quality: 0.14999999
conversionMode: 0
preloadAudioData: 1
forceToMono: 1
normalize: 1
loadInBackground: 0
loadInBackground: 1
ambisonic: 0
3D: 1
userData:

View File

@ -9,13 +9,31 @@ AudioImporter:
sampleRateSetting: 0
sampleRateOverride: 44100
compressionFormat: 1
quality: 1
quality: 0.7
conversionMode: 0
preloadAudioData: 1
platformSettingOverrides: {}
forceToMono: 0
platformSettingOverrides:
4:
serializedVersion: 2
loadType: 0
sampleRateSetting: 0
sampleRateOverride: 44100
compressionFormat: 1
quality: 0.14999999
conversionMode: 0
preloadAudioData: 1
7:
serializedVersion: 2
loadType: 0
sampleRateSetting: 0
sampleRateOverride: 44100
compressionFormat: 1
quality: 0.14999999
conversionMode: 0
preloadAudioData: 1
forceToMono: 1
normalize: 1
loadInBackground: 0
loadInBackground: 1
ambisonic: 0
3D: 1
userData:

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 510c1012ee5eba044b8c4161b150ca93
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:

Binary file not shown.

View File

@ -0,0 +1,21 @@
fileFormatVersion: 2
guid: 546833aff35b5494baf89e419b6d7977
TrueTypeFontImporter:
externalObjects: {}
serializedVersion: 4
fontSize: 16
forceTextureCase: -2
characterSpacing: 0
characterPadding: 1
includeFontData: 1
fontNames:
- OpenMoji Black
fallbackFontReferences: []
customCharacters:
fontRenderingMode: 0
ascentCalculationMode: 1
useLegacyBoundsCalculation: 0
shouldRoundAdvanceValue: 1
userData:
assetBundleName:
assetBundleVariant:

View File

@ -907,7 +907,7 @@ GameObject:
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
m_IsActive: 0
--- !u!224 &7566631391838123814
RectTransform:
m_ObjectHideFlags: 0
@ -1237,8 +1237,9 @@ MonoBehaviour:
_ChoiceCards: {fileID: 4424524232366912296}
_Buzzer: {fileID: 1145695079806890482}
_BuzzedInEffect: {fileID: 6181750060712598379}
_Nameplate: {fileID: 5247165531706728442}
_Scorecard: {fileID: 3651303298073640538}
_ScorecardObject: {fileID: 5278643753074928947}
_NameplateUI: {fileID: 5247165531706728442}
_ScorecardUI: {fileID: 3651303298073640538}
--- !u!114 &2656281140157091124
MonoBehaviour:
m_ObjectHideFlags: 0

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: e5310c6f06821984ca2c1886b9f3edc8
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: e09f76786b294ec48b10d7991da943ea
PrefabImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -8,6 +8,7 @@ using VRC.SDKBase;
using VRC.SDK3.StringLoading;
using TMPro;
using VRC.SDK3.Components;
using VRC.Udon.Common;
public enum QuestionType
@ -43,21 +44,28 @@ public class GameManager : UdonSharpBehaviour
[UdonSynced] private bool[] _PlayerBuzzInAllowed;
[UdonSynced] private int _BuzzedInPlayer = 0;
private DataList _QuestionsList = new DataList();
private int _QuestionIndex = 0;
private DataDictionary _CurrentQuestion;
private int _LightningRoundQuestionIndex = 0;
[UdonSynced] private bool _GameHasBegun = false;
[UdonSynced] private int _QuestionIndex = 0;
[UdonSynced] private int _LightningRoundQuestionIndex = 0;
[UdonSynced] private int _QuestionStage = 0;
[UdonSynced] private int _QuestionCorrectResponse = 0;
private DataList _QuestionsList = new DataList();
private DataDictionary _CurrentQuestion;
private bool _IsBeingHeld = false;
private float _StoredJumpImpulse = 0.0f;
[SerializeField] private PlayerPodium[] _PlayerPodiums;
[UdonSynced] public VRCUrl QuestionURL;
[SerializeField] private HostCardPregameInterface _PregameInterface;
[Header("UI")]
[SerializeField] private HostCardBetweenRoundsInterface _BetweenRoundsInterface;
[SerializeField] private HostCardMultipleChoiceInterface _MultipleChoiceInterface;
[SerializeField] private HostCardLightningRoundInterface _LightningRoundInterface;
[SerializeField] private AdminPanelInterface _AdminPanelInterface;
[Header("Audio")]
[SerializeField] private AudioClip _Ding = null;
[SerializeField] private AudioClip _Buzzer = null;
@ -77,6 +85,48 @@ public class GameManager : UdonSharpBehaviour
VRCStringDownloader.LoadUrl(QuestionURL, (IUdonEventReceiver)this);
}
public override void OnPickup()
{
Networking.SetOwner(Networking.LocalPlayer, gameObject);
_StoredJumpImpulse = Networking.LocalPlayer.GetJumpImpulse();
Networking.LocalPlayer.SetJumpImpulse(0.0f);
_IsBeingHeld = true;
base.OnPickup();
}
public override void OnDrop()
{
Networking.SetOwner(Networking.InstanceOwner, gameObject);
Networking.LocalPlayer.SetJumpImpulse(_StoredJumpImpulse);
_StoredJumpImpulse = 0.0f;
_IsBeingHeld = false;
base.OnDrop();
}
public override bool OnOwnershipRequest(VRCPlayerApi RequestingPlayer, VRCPlayerApi RequestedOwner)
{
Debug.LogError(RequestingPlayer.displayName + " is requesting that " + RequestedOwner.displayName + " become the new owner of the host card. No fucking way.");
return false;
}
public override void OnOwnershipTransferred(VRCPlayerApi Player)
{
Debug.LogError("New owner is " + Player);
}
public override void InputJump(bool Value, UdonInputEventArgs Args)
{
if (Value && _IsBeingHeld)
{
_AdminPanelInterface.gameObject.SetActive(!_AdminPanelInterface.gameObject.activeSelf);
}
base.InputJump(Value, Args);
}
public override void OnStringLoadSuccess(IVRCStringDownload DownloadedString)
{
string JSONString = DownloadedString.Result;
@ -97,13 +147,27 @@ public class GameManager : UdonSharpBehaviour
if (_QuestionsList.Count == 0)
{
_PregameInterface.HeaderUI.text = "Unable to find any questions. Ensure the root array elements are all objects.";
_BetweenRoundsInterface.HeaderUI.text =
"Unable to find any questions. Ensure the root array elements are all objects.";
return;
}
_CurrentQuestion = _QuestionsList[0].DataDictionary;
_PregameInterface.HeaderUI.text = "Found " + _QuestionsList.Count + " questions in this case file.";
_BetweenRoundsInterface.HeaderUI.text =
"Found " + _QuestionsList.Count + " questions in this case file. Press 'Use' button to show scores.";
// Reset podiums on a successful case load
for (int i = 0; i < _PlayerPodiums.Length; i++)
{
NetworkCalling.SendCustomNetworkEvent(
(IUdonEventReceiver)_PlayerPodiums[i],
NetworkEventTarget.All,
"ResetPodium");
}
_GameHasBegun = false;
EnableInteraction("Start Game");
}
else
{
@ -115,7 +179,7 @@ public class GameManager : UdonSharpBehaviour
private void NewMultipleChoiceQuestion()
{
_MultipleChoiceInterface.HeaderUI.text = "Multiple Choice";
_MultipleChoiceInterface.HeaderUI.text = QuestionTypeToString((QuestionType)((int)_CurrentQuestion["Type"].Number));
DataList ClueStrings = _CurrentQuestion["Clues"].DataList;
for (int i = 0; i < _MultipleChoiceInterface.CluesUI.Length && i < ClueStrings.Count; i++)
@ -164,6 +228,8 @@ public class GameManager : UdonSharpBehaviour
DataList Choices = _CurrentQuestion["Choices"].DataList;
EnableChoiceCards();
// Complex per-podium randomiser, to prevent peeking
Random.InitState(Networking.GetServerTimeInMilliseconds());
for (int i = 0; i < _PlayerPodiums.Length; i++)
{
int[] Indices = { 0, 1, 2 };
@ -236,7 +302,7 @@ public class GameManager : UdonSharpBehaviour
{
_LightningRoundQuestionIndex = 0;
_LightningRoundInterface.HeaderUI.text = "Lightning Round | " + _CurrentQuestion["Location"].ToString();
_LightningRoundInterface.HeaderUI.text = QuestionTypeToString((QuestionType)((int)_CurrentQuestion["Type"].Number)) + " | " + _CurrentQuestion["Location"].ToString();
_LightningRoundInterface.QuestionUI.text = "";
for (int i = 0; i < _LightningRoundInterface.ChoiceUI.Length && i < _LightningRoundInterface.ChoiceButtons.Length; i++)
{
@ -314,6 +380,10 @@ public class GameManager : UdonSharpBehaviour
{
LightningRoundCheckAnswer(3);
}
public void LightningRoundOtherOptionChosen()
{
WaitForBuzzInsWithoutLastPlayer();
}
private void AdvanceToNextQuestion()
@ -324,7 +394,7 @@ public class GameManager : UdonSharpBehaviour
_QuestionIndex++;
if (_QuestionIndex >= _QuestionsList.Count)
{
_PregameInterface.HeaderUI.text = "No More Questions";
_BetweenRoundsInterface.HeaderUI.text = "No More Questions";
EnableHostCardDisplay(QuestionType.None);
DisableInteraction();
return;
@ -333,14 +403,18 @@ public class GameManager : UdonSharpBehaviour
_CurrentQuestion = _QuestionsList[_QuestionIndex].DataDictionary;
_QuestionStage = 0;
ResetInfoCard();
// Again, why does this work, but not just casting to an enum?
_BetweenRoundsInterface.HeaderUI.text = "Upcoming Question: " + QuestionTypeToString((QuestionType)((int)_CurrentQuestion["Type"].Number));
EnableHostCardDisplay(QuestionType.None);
ResetMultipleChoiceInterface();
EnableInteraction("Show Next Question");
}
private void ResetInfoCard(string Header = "")
private void ResetMultipleChoiceInterface()
{
_MultipleChoiceInterface.HeaderUI.text = Header;
_MultipleChoiceInterface.HeaderUI.text = "";
for (int i = 0; i < _MultipleChoiceInterface.CluesUI.Length; i++)
{
@ -548,6 +622,24 @@ public class GameManager : UdonSharpBehaviour
{
if (IsInteractionDisabled()) { return; }
if (!_GameHasBegun)
{
for (int i = 0; i < _PlayerPodiums.Length; i++)
{
NetworkCalling.SendCustomNetworkEvent(
(IUdonEventReceiver)_PlayerPodiums[i],
NetworkEventTarget.All,
"DisplayScore");
}
SendCustomNetworkEvent(NetworkEventTarget.All, nameof(PlaySFXAtPitch), SFXEventType.Ding, D6);
_BetweenRoundsInterface.HeaderUI.text = "Upcoming Question: " + QuestionTypeToString((QuestionType)((int)_CurrentQuestion["Type"].Number));
EnableHostCardDisplay(QuestionType.None);
_GameHasBegun = true;
return;
}
AdvanceQuestion();
base.OnPickupUseDown();
@ -556,14 +648,14 @@ public class GameManager : UdonSharpBehaviour
private void EnableHostCardDisplay(QuestionType Type)
{
_PregameInterface.gameObject.SetActive(false);
_BetweenRoundsInterface.gameObject.SetActive(false);
_MultipleChoiceInterface.gameObject.SetActive(false);
_LightningRoundInterface.gameObject.SetActive(false);
switch(Type)
{
case QuestionType.None:
_PregameInterface.gameObject.SetActive(true);
_BetweenRoundsInterface.gameObject.SetActive(true);
break;
case QuestionType.MultipleChoice:
_MultipleChoiceInterface.gameObject.SetActive(true);
@ -600,6 +692,22 @@ public class GameManager : UdonSharpBehaviour
}
private string QuestionTypeToString(QuestionType Type)
{
int SwitchType = (int)Type;
switch(SwitchType)
{
case (int)QuestionType.None: return "None";
case (int)QuestionType.MultipleChoice: return "Standard Round";
case (int)QuestionType.LightningRound: return "Lightning Round";
case (int)QuestionType.DumpsterDive: return "Dumpster Dive";
case (int)QuestionType.FinalRound: return "Final Round";
case (int)QuestionType.Tiebreaker: return "Tiebreaker";
default: return "[[ERROR]]";
}
}
// A messy group of variables that are used for pitch correction of sound effects
// Since Udon doesn't support accessing public static values in structs, we're doing it here
// As5 = 932.33 Hz, PitchShift = TargetNoteFreq / As5Freq

View File

@ -10,7 +10,7 @@ MonoBehaviour:
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: c333ccfdd0cbdbc4ca30cef2dd6e6b9b, type: 3}
m_Name: HostCardPregameInterface
m_Name: HostCardBetweenRoundsInterface
m_EditorClassIdentifier:
serializedUdonProgramAsset: {fileID: 11400000, guid: a31237219d4606a46a5468beb624e6d9,
type: 2}
@ -21,7 +21,7 @@ MonoBehaviour:
compiledVersion: 2
behaviourSyncMode: 4
hasInteractEvent: 0
scriptID: -5547144053508790062
scriptID: 4102590987168841126
serializationData:
SerializedFormat: 2
SerializedBytes:

View File

@ -6,6 +6,6 @@ using VRC.Udon;
[UdonBehaviourSyncMode(BehaviourSyncMode.Manual)]
public class HostCardPregameInterface : HostCardInterfaceBase
public class HostCardBetweenRoundsInterface : HostCardInterfaceBase
{
}

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 5042d03c6d7368a4aaa5ae2a889e7629
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,233 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!114 &11400000
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: c333ccfdd0cbdbc4ca30cef2dd6e6b9b, type: 3}
m_Name: AdminPanelInterface
m_EditorClassIdentifier:
serializedUdonProgramAsset: {fileID: 11400000, guid: 140ab004ae5ff7d42ae7f58b405562f2,
type: 2}
udonAssembly:
assemblyError:
sourceCsScript: {fileID: 11500000, guid: 0caab5fa59e5ce349b5a601ecc7f6d5b, type: 3}
scriptVersion: 2
compiledVersion: 2
behaviourSyncMode: 4
hasInteractEvent: 0
scriptID: -5892168241610966170
serializationData:
SerializedFormat: 2
SerializedBytes:
ReferencedUnityObjects: []
SerializedBytesString:
Prefab: {fileID: 0}
PrefabModificationsReferencedUnityObjects: []
PrefabModifications: []
SerializationNodes:
- Name: fieldDefinitions
Entry: 7
Data: 0|System.Collections.Generic.Dictionary`2[[System.String, mscorlib],[UdonSharp.Compiler.FieldDefinition,
UdonSharp.Editor]], mscorlib
- Name: comparer
Entry: 7
Data: 1|System.Collections.Generic.GenericEqualityComparer`1[[System.String,
mscorlib]], mscorlib
- Name:
Entry: 8
Data:
- Name:
Entry: 12
Data: 3
- Name:
Entry: 7
Data:
- Name: $k
Entry: 1
Data: _PlayersPanel
- Name: $v
Entry: 7
Data: 2|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
- Name: <Name>k__BackingField
Entry: 1
Data: _PlayersPanel
- Name: <UserType>k__BackingField
Entry: 7
Data: 3|System.RuntimeType, mscorlib
- Name:
Entry: 1
Data: UnityEngine.GameObject, UnityEngine.CoreModule
- Name:
Entry: 8
Data:
- Name: <SystemType>k__BackingField
Entry: 9
Data: 3
- 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: 4|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib
- Name:
Entry: 12
Data: 1
- Name:
Entry: 7
Data: 5|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: _CamerasPanel
- Name: $v
Entry: 7
Data: 6|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
- Name: <Name>k__BackingField
Entry: 1
Data: _CamerasPanel
- Name: <UserType>k__BackingField
Entry: 9
Data: 3
- Name: <SystemType>k__BackingField
Entry: 9
Data: 3
- 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: 7|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib
- Name:
Entry: 12
Data: 1
- Name:
Entry: 7
Data: 8|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: _PlayerPodiums
- Name: $v
Entry: 7
Data: 9|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
- Name: <Name>k__BackingField
Entry: 1
Data: _PlayerPodiums
- Name: <UserType>k__BackingField
Entry: 7
Data: 10|System.RuntimeType, mscorlib
- Name:
Entry: 1
Data: PlayerPodium[], Assembly-CSharp
- Name:
Entry: 8
Data:
- Name: <SystemType>k__BackingField
Entry: 7
Data: 11|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: 12|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib
- Name:
Entry: 12
Data: 1
- Name:
Entry: 7
Data: 13|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: 13
Data:
- Name:
Entry: 8
Data:

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 002caa0f269d52c4fbd494741a032596
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,150 @@

using UdonSharp;
using UnityEngine;
using VRC.SDK3.UdonNetworkCalling;
using VRC.SDKBase;
using VRC.Udon;
using VRC.Udon.Common.Interfaces;
[UdonBehaviourSyncMode(BehaviourSyncMode.Manual)]
public class AdminPanelInterface : UdonSharpBehaviour
{
[SerializeField] private GameObject _PlayersPanel;
[SerializeField] private GameObject _CamerasPanel;
[SerializeField] private PlayerPodium[] _PlayerPodiums;
public void ShowPlayersAdminView()
{
_PlayersPanel.SetActive(true);
_CamerasPanel.SetActive(false);
}
public void ShowCamerasAdminView()
{
_PlayersPanel.SetActive(false);
_CamerasPanel.SetActive(true);
}
public void Player1_ResetPodiumOwner()
{
NetworkCalling.SendCustomNetworkEvent(
(IUdonEventReceiver)_PlayerPodiums[0],
NetworkEventTarget.All,
"ResetOwner");
}
public void Player2_ResetPodiumOwner()
{
NetworkCalling.SendCustomNetworkEvent(
(IUdonEventReceiver)_PlayerPodiums[1],
NetworkEventTarget.All,
"ResetOwner");
}
public void Player3_ResetPodiumOwner()
{
NetworkCalling.SendCustomNetworkEvent(
(IUdonEventReceiver)_PlayerPodiums[2],
NetworkEventTarget.All,
"ResetOwner");
}
public void Player1_DecreaseScoreBy5()
{
NetworkCalling.SendCustomNetworkEvent(
(IUdonEventReceiver)_PlayerPodiums[0],
NetworkEventTarget.All,
"DecreaseScoreBy5");
}
public void Player2_DecreaseScoreBy5()
{
NetworkCalling.SendCustomNetworkEvent(
(IUdonEventReceiver)_PlayerPodiums[1],
NetworkEventTarget.All,
"DecreaseScoreBy5");
}
public void Player3_DecreaseScoreBy5()
{
NetworkCalling.SendCustomNetworkEvent(
(IUdonEventReceiver)_PlayerPodiums[2],
NetworkEventTarget.All,
"DecreaseScoreBy5");
}
public void Player1_IncreaseScoreBy5()
{
NetworkCalling.SendCustomNetworkEvent(
(IUdonEventReceiver)_PlayerPodiums[0],
NetworkEventTarget.All,
"IncreaseScoreBy5");
}
public void Player2_IncreaseScoreBy5()
{
NetworkCalling.SendCustomNetworkEvent(
(IUdonEventReceiver)_PlayerPodiums[1],
NetworkEventTarget.All,
"IncreaseScoreBy5");
}
public void Player3_IncreaseScoreBy5()
{
NetworkCalling.SendCustomNetworkEvent(
(IUdonEventReceiver)_PlayerPodiums[2],
NetworkEventTarget.All,
"IncreaseScoreBy5");
}
public void Player1_ResetPodium()
{
NetworkCalling.SendCustomNetworkEvent(
(IUdonEventReceiver)_PlayerPodiums[0],
NetworkEventTarget.All,
"ResetPodium");
}
public void Player2_ResetPodium()
{
NetworkCalling.SendCustomNetworkEvent(
(IUdonEventReceiver)_PlayerPodiums[1],
NetworkEventTarget.All,
"ResetPodium");
}
public void Player3_ResetPodium()
{
NetworkCalling.SendCustomNetworkEvent(
(IUdonEventReceiver)_PlayerPodiums[2],
NetworkEventTarget.All,
"ResetPodium");
}
public void Camera1_Switch()
{
Debug.Log("Camera 1 should go live here.");
}
public void Camera2_Switch()
{
Debug.Log("Camera 2 should go live here.");
}
public void Camera3_Switch()
{
Debug.Log("Camera 3 should go live here.");
}
public void Camera4_Switch()
{
Debug.Log("Camera 4 should go live here.");
}
public void Camera5_Switch()
{
Debug.Log("Camera 5 should go live here.");
}
public void Camera6_Switch()
{
Debug.Log("Camera 6 should go live here.");
}
}

View File

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 0caab5fa59e5ce349b5a601ecc7f6d5b
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,227 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!114 &11400000
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: c333ccfdd0cbdbc4ca30cef2dd6e6b9b, type: 3}
m_Name: PermissionsPanel
m_EditorClassIdentifier:
serializedUdonProgramAsset: {fileID: 11400000, guid: a1c9cc3856eba8e4aa6786c04557fe4d,
type: 2}
udonAssembly:
assemblyError:
sourceCsScript: {fileID: 11500000, guid: 494fc4048736a6d4dbb2a8d10585d719, type: 3}
scriptVersion: 2
compiledVersion: 2
behaviourSyncMode: 4
hasInteractEvent: 0
scriptID: -3110328632252327434
serializationData:
SerializedFormat: 2
SerializedBytes:
ReferencedUnityObjects: []
SerializedBytesString:
Prefab: {fileID: 0}
PrefabModificationsReferencedUnityObjects: []
PrefabModifications: []
SerializationNodes:
- Name: fieldDefinitions
Entry: 7
Data: 0|System.Collections.Generic.Dictionary`2[[System.String, mscorlib],[UdonSharp.Compiler.FieldDefinition,
UdonSharp.Editor]], mscorlib
- Name: comparer
Entry: 7
Data: 1|System.Collections.Generic.GenericEqualityComparer`1[[System.String,
mscorlib]], mscorlib
- Name:
Entry: 8
Data:
- Name:
Entry: 12
Data: 3
- Name:
Entry: 7
Data:
- Name: $k
Entry: 1
Data: _ListContainer
- Name: $v
Entry: 7
Data: 2|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
- Name: <Name>k__BackingField
Entry: 1
Data: _ListContainer
- Name: <UserType>k__BackingField
Entry: 7
Data: 3|System.RuntimeType, mscorlib
- Name:
Entry: 1
Data: UnityEngine.RectTransform, UnityEngine.CoreModule
- Name:
Entry: 8
Data:
- Name: <SystemType>k__BackingField
Entry: 9
Data: 3
- 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: 4|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib
- Name:
Entry: 12
Data: 1
- Name:
Entry: 7
Data: 5|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: _PlayerItemTemplate
- Name: $v
Entry: 7
Data: 6|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
- Name: <Name>k__BackingField
Entry: 1
Data: _PlayerItemTemplate
- Name: <UserType>k__BackingField
Entry: 7
Data: 7|System.RuntimeType, mscorlib
- Name:
Entry: 1
Data: UnityEngine.GameObject, UnityEngine.CoreModule
- Name:
Entry: 8
Data:
- Name: <SystemType>k__BackingField
Entry: 9
Data: 7
- 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: 8|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib
- Name:
Entry: 12
Data: 1
- Name:
Entry: 7
Data: 9|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: PlayerData
- Name: $v
Entry: 7
Data: 10|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
- Name: <Name>k__BackingField
Entry: 1
Data: PlayerData
- Name: <UserType>k__BackingField
Entry: 7
Data: 11|System.RuntimeType, mscorlib
- Name:
Entry: 1
Data: VRC.SDK3.Data.DataDictionary, VRCSDK3
- Name:
Entry: 8
Data:
- Name: <SystemType>k__BackingField
Entry: 9
Data: 11
- 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: 12|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: 13
Data:
- Name:
Entry: 8
Data:

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 7a18e743daeb88b409a5ece5bd072afd
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,61 @@

using UdonSharp;
using UnityEngine;
using VRC.Core.Pool;
using VRC.SDK3.Data;
using VRC.SDKBase;
using VRC.Udon;
[UdonBehaviourSyncMode(BehaviourSyncMode.Manual)]
public class PermissionsPanel : UdonSharpBehaviour
{
[SerializeField] private RectTransform _ListContainer;
[SerializeField] private GameObject _PlayerItemTemplate;
private DataDictionary PlayerData = new DataDictionary();
public override void OnPlayerJoined(VRCPlayerApi Player)
{
GameObject NewListItem = Instantiate<GameObject>(_PlayerItemTemplate, _ListContainer, false);
NewListItem.SetActive(true);
PermissionsPanelPlayerEntry PlayerListItem = NewListItem.GetComponent<PermissionsPanelPlayerEntry>();
PlayerListItem.PlayerNameUI.text = Player.displayName;
PlayerData[Player.displayName] = new DataDictionary();
PlayerData[Player.displayName].DataDictionary["Admin"] = Player.isInstanceOwner;
PlayerData[Player.displayName].DataDictionary["Host"] = Player.isInstanceOwner;
PlayerData[Player.displayName].DataDictionary["Camera"] = Player.isInstanceOwner;
if (Networking.LocalPlayer.isInstanceOwner)
{
PlayerListItem.AdminToggle.interactable = true;
PlayerListItem.HostToggle.interactable = true;
PlayerListItem.CameraToggle.interactable = true;
PlayerListItem.AdminToggle.SetIsOnWithoutNotify(true);
PlayerListItem.HostToggle.SetIsOnWithoutNotify(true);
PlayerListItem.CameraToggle.SetIsOnWithoutNotify(true);
}
base.OnPlayerJoined(Player);
}
public override void OnPlayerLeft(VRCPlayerApi player)
{
for (int i = 0; i < _ListContainer.childCount; i++)
{
GameObject Entry = _ListContainer.GetChild(i).gameObject;
PermissionsPanelPlayerEntry PlayerEntry = Entry.GetComponent<PermissionsPanelPlayerEntry>();
if (PlayerEntry != null && PlayerEntry.PlayerNameUI.text == player.displayName)
{
Destroy(Entry);
break;
}
}
base.OnPlayerLeft(player);
}
}

View File

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 494fc4048736a6d4dbb2a8d10585d719
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,257 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!114 &11400000
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: c333ccfdd0cbdbc4ca30cef2dd6e6b9b, type: 3}
m_Name: PermissionsPanelPlayerEntry
m_EditorClassIdentifier:
serializedUdonProgramAsset: {fileID: 11400000, guid: 0b51a27d3f57bdc4ab0332a58fe01df9,
type: 2}
udonAssembly:
assemblyError:
sourceCsScript: {fileID: 11500000, guid: e9cbc755689c14f4fb9a2692d548196b, type: 3}
scriptVersion: 2
compiledVersion: 2
behaviourSyncMode: 4
hasInteractEvent: 0
scriptID: 8075328209008208282
serializationData:
SerializedFormat: 2
SerializedBytes:
ReferencedUnityObjects: []
SerializedBytesString:
Prefab: {fileID: 0}
PrefabModificationsReferencedUnityObjects: []
PrefabModifications: []
SerializationNodes:
- Name: fieldDefinitions
Entry: 7
Data: 0|System.Collections.Generic.Dictionary`2[[System.String, mscorlib],[UdonSharp.Compiler.FieldDefinition,
UdonSharp.Editor]], mscorlib
- Name: comparer
Entry: 7
Data: 1|System.Collections.Generic.GenericEqualityComparer`1[[System.String,
mscorlib]], mscorlib
- Name:
Entry: 8
Data:
- Name:
Entry: 12
Data: 4
- Name:
Entry: 7
Data:
- Name: $k
Entry: 1
Data: AdminToggle
- Name: $v
Entry: 7
Data: 2|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
- Name: <Name>k__BackingField
Entry: 1
Data: AdminToggle
- Name: <UserType>k__BackingField
Entry: 7
Data: 3|System.RuntimeType, mscorlib
- Name:
Entry: 1
Data: UnityEngine.UI.Toggle, UnityEngine.UI
- Name:
Entry: 8
Data:
- Name: <SystemType>k__BackingField
Entry: 9
Data: 3
- 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: 4|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: HostToggle
- Name: $v
Entry: 7
Data: 5|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
- Name: <Name>k__BackingField
Entry: 1
Data: HostToggle
- Name: <UserType>k__BackingField
Entry: 9
Data: 3
- Name: <SystemType>k__BackingField
Entry: 9
Data: 3
- 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: 6|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: CameraToggle
- Name: $v
Entry: 7
Data: 7|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
- Name: <Name>k__BackingField
Entry: 1
Data: CameraToggle
- Name: <UserType>k__BackingField
Entry: 9
Data: 3
- Name: <SystemType>k__BackingField
Entry: 9
Data: 3
- 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: 8|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: PlayerNameUI
- Name: $v
Entry: 7
Data: 9|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
- Name: <Name>k__BackingField
Entry: 1
Data: PlayerNameUI
- Name: <UserType>k__BackingField
Entry: 7
Data: 10|System.RuntimeType, mscorlib
- Name:
Entry: 1
Data: TMPro.TextMeshProUGUI, Unity.TextMeshPro
- Name:
Entry: 8
Data:
- Name: <SystemType>k__BackingField
Entry: 9
Data: 10
- 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: 11|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: 13
Data:
- Name:
Entry: 8
Data:

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 57d616d373f13a543823c1b4a026c06b
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,17 @@

using UdonSharp;
using UnityEngine;
using TMPro;
using VRC.SDKBase;
using VRC.Udon;
using UnityEngine.UI;
[UdonBehaviourSyncMode(BehaviourSyncMode.Manual)]
public class PermissionsPanelPlayerEntry : UdonSharpBehaviour
{
public Toggle AdminToggle;
public Toggle HostToggle;
public Toggle CameraToggle;
public TextMeshProUGUI PlayerNameUI;
}

View File

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: e9cbc755689c14f4fb9a2692d548196b
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -44,7 +44,7 @@ MonoBehaviour:
Data:
- Name:
Entry: 12
Data: 10
Data: 12
- Name:
Entry: 7
Data:
@ -344,16 +344,82 @@ MonoBehaviour:
Data:
- Name: $k
Entry: 1
Data: _ChoiceCards
Data: _ShowScoreCard
- Name: $v
Entry: 7
Data: 21|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
- Name: <Name>k__BackingField
Entry: 1
Data: _ChoiceCards
Data: _ShowScoreCard
- Name: <UserType>k__BackingField
Entry: 7
Data: 22|System.RuntimeType, mscorlib
- Name:
Entry: 1
Data: System.Boolean, mscorlib
- Name:
Entry: 8
Data:
- Name: <SystemType>k__BackingField
Entry: 9
Data: 22
- 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: 23|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib
- Name:
Entry: 12
Data: 2
- Name:
Entry: 7
Data: 24|UdonSharp.UdonSyncedAttribute, UdonSharp.Runtime
- Name:
Entry: 8
Data:
- Name:
Entry: 7
Data: 25|UdonSharp.FieldChangeCallbackAttribute, 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: _ChoiceCards
- Name: $v
Entry: 7
Data: 26|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
- Name: <Name>k__BackingField
Entry: 1
Data: _ChoiceCards
- Name: <UserType>k__BackingField
Entry: 7
Data: 27|System.RuntimeType, mscorlib
- Name:
Entry: 1
Data: ChoiceCardGroup, Assembly-CSharp
@ -377,13 +443,13 @@ MonoBehaviour:
Data: true
- Name: _fieldAttributes
Entry: 7
Data: 23|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib
Data: 28|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib
- Name:
Entry: 12
Data: 1
- Name:
Entry: 7
Data: 24|UnityEngine.SerializeField, UnityEngine.CoreModule
Data: 29|UnityEngine.SerializeField, UnityEngine.CoreModule
- Name:
Entry: 8
Data:
@ -407,13 +473,13 @@ MonoBehaviour:
Data: _Buzzer
- Name: $v
Entry: 7
Data: 25|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
Data: 30|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
- Name: <Name>k__BackingField
Entry: 1
Data: _Buzzer
- Name: <UserType>k__BackingField
Entry: 7
Data: 26|System.RuntimeType, mscorlib
Data: 31|System.RuntimeType, mscorlib
- Name:
Entry: 1
Data: Buzzer, Assembly-CSharp
@ -437,79 +503,10 @@ MonoBehaviour:
Data: true
- Name: _fieldAttributes
Entry: 7
Data: 27|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib
Data: 32|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib
- Name:
Entry: 12
Data: 1
- Name:
Entry: 7
Data: 28|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: _BuzzedInEffect
- Name: $v
Entry: 7
Data: 29|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
- Name: <Name>k__BackingField
Entry: 1
Data: _BuzzedInEffect
- Name: <UserType>k__BackingField
Entry: 7
Data: 30|System.RuntimeType, mscorlib
- Name:
Entry: 1
Data: UnityEngine.GameObject, UnityEngine.CoreModule
- Name:
Entry: 8
Data:
- Name: <SystemType>k__BackingField
Entry: 9
Data: 30
- 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: 31|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib
- Name:
Entry: 12
Data: 2
- Name:
Entry: 7
Data: 32|UnityEngine.HeaderAttribute, UnityEngine.CoreModule
- Name: header
Entry: 1
Data: Effects
- Name:
Entry: 8
Data:
- Name:
Entry: 7
Data: 33|UnityEngine.SerializeField, UnityEngine.CoreModule
@ -533,19 +530,19 @@ MonoBehaviour:
Data:
- Name: $k
Entry: 1
Data: _Nameplate
Data: _BuzzedInEffect
- Name: $v
Entry: 7
Data: 34|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
- Name: <Name>k__BackingField
Entry: 1
Data: _Nameplate
Data: _BuzzedInEffect
- Name: <UserType>k__BackingField
Entry: 7
Data: 35|System.RuntimeType, mscorlib
- Name:
Entry: 1
Data: TMPro.TextMeshProUGUI, Unity.TextMeshPro
Data: UnityEngine.GameObject, UnityEngine.CoreModule
- Name:
Entry: 8
Data:
@ -569,10 +566,19 @@ MonoBehaviour:
Data: 36|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib
- Name:
Entry: 12
Data: 1
Data: 2
- Name:
Entry: 7
Data: 37|UnityEngine.SerializeField, UnityEngine.CoreModule
Data: 37|UnityEngine.HeaderAttribute, UnityEngine.CoreModule
- Name: header
Entry: 1
Data: Effects
- Name:
Entry: 8
Data:
- Name:
Entry: 7
Data: 38|UnityEngine.SerializeField, UnityEngine.CoreModule
- Name:
Entry: 8
Data:
@ -593,13 +599,13 @@ MonoBehaviour:
Data:
- Name: $k
Entry: 1
Data: _Scorecard
Data: _ScorecardObject
- Name: $v
Entry: 7
Data: 38|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
Data: 39|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
- Name: <Name>k__BackingField
Entry: 1
Data: _Scorecard
Data: _ScorecardObject
- Name: <UserType>k__BackingField
Entry: 9
Data: 35
@ -620,13 +626,127 @@ MonoBehaviour:
Data: true
- Name: _fieldAttributes
Entry: 7
Data: 39|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib
Data: 40|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib
- Name:
Entry: 12
Data: 1
- Name:
Entry: 7
Data: 40|UnityEngine.SerializeField, UnityEngine.CoreModule
Data: 41|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: _NameplateUI
- Name: $v
Entry: 7
Data: 42|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
- Name: <Name>k__BackingField
Entry: 1
Data: _NameplateUI
- Name: <UserType>k__BackingField
Entry: 7
Data: 43|System.RuntimeType, mscorlib
- Name:
Entry: 1
Data: TMPro.TextMeshProUGUI, Unity.TextMeshPro
- Name:
Entry: 8
Data:
- Name: <SystemType>k__BackingField
Entry: 9
Data: 43
- 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: 44|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib
- Name:
Entry: 12
Data: 1
- Name:
Entry: 7
Data: 45|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: _ScorecardUI
- Name: $v
Entry: 7
Data: 46|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
- Name: <Name>k__BackingField
Entry: 1
Data: _ScorecardUI
- Name: <UserType>k__BackingField
Entry: 9
Data: 43
- Name: <SystemType>k__BackingField
Entry: 9
Data: 43
- 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: 47|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib
- Name:
Entry: 12
Data: 1
- Name:
Entry: 7
Data: 48|UnityEngine.SerializeField, UnityEngine.CoreModule
- Name:
Entry: 8
Data:

View File

@ -5,6 +5,7 @@ using TMPro;
using VRC.SDKBase;
using VRC.SDK3.UdonNetworkCalling;
using VRC.Udon.Common.Interfaces;
using VRC.Udon.Common;
[UdonBehaviourSyncMode(BehaviourSyncMode.Manual)]
public class PlayerPodium : UdonSharpBehaviour
@ -16,6 +17,7 @@ public class PlayerPodium : UdonSharpBehaviour
[UdonSynced, FieldChangeCallback(nameof(PlayerName))] private string _PlayerName = "Player";
[UdonSynced] private int _PlayerID = -1;
[UdonSynced, FieldChangeCallback(nameof(PlayerScore))] private int _PlayerScore = 50;
[UdonSynced, FieldChangeCallback(nameof(ShowScoreCard))] private bool _ShowScoreCard = false;
[SerializeField] private ChoiceCardGroup _ChoiceCards;
[SerializeField] private Buzzer _Buzzer;
@ -23,13 +25,15 @@ public class PlayerPodium : UdonSharpBehaviour
[Header("Effects")]
[SerializeField] private GameObject _BuzzedInEffect;
[SerializeField] private TextMeshProUGUI _Nameplate;
[SerializeField] private TextMeshProUGUI _Scorecard;
[SerializeField] private GameObject _ScorecardObject;
[SerializeField] private TextMeshProUGUI _NameplateUI;
[SerializeField] private TextMeshProUGUI _ScorecardUI;
void Start()
{
PlayerName = "Player " + PlayerNumber;
ResetPodium();
}
@ -50,8 +54,41 @@ public class PlayerPodium : UdonSharpBehaviour
RequestSerialization();
}
[NetworkCallable]
public void ResetOwner()
{
Networking.SetOwner(Networking.InstanceOwner, gameObject);
Networking.SetOwner(Networking.InstanceOwner, _ChoiceCards.gameObject);
Networking.SetOwner(Networking.InstanceOwner, _Buzzer.gameObject);
PlayerName = "Player " + PlayerNumber;
_PlayerID = -1;
}
public int GetPlayerID() { return _PlayerID; }
[NetworkCallable]
public void DisplayScore()
{
ShowScoreCard = true;
RequestSerialization();
}
private void _DisplayScorecardObject(bool Show)
{
_ScorecardObject.SetActive(Show);
}
[NetworkCallable]
public void ResetPodium()
{
ResetOwner();
EnableChoiceCards(false);
EnableBuzzer(false);
EnableBuzzInEffect(false);
PlayerScore = 50;
ShowScoreCard = false;
}
[NetworkCallable]
public void DecreaseScoreBy5()
@ -128,7 +165,7 @@ public class PlayerPodium : UdonSharpBehaviour
set
{
_PlayerName = value;
_Nameplate.text = value;
_NameplateUI.text = value;
}
get => _PlayerName;
}
@ -138,9 +175,19 @@ public class PlayerPodium : UdonSharpBehaviour
set
{
_PlayerScore = value;
_Scorecard.text = PlayerScore.ToString();
_ScorecardUI.text = PlayerScore.ToString();
RequestSerialization();
}
get => _PlayerScore;
}
public bool ShowScoreCard
{
set
{
_ShowScoreCard = value;
_DisplayScorecardObject(value);
}
get => _ShowScoreCard;
}
}

View File

@ -12,7 +12,7 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: c333ccfdd0cbdbc4ca30cef2dd6e6b9b, type: 3}
m_Name: BoneFollower
m_EditorClassIdentifier:
serializedUdonProgramAsset: {fileID: 11400000, guid: 52ecc8a73071e8e40928c3609699fcf4,
serializedUdonProgramAsset: {fileID: 11400000, guid: ccbda9bf23e2f714c9226283c77a92e5,
type: 2}
udonAssembly:
assemblyError:

View File

@ -12,7 +12,7 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: c333ccfdd0cbdbc4ca30cef2dd6e6b9b, type: 3}
m_Name: InteractToggle
m_EditorClassIdentifier:
serializedUdonProgramAsset: {fileID: 11400000, guid: 873dfce61b1514e429c92e0d2fded7de,
serializedUdonProgramAsset: {fileID: 11400000, guid: 405e38d3dfb2f514daeed0e28fbb4864,
type: 2}
udonAssembly:
assemblyError:

View File

@ -12,7 +12,7 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: c333ccfdd0cbdbc4ca30cef2dd6e6b9b, type: 3}
m_Name: PlayerModSetter
m_EditorClassIdentifier:
serializedUdonProgramAsset: {fileID: 11400000, guid: e81558796a212ab4d88e305e2010f24b,
serializedUdonProgramAsset: {fileID: 11400000, guid: f938e6c4ff027a74da405a1f9353fd2b,
type: 2}
udonAssembly:
assemblyError:

View File

@ -12,7 +12,7 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: c333ccfdd0cbdbc4ca30cef2dd6e6b9b, type: 3}
m_Name: GlobalToggleObject
m_EditorClassIdentifier:
serializedUdonProgramAsset: {fileID: 11400000, guid: 2fe8ced6184000f49bca526cd2c5891c,
serializedUdonProgramAsset: {fileID: 11400000, guid: c49c9265a3ef24642a6a4465d0a78872,
type: 2}
udonAssembly:
assemblyError:

View File

@ -12,7 +12,7 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: c333ccfdd0cbdbc4ca30cef2dd6e6b9b, type: 3}
m_Name: MasterToggleObject
m_EditorClassIdentifier:
serializedUdonProgramAsset: {fileID: 11400000, guid: a2d01d9f36ac6df49831be249e48ecc4,
serializedUdonProgramAsset: {fileID: 11400000, guid: 04024a76ab1924042ba521e11cb76d91,
type: 2}
udonAssembly:
assemblyError:

View File

@ -12,7 +12,7 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: c333ccfdd0cbdbc4ca30cef2dd6e6b9b, type: 3}
m_Name: TrackingDataFollower
m_EditorClassIdentifier:
serializedUdonProgramAsset: {fileID: 11400000, guid: 1b89d4552983c0448a7389decec3b555,
serializedUdonProgramAsset: {fileID: 11400000, guid: 17f8fbbe6cc186d4f8dbb057b01a4ec2,
type: 2}
udonAssembly:
assemblyError:

View File

@ -12,7 +12,7 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: c333ccfdd0cbdbc4ca30cef2dd6e6b9b, type: 3}
m_Name: WorldAudioSettings
m_EditorClassIdentifier:
serializedUdonProgramAsset: {fileID: 11400000, guid: 994b559b0f158b4499f8937980ed8694,
serializedUdonProgramAsset: {fileID: 11400000, guid: 128d924a3066b7546b2d1c73e61006ab,
type: 2}
udonAssembly:
assemblyError:

View File

@ -73,7 +73,7 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: d236b7d11115f2143951f1e14045df39, type: 3}
m_Name: Android Settings
m_EditorClassIdentifier:
m_LoaderManagerInstance: {fileID: 0}
m_LoaderManagerInstance: {fileID: 6900794099702676279}
m_InitManagerOnStart: 0
--- !u!114 &4281006169972801466
MonoBehaviour:
@ -92,3 +92,20 @@ MonoBehaviour:
m_AutomaticRunning: 0
m_Loaders:
- {fileID: 11400000, guid: 23d984f26145ee349875a6787759935a, type: 2}
--- !u!114 &6900794099702676279
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: f4c3631f5e58749a59194e0cf6baf6d5, type: 3}
m_Name: Android Providers
m_EditorClassIdentifier:
m_RequiresSettingsUpdate: 0
m_AutomaticLoading: 0
m_AutomaticRunning: 0
m_Loaders:
- {fileID: 11400000, guid: 23d984f26145ee349875a6787759935a, type: 2}

View File

@ -168,15 +168,15 @@ PlayerSettings:
tvOS: 0
overrideDefaultApplicationIdentifier: 0
AndroidBundleVersionCode: 1
AndroidMinSdkVersion: 22
AndroidTargetSdkVersion: 0
AndroidMinSdkVersion: 25
AndroidTargetSdkVersion: 33
AndroidPreferredInstallLocation: 1
aotOptions:
stripEngineCode: 1
iPhoneStrippingLevel: 0
iPhoneScriptCallOptimization: 0
ForceInternetPermission: 0
ForceSDCardPermission: 0
ForceSDCardPermission: 1
CreateWallpaper: 0
APKExpansionFiles: 0
keepLoadedShadersAlive: 0
@ -257,7 +257,7 @@ PlayerSettings:
useCustomGradlePropertiesTemplate: 0
useCustomGradleSettingsTemplate: 0
useCustomProguardFile: 0
AndroidTargetArchitectures: 1
AndroidTargetArchitectures: 2
AndroidTargetDevices: 0
AndroidSplashScreenScale: 0
androidSplashScreen: {fileID: 0}
@ -505,7 +505,7 @@ PlayerSettings:
- m_BuildTarget: PS4Player
m_GraphicsJobs: 1
- m_BuildTarget: iOSSupport
m_GraphicsJobs: 0
m_GraphicsJobs: 1
- m_BuildTarget: WindowsStandaloneSupport
m_GraphicsJobs: 1
- m_BuildTarget: XboxOnePlayer
@ -513,7 +513,7 @@ PlayerSettings:
- m_BuildTarget: LuminSupport
m_GraphicsJobs: 0
- m_BuildTarget: AndroidPlayer
m_GraphicsJobs: 0
m_GraphicsJobs: 1
- m_BuildTarget: WebGLSupport
m_GraphicsJobs: 0
m_BuildTargetGraphicsJobMode:
@ -527,7 +527,7 @@ PlayerSettings:
m_Automatic: 0
- m_BuildTarget: iOSSupport
m_APIs: 10000000
m_Automatic: 0
m_Automatic: 1
- m_BuildTarget: AppleTVSupport
m_APIs: 10000000
m_Automatic: 1
@ -821,7 +821,7 @@ PlayerSettings:
webGLMemoryGeometricGrowthCap: 96
webGLPowerPreference: 2
scriptingDefineSymbols:
Android: UNITY_POST_PROCESSING_STACK_V2
Android: UNITY_POST_PROCESSING_STACK_V2;UDONSHARP;UDON;VRC_SDK_VRCSDK3;VRC_ENABLE_PLAYER_PERSISTENCE
EmbeddedLinux: UNITY_POST_PROCESSING_STACK_V2
GameCoreXboxOne: UNITY_POST_PROCESSING_STACK_V2
Nintendo Switch: UNITY_POST_PROCESSING_STACK_V2
@ -833,11 +833,13 @@ PlayerSettings:
VisionOS: UNITY_POST_PROCESSING_STACK_V2
WebGL: UNITY_POST_PROCESSING_STACK_V2
XboxOne: UNITY_POST_PROCESSING_STACK_V2
iPhone: UDONSHARP;UDON;VRC_SDK_VRCSDK3;VRC_ENABLE_PLAYER_PERSISTENCE
tvOS: UNITY_POST_PROCESSING_STACK_V2
additionalCompilerArguments: {}
platformArchitecture: {}
scriptingBackend: {}
il2cppCompilerConfiguration:
Android: 1
Standalone: 1
il2cppCodeGeneration: {}
managedStrippingLevel:
@ -864,6 +866,7 @@ PlayerSettings:
gcIncremental: 1
gcWBarrierValidation: 0
apiCompatibilityLevelPerPlatform:
Android: 3
Standalone: 3
iPhone: 3
m_RenderingPath: 1

View File

@ -1,16 +1,19 @@
2a901a7e324931f4db17ce54515ad209
9672859a94551274b9079efbf9adc4a9
d93ea6d5213349a4aa01b00d77edba61
510c1012ee5eba044b8c4161b150ca93
546833aff35b5494baf89e419b6d7977
a793cd1d5fe89c440900d816c7b8c323
ff135f18e14d9a94287191652767f722
9ae5e187a5d8f4e4893d37b62cbf0959
a793cd1d5fe89c440900d816c7b8c323
51b03d257a738e6468f623865f31dbec
d93ea6d5213349a4aa01b00d77edba61
8ded9a8136c72af4f901e652f138f9b6
220d5a1f1701e674794a1083cc2f0bac
49170bf20870c7c45873b3c1966d86af
2c0cd617d97924748a9d5e2eeb2039b5
accd304c49b7d6d43b97738e8e118342
d1244b908a4cccd4397cc9cad45fe846
faae26a849699fc4b804b74882a344df
9548a7b08d0e33a44bad0a5907660be7
51b03d257a738e6468f623865f31dbec
0c8a5bdda43be2a4e9cdad84677fbb62
8a0236a6fb2773f46b033e383a3f4f55
9cdc0250a4c9b534fae68ae6aa90bf31
@ -361,5 +364,3 @@ a6c1d9564b56ecd47b82dfa7a8f11cbe
d419d3432b8a0a24b986e614c57c2039
21221da753878694b9b9518a540dda85
70108d78e82c2ec488d6b504865508e0
accd304c49b7d6d43b97738e8e118342
49170bf20870c7c45873b3c1966d86af