207 lines
4.2 KiB
C#
207 lines
4.2 KiB
C#
|
|
using TMPro;
|
|
using UdonSharp;
|
|
using UnityEngine;
|
|
using VRC.SDKBase;
|
|
using VRC.Udon.Common;
|
|
|
|
|
|
[UdonBehaviourSyncMode(BehaviourSyncMode.Manual)]
|
|
public class RiskCardGroup : UdonSharpBehaviour
|
|
{
|
|
[SerializeField] private PlayerPodium _Podium;
|
|
[SerializeField] private GameObject _RiskCardEnabler;
|
|
[SerializeField] private RiskCard[] _RiskCards;
|
|
[SerializeField] private TextMeshProUGUI[] _RiskCardText;
|
|
|
|
[SerializeField] private GameObject _PCCardHeldPosition;
|
|
|
|
[SerializeField] private Animator _PCCardAnimator;
|
|
|
|
[UdonSynced] private bool _Enabled = false;
|
|
[UdonSynced] private bool _ChoiceTextVisibleForAllPlayers = false;
|
|
[UdonSynced] private bool _DisableInteractive = false;
|
|
[UdonSynced] private bool _SetPickupable = true;
|
|
[UdonSynced] private bool _ChoiceLocked = false;
|
|
[UdonSynced] private bool _TurnForward = false;
|
|
[UdonSynced] private int _SelectedRiskAmount = -1;
|
|
|
|
|
|
public override void OnDeserialization(DeserializationResult Result)
|
|
{
|
|
_SetEnabled_Synced();
|
|
_InteractiveAndPickupable_Synced();
|
|
_MakeRiskTextVisible_Synced();
|
|
_TurnForward_Synced();
|
|
|
|
base.OnDeserialization(Result);
|
|
}
|
|
|
|
public override void OnOwnershipTransferred(VRCPlayerApi Player)
|
|
{
|
|
foreach (RiskCard Card in _RiskCards)
|
|
{
|
|
Networking.SetOwner(Player, Card.gameObject);
|
|
}
|
|
|
|
base.OnOwnershipTransferred(Player);
|
|
}
|
|
|
|
|
|
public void SetEnabled(bool Enable)
|
|
{
|
|
_Enabled = Enable;
|
|
_SetEnabled_Synced();
|
|
|
|
ResetCards(false);
|
|
|
|
MakeRiskTextVisible(false, false);
|
|
|
|
RequestSerialization();
|
|
}
|
|
private void _SetEnabled_Synced()
|
|
{
|
|
_RiskCardEnabler.gameObject.SetActive(_Enabled);
|
|
}
|
|
|
|
|
|
public void RiskCardPickedUp(int RiskAmount)
|
|
{
|
|
_SelectedRiskAmount = RiskAmount;
|
|
RequestSerialization();
|
|
}
|
|
|
|
public void RiskCardInteract(int RiskAmount)
|
|
{
|
|
if (_SelectedRiskAmount == RiskAmount)
|
|
{
|
|
RevealChoice();
|
|
return;
|
|
}
|
|
|
|
_SelectedRiskAmount = RiskAmount;
|
|
|
|
foreach (RiskCard Card in _RiskCards)
|
|
{
|
|
Card.DisableInteractive(false);
|
|
|
|
if (Card.RiskAmount == _SelectedRiskAmount)
|
|
{
|
|
Card.SetToHeldPosition();
|
|
Card.DisableInteractive(true);
|
|
}
|
|
else
|
|
{
|
|
Card.ResetPosition();
|
|
}
|
|
}
|
|
|
|
RequestSerialization();
|
|
}
|
|
|
|
private void _TurnForward_Synced()
|
|
{
|
|
_PCCardAnimator.SetBool("Turn Forward", _TurnForward);
|
|
}
|
|
|
|
private void RevealChoice()
|
|
{
|
|
foreach (RiskCard Card in _RiskCards)
|
|
{
|
|
if (Card.RiskAmount == _SelectedRiskAmount)
|
|
{
|
|
Card.SetToHeldPosition();
|
|
_TurnForward = true;
|
|
_TurnForward_Synced();
|
|
Card.DisableInteractive(true);
|
|
|
|
RequestSerialization();
|
|
}
|
|
else
|
|
{
|
|
Card.ResetPosition();
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
public int GetSelectedChoice()
|
|
{
|
|
return (_SelectedRiskAmount < 0) ? 0 : _SelectedRiskAmount;
|
|
}
|
|
|
|
public void MakeRiskTextVisible(bool VisibleForAllPlayers = false, bool RequestSerialisation = true)
|
|
{
|
|
_ChoiceTextVisibleForAllPlayers = VisibleForAllPlayers;
|
|
_MakeRiskTextVisible_Synced(true);
|
|
|
|
if (RequestSerialisation)
|
|
{
|
|
RequestSerialization();
|
|
}
|
|
}
|
|
private void _MakeRiskTextVisible_Synced(bool VisibleLocally = false)
|
|
{
|
|
for (int i = 0; i < _RiskCards.Length && i < _RiskCardText.Length; i++)
|
|
{
|
|
_RiskCardText[i].gameObject.SetActive(VisibleLocally || _ChoiceTextVisibleForAllPlayers);
|
|
}
|
|
}
|
|
|
|
public void LockInChoice()
|
|
{
|
|
_ChoiceLocked = true;
|
|
_InteractiveAndPickupable_Synced();
|
|
MakeRiskTextVisible(true, false);
|
|
RequestSerialization();
|
|
}
|
|
|
|
public void ResetCards(bool RequestSerialisation = true)
|
|
{
|
|
_SelectedRiskAmount = -1;
|
|
|
|
for (int i = 0; i < _RiskCards.Length; i++)
|
|
{
|
|
RiskCard Card = _RiskCards[i];
|
|
|
|
Card.ResetPosition();
|
|
_RiskCardText[i].gameObject.SetActive(false);
|
|
|
|
_DisableInteractive = false;
|
|
_SetPickupable = true;
|
|
}
|
|
|
|
_TurnForward = false;
|
|
_TurnForward_Synced();
|
|
|
|
_ChoiceLocked = false;
|
|
|
|
_InteractiveAndPickupable_Synced();
|
|
|
|
if (RequestSerialisation)
|
|
{
|
|
RequestSerialization();
|
|
}
|
|
}
|
|
|
|
private void _InteractiveAndPickupable_Synced()
|
|
{
|
|
if (_ChoiceLocked)
|
|
{
|
|
foreach (RiskCard Card in _RiskCards)
|
|
{
|
|
Card.DisableInteractive(Card.RiskAmount != _SelectedRiskAmount || _TurnForward);
|
|
Card.SetPickupable(Card.RiskAmount == _SelectedRiskAmount);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
foreach (RiskCard Card in _RiskCards)
|
|
{
|
|
Card.DisableInteractive(_DisableInteractive);
|
|
Card.SetPickupable(_SetPickupable);
|
|
}
|
|
}
|
|
}
|
|
}
|