CarmenSandiego/Assets/UdonSharp/PlayerPodium.cs
Jamie Greunbaum e042d089a5 - Choice cards are synced across the network, and receive data from the host.
- KNOWN ISSUE: Cards don't randomise correctly across the network.
2025-05-30 04:32:25 -04:00

104 lines
2.0 KiB
C#

using UdonSharp;
using VRC.SDKBase;
using VRC.SDK3.UdonNetworkCalling;
using TMPro;
using UnityEngine;
[UdonBehaviourSyncMode(BehaviourSyncMode.Manual)]
public class PlayerPodium : UdonSharpBehaviour
{
public int PlayerNumber = 0;
public GameManager GameManager;
[UdonSynced, FieldChangeCallback(nameof(PlayerName))] private string _PlayerName = "Player";
[UdonSynced] private int _PlayerID = -1;
[UdonSynced, FieldChangeCallback(nameof(PlayerScore))] private int _PlayerScore = 50;
[SerializeField] private ChoiceCardGroup _ChoiceCards;
[Header("Effects")]
[SerializeField] private GameObject _BuzzedInEffect;
[SerializeField] private TextMeshProUGUI _Nameplate;
[SerializeField] private TextMeshProUGUI _Scorecard;
void Start()
{
PlayerName = "Player " + PlayerNumber;
}
public void SetPlayerName()
{
if (_PlayerID != -1) { return; }
Networking.SetOwner(Networking.LocalPlayer, gameObject);
PlayerName = Networking.LocalPlayer.displayName;
_PlayerID = Networking.LocalPlayer.playerId;
RequestSerialization();
}
public int GetPlayerID() { return _PlayerID; }
public void DecreaseScoreBy5()
{
PlayerScore -= 5;
}
public void IncreaseScoreBy5()
{
PlayerScore += 5;
}
[NetworkCallable]
public void IncreaseScoreBy10()
{
PlayerScore += 10;
}
[NetworkCallable]
public void EnableChoiceCards(bool Enable)
{
_ChoiceCards.gameObject.SetActive(Enable);
_ChoiceCards.ResetCards();
}
[NetworkCallable]
public void SetCardChoices(string Choice1, string Choice2, string Choice3)
{
_ChoiceCards.SetChoices(Choice1, Choice2, Choice3);
}
[NetworkCallable]
public void EnableBuzzInEffect(bool Enable)
{
_BuzzedInEffect.SetActive(Enable);
}
public string PlayerName
{
set
{
_PlayerName = value;
_Nameplate.text = value;
}
get => _PlayerName;
}
public int PlayerScore
{
set
{
_PlayerScore = value;
_Scorecard.text = PlayerScore.ToString();
RequestSerialization();
}
get => _PlayerScore;
}
}