- Host card can only be picked up by players with "Host" permission. - Podiums no longer reset on case load. - Auxiliary screens now disappear during answer reveal in final round. - Risk card placement area no longer blocks UI interaction on desktop mode. - Video player in round 2 now changes ownership and syncs correctly.
197 lines
5.3 KiB
C#
197 lines
5.3 KiB
C#
|
|
using UdonSharp;
|
|
using UnityEngine;
|
|
using VRC.SDKBase;
|
|
using VRC.SDK3.Components;
|
|
using VRC.Udon.Common;
|
|
using TMPro;
|
|
|
|
|
|
[UdonBehaviourSyncMode(BehaviourSyncMode.Manual)]
|
|
public class HostCardManager : UdonSharpBehaviour
|
|
{
|
|
[SerializeField] private GameManagerBase _GameManager;
|
|
|
|
[Header("UI")]
|
|
[SerializeField] private HostCardBetweenRoundsInterface _BetweenRoundsInterface;
|
|
|
|
[Space]
|
|
|
|
[SerializeField] private HostCardMultipleChoiceInterface _MultipleChoiceInterface;
|
|
[SerializeField] private HostCardLightningRoundInterface _LightningRoundInterface;
|
|
[SerializeField] private HostCardTheChaseInterface _TheChaseInterface;
|
|
[SerializeField] private HostCardTiebreakerInterface _TiebreakerInterface;
|
|
|
|
[Space]
|
|
|
|
[SerializeField] private HostCardRecoverTheLootExplainerInterface _RecoverTheLootExplainerInterface;
|
|
[SerializeField] private HostCardRecoverTheLootInterface _RecoverTheLootInterface;
|
|
[SerializeField] private HostCardRecoverTheLootEndInterface _RecoverTheLootEndInterface;
|
|
|
|
[Space]
|
|
|
|
[SerializeField] private HostCardCaptureCarmenExplainerInterface _CaptureCarmenExplainerInterface;
|
|
[SerializeField] private HostCardCaptureCarmenInterface _CaptureCarmenInterface;
|
|
|
|
[Space]
|
|
|
|
[SerializeField] private HostPanelInterface _AdminPanelInterface;
|
|
|
|
[Space]
|
|
|
|
[SerializeField] private TextMeshProUGUI _InteractionText;
|
|
|
|
private VRCPickup _PickupComponent;
|
|
private bool _IsBeingHeld = false;
|
|
private float _StoredJumpImpulse = 0.0f;
|
|
|
|
|
|
void Start()
|
|
{
|
|
_PickupComponent = GetComponent<VRCPickup>();
|
|
}
|
|
|
|
|
|
public override void OnPickup()
|
|
{
|
|
_StoredJumpImpulse = Networking.LocalPlayer.GetJumpImpulse();
|
|
Networking.LocalPlayer.SetJumpImpulse(0.0f);
|
|
_IsBeingHeld = true;
|
|
|
|
_InteractionText.gameObject.SetActive(true);
|
|
|
|
base.OnPickup();
|
|
}
|
|
|
|
public override void OnDrop()
|
|
{
|
|
Networking.LocalPlayer.SetJumpImpulse(_StoredJumpImpulse);
|
|
_StoredJumpImpulse = 0.0f;
|
|
_IsBeingHeld = false;
|
|
|
|
_InteractionText.gameObject.SetActive(false);
|
|
|
|
base.OnDrop();
|
|
}
|
|
|
|
public override void InputJump(bool Value, UdonInputEventArgs Args)
|
|
{
|
|
if (Value && _IsBeingHeld)
|
|
{
|
|
_AdminPanelInterface.gameObject.SetActive(!_AdminPanelInterface.gameObject.activeSelf);
|
|
}
|
|
|
|
base.InputJump(Value, Args);
|
|
}
|
|
|
|
|
|
public override void OnPickupUseDown()
|
|
{
|
|
if (_GameManager) _GameManager.HostCardUseButtonDown();
|
|
base.OnPickupUseDown();
|
|
}
|
|
|
|
|
|
public void EnablePickup(bool Enable)
|
|
{
|
|
_PickupComponent.pickupable = Enable;
|
|
}
|
|
|
|
|
|
public void SetNextInteractionText(string NextInteractionText)
|
|
{
|
|
if (NextInteractionText != "")
|
|
{
|
|
DisableInteractive = false;
|
|
_InteractionText.text = "Next: " + NextInteractionText;
|
|
}
|
|
else
|
|
{
|
|
_InteractionText.text = "Please wait...";
|
|
}
|
|
}
|
|
|
|
|
|
public void SetGameManager(GameManagerBase Manager)
|
|
{
|
|
_GameManager = Manager;
|
|
}
|
|
|
|
|
|
public HostCardInterfaceBase EnableHostCardDisplay(RoundType Game, RoundSegmentType Question)
|
|
{
|
|
_BetweenRoundsInterface.gameObject.SetActive(false);
|
|
|
|
_MultipleChoiceInterface.gameObject.SetActive(false);
|
|
_LightningRoundInterface.gameObject.SetActive(false);
|
|
_TheChaseInterface.gameObject.SetActive(false);
|
|
_TiebreakerInterface.gameObject.SetActive(false);
|
|
|
|
_RecoverTheLootExplainerInterface.gameObject.SetActive(false);
|
|
_RecoverTheLootInterface.gameObject.SetActive(false);
|
|
_RecoverTheLootEndInterface.gameObject.SetActive(false);
|
|
|
|
_CaptureCarmenExplainerInterface.gameObject.SetActive(false);
|
|
_CaptureCarmenInterface.gameObject.SetActive(false);
|
|
|
|
switch (Game)
|
|
{
|
|
case RoundType.LocateTheCrook:
|
|
{
|
|
switch (Question)
|
|
{
|
|
case RoundSegmentType.MultipleChoice:
|
|
_MultipleChoiceInterface.gameObject.SetActive(true);
|
|
return _MultipleChoiceInterface;
|
|
case RoundSegmentType.LightningRound:
|
|
_LightningRoundInterface.gameObject.SetActive(true);
|
|
return _LightningRoundInterface;
|
|
case RoundSegmentType.DumpsterDive: break;
|
|
case RoundSegmentType.TheChase:
|
|
_TheChaseInterface.gameObject.SetActive(true);
|
|
return _TheChaseInterface;
|
|
case RoundSegmentType.FinalRound:
|
|
_MultipleChoiceInterface.gameObject.SetActive(true);
|
|
return _MultipleChoiceInterface;
|
|
case RoundSegmentType.Tiebreaker:
|
|
_TiebreakerInterface.gameObject.SetActive(true);
|
|
return _TiebreakerInterface;
|
|
}
|
|
} break;
|
|
case RoundType.RecoverTheLoot:
|
|
{
|
|
switch(Question)
|
|
{
|
|
case RoundSegmentType.RecoverTheLootExplainer:
|
|
_RecoverTheLootExplainerInterface.gameObject.SetActive(true);
|
|
return _RecoverTheLootExplainerInterface;
|
|
case RoundSegmentType.RecoverTheLoot:
|
|
_RecoverTheLootInterface.gameObject.SetActive(true);
|
|
return _RecoverTheLootInterface;
|
|
case RoundSegmentType.EndRecoverTheLoot:
|
|
_RecoverTheLootEndInterface.gameObject.SetActive(true);
|
|
return _RecoverTheLootEndInterface;
|
|
}
|
|
} break;
|
|
case RoundType.CaptureCarmen:
|
|
{
|
|
switch (Question)
|
|
{
|
|
case RoundSegmentType.CaptureCarmenExplainer:
|
|
_CaptureCarmenExplainerInterface.gameObject.SetActive(true);
|
|
return _CaptureCarmenExplainerInterface;
|
|
case RoundSegmentType.CaptureCarmen:
|
|
_CaptureCarmenInterface.gameObject.SetActive(true);
|
|
return _CaptureCarmenInterface;
|
|
}
|
|
} break;
|
|
default:
|
|
_BetweenRoundsInterface.gameObject.SetActive(true);
|
|
return _BetweenRoundsInterface;
|
|
}
|
|
|
|
_BetweenRoundsInterface.gameObject.SetActive(true);
|
|
return _BetweenRoundsInterface;
|
|
}
|
|
}
|