Player permissions are functional, and properly enables and disables cameras.

This commit is contained in:
2025-09-07 04:30:05 -04:00
parent 0053f283c7
commit 168d814ad9
14 changed files with 309 additions and 51 deletions
@@ -349,7 +349,7 @@ public class GameManagerRound3 : GameManagerBase
{
HostCardBetweenRoundsInterface Interface =
(HostCardBetweenRoundsInterface)GetHostCardInterface(RoundSegmentType.BetweenSegments);
Interface.HeaderUI.text = "Rockin' it acapella";
Interface.HeaderUI.text = "Rockin' it a capella";
Interface.CommentUI.text = "";
_AudioManager.SendCustomNetworkEvent(NetworkEventTarget.All, "FadeOutMusic");
@@ -44,7 +44,7 @@ MonoBehaviour:
Data:
- Name:
Entry: 12
Data: 7
Data: 8
- Name:
Entry: 7
Data:
@@ -453,6 +453,72 @@ MonoBehaviour:
- Name:
Entry: 8
Data:
- Name:
Entry: 7
Data:
- Name: $k
Entry: 1
Data: CameraConsole
- Name: $v
Entry: 7
Data: 28|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
- Name: <Name>k__BackingField
Entry: 1
Data: CameraConsole
- Name: <UserType>k__BackingField
Entry: 7
Data: 29|System.RuntimeType, mscorlib
- Name:
Entry: 1
Data: CameraSystem.CameraSystem_Console, Assembly-CSharp
- Name:
Entry: 8
Data:
- Name: <SystemType>k__BackingField
Entry: 7
Data: 30|System.RuntimeType, mscorlib
- Name:
Entry: 1
Data: VRC.Udon.UdonBehaviour, VRC.Udon
- 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: 31|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib
- Name:
Entry: 12
Data: 1
- Name:
Entry: 7
Data: 32|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:
@@ -1,4 +1,5 @@
using CameraSystem;
using UdonSharp;
using UnityEngine;
using VRC.SDK3.Data;
@@ -18,6 +19,8 @@ public class PermissionsPanel : UdonSharpBehaviour
[SerializeField] private RectTransform _ListContainer;
[SerializeField] private GameObject _PlayerItemTemplate;
[SerializeField] private CameraSystem_Console CameraConsole;
private const int MAX_PLAYERS_IN_LIST = 100;
@@ -59,7 +62,7 @@ public class PermissionsPanel : UdonSharpBehaviour
{
if (PlayerData_Name[i] == Player.displayName)
{
Debug.Log("[PermissionsPanel] Found exiting player " + PlayerData_Name[i] + "on the list. Removing...");
Debug.Log("[PermissionsPanel] Found exiting player " + PlayerData_Name[i] + " on the list. Removing...");
PlayerData_Name[i] = null;
Debug.Log("[PermissionsPanel] PlayerData_Name[" + i + "] now equals " + PlayerData_Name[i]);
break;
@@ -82,38 +85,133 @@ public class PermissionsPanel : UdonSharpBehaviour
public void PermissionsChanged()
{
Networking.SetOwner(Networking.LocalPlayer, gameObject);
for (int i = 0; i < PlayerData_Name.Length; i++)
{
GameObject Entry = _ListContainer.GetChild(i).gameObject;
PermissionsPanelPlayerEntry PlayerEntry = Entry.GetComponent<PermissionsPanelPlayerEntry>();
PermissionsPanelPlayerEntry PlayerEntry = _ListContainer.GetChild(i).GetComponent<PermissionsPanelPlayerEntry>();
PlayerData_Admin[i] = PlayerEntry.AdminToggle.isOn;
PlayerData_Host[i] = PlayerEntry.HostToggle.isOn;
PlayerData_Camera[i] = PlayerEntry.CameraToggle.isOn;
}
RebuildPlayerList();
RequestSerialization();
}
public string[] GetAdmins()
{
return GetListOfUsers(PlayerData_Admin);
}
public string[] GetHosts()
{
return GetListOfUsers(PlayerData_Host);
}
public string[] GetCameraOperators()
{
return GetListOfUsers(PlayerData_Camera);
}
private string[] GetListOfUsers(bool[] ListToCheck)
{
string[] ListBig = new string[PlayerData_Name.Length];
int Count = 0;
for (int i = 0; i < PlayerData_Name.Length; i++)
{
if (PlayerData_Name[i] != null && ListToCheck[i])
{
ListBig[Count] = PlayerData_Name[i];
Count++;
}
}
string[] List = new string[Count];
Count = 0;
while (ListBig[Count] != null)
{
List[Count] = ListBig[Count];
Count++;
}
return List;
}
public bool IsPlayerAdmin(VRCPlayerApi Player)
{
return IsPlayerAdmin(Player.displayName);
}
public bool IsPlayerAdmin(string PlayerName)
{
for (int i = 0; i < PlayerData_Name.Length; i++)
{
if (PlayerName == PlayerData_Name[i]) { return PlayerData_Admin[i]; }
}
return false;
}
public bool IsPlayerHost(VRCPlayerApi Player)
{
return IsPlayerHost(Player.displayName);
}
public bool IsPlayerHost(string PlayerName)
{
for (int i = 0; i < PlayerData_Name.Length; i++)
{
if (PlayerName == PlayerData_Name[i]) { return PlayerData_Host[i]; }
}
return false;
}
public bool IsPlayerCameraOperator(VRCPlayerApi Player)
{
return IsPlayerCameraOperator(Player.displayName);
}
public bool IsPlayerCameraOperator(string PlayerName)
{
for (int i = 0; i < PlayerData_Name.Length; i++)
{
if (PlayerName == PlayerData_Name[i]) { return PlayerData_Camera[i]; }
}
return false;
}
private void RebuildPlayerList()
{
Debug.Log("[PermissionsPanel] Rebuilding the player list...");
for (int i = 0; i < PlayerData_Name.Length; i++)
{
Debug.Log("[PermissionsPanel] PlayerData_Name[" + i + "] is " + PlayerData_Name[i]);
PermissionsPanelPlayerEntry PlayerListItem = _ListContainer.GetChild(i).GetComponent<PermissionsPanelPlayerEntry>();
PlayerListItem.AdminToggle.interactable = false;
PlayerListItem.HostToggle.interactable = false;
PlayerListItem.CameraToggle.interactable = false;
if (PlayerData_Name[i] != null)
{
PlayerListItem.PlayerNameUI.text = PlayerData_Name[i];
if (PlayerData_Admin[i] != PlayerListItem.AdminToggle.isOn)
{
Debug.Log("[PermissionsPanel] " + PlayerData_Name[i] + " is " + (PlayerData_Admin[i] ? "now" : "no longer") + " an admin.");
}
PlayerListItem.AdminToggle.SetIsOnWithoutNotify(PlayerData_Admin[i]);
PlayerListItem.HostToggle.SetIsOnWithoutNotify(PlayerData_Host[i]);
PlayerListItem.CameraToggle.SetIsOnWithoutNotify(PlayerData_Camera[i]);
PlayerListItem.AdminToggle.interactable = (Networking.LocalPlayer.isInstanceOwner || Networking.LocalPlayer.isMaster);
if (PlayerData_Host[i] != PlayerListItem.HostToggle.isOn)
{
Debug.Log("[PermissionsPanel] " + PlayerData_Name[i] + " is " + (PlayerData_Host[i] ? "now" : "no longer") + " a host.");
}
PlayerListItem.HostToggle.SetIsOnWithoutNotify(PlayerData_Host[i]);
PlayerListItem.HostToggle.interactable = (Networking.LocalPlayer.isInstanceOwner || Networking.LocalPlayer.isMaster);
if (PlayerData_Camera[i] != PlayerListItem.CameraToggle.isOn)
{
Debug.Log("[PermissionsPanel] " + PlayerData_Name[i] + " is " + (PlayerData_Camera[i] ? "now" : "no longer") + " a camera operator.");
}
PlayerListItem.CameraToggle.SetIsOnWithoutNotify(PlayerData_Camera[i]);
PlayerListItem.CameraToggle.interactable = (Networking.LocalPlayer.isInstanceOwner || Networking.LocalPlayer.isMaster);
PlayerListItem.gameObject.SetActive(true);
@@ -123,5 +221,40 @@ public class PermissionsPanel : UdonSharpBehaviour
PlayerListItem.gameObject.SetActive(false);
}
}
if (IsPlayerAdmin(Networking.LocalPlayer))
{
for (int i = 0; i < PlayerData_Name.Length; i++)
{
PermissionsPanelPlayerEntry PlayerListItem = _ListContainer.GetChild(i).GetComponent<PermissionsPanelPlayerEntry>();
PlayerListItem.AdminToggle.interactable = true;
PlayerListItem.HostToggle.interactable = true;
PlayerListItem.CameraToggle.interactable = true;
}
}
if (IsPlayerHost(Networking.LocalPlayer))
{
for (int i = 0; i < PlayerData_Name.Length; i++)
{
PermissionsPanelPlayerEntry PlayerListItem = _ListContainer.GetChild(i).GetComponent<PermissionsPanelPlayerEntry>();
PlayerListItem.HostToggle.interactable = true;
}
}
if (IsPlayerCameraOperator(Networking.LocalPlayer))
{
for (int i = 0; i < PlayerData_Name.Length; i++)
{
PermissionsPanelPlayerEntry PlayerListItem = _ListContainer.GetChild(i).GetComponent<PermissionsPanelPlayerEntry>();
PlayerListItem.CameraToggle.interactable = true;
}
CameraConsole.Authorize();
}
else
{
CameraConsole.Deauthorize();
}
}
}
@@ -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:
@@ -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:
@@ -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:
@@ -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:
@@ -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:
@@ -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:
@@ -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: