157 lines
3.5 KiB
C#
157 lines
3.5 KiB
C#
|
|
using TMPro;
|
|
using UdonSharp;
|
|
using UnityEngine;
|
|
using VRC.SDK3.Components;
|
|
using VRC.SDKBase;
|
|
using VRC.Udon.Common;
|
|
|
|
|
|
[UdonBehaviourSyncMode(BehaviourSyncMode.Manual)]
|
|
public class RiskCard : UdonSharpBehaviour
|
|
{
|
|
[UdonSynced] public int RiskAmount = 0;
|
|
[SerializeField] private RiskCardGroup CardGroup = null;
|
|
[SerializeField] private Collider _Holder;
|
|
[Space]
|
|
[SerializeField] private VRCPickup _Pickup;
|
|
[SerializeField] private VRCObjectSync _ObjectSync;
|
|
[SerializeField] private UdonSharpBehaviour _CardInteractObject;
|
|
[Space]
|
|
[SerializeField] private TextMeshProUGUI _RiskCardText;
|
|
[SerializeField] private Transform _SpawnPosition;
|
|
[SerializeField] private Transform _HeldPosition;
|
|
|
|
[UdonSynced] private CardAnchorMode _AnchorMode = CardAnchorMode.AtSpawn;
|
|
|
|
private bool _IsInHeldCollider = false;
|
|
|
|
|
|
void Start()
|
|
{
|
|
_RiskCardText.text = RiskAmount.ToString();
|
|
}
|
|
|
|
void OnTriggerEnter(Collider OtherCollider)
|
|
{
|
|
if (Networking.IsOwner(gameObject) && OtherCollider == _Holder)
|
|
{
|
|
_IsInHeldCollider = true;
|
|
}
|
|
}
|
|
|
|
private void OnTriggerExit(Collider OtherCollider)
|
|
{
|
|
if (Networking.IsOwner(gameObject) && OtherCollider == _Holder)
|
|
{
|
|
_IsInHeldCollider = false;
|
|
}
|
|
}
|
|
|
|
public override void OnOwnershipTransferred(VRCPlayerApi Player)
|
|
{
|
|
if (Utilities.IsValid(_Pickup))
|
|
{
|
|
Networking.SetOwner(Player, _Pickup.gameObject);
|
|
}
|
|
|
|
base.OnOwnershipTransferred(Player);
|
|
}
|
|
|
|
public override void OnDeserialization(DeserializationResult Result)
|
|
{
|
|
_SetPosition_Synced();
|
|
|
|
base.OnDeserialization(Result);
|
|
}
|
|
|
|
|
|
public void RiskCardPickedUp()
|
|
{
|
|
CardGroup.RiskCardPickedUp(RiskAmount);
|
|
_ObjectSync.enabled = true;
|
|
}
|
|
|
|
public void RiskCardDropped()
|
|
{
|
|
if (_IsInHeldCollider)
|
|
{
|
|
_AnchorMode = CardAnchorMode.InRiskCardHolder;
|
|
_SetPosition_Synced();
|
|
|
|
RequestSerialization();
|
|
}
|
|
}
|
|
|
|
public void RiskCardInteract()
|
|
{
|
|
CardGroup.RiskCardInteract(RiskAmount);
|
|
_ObjectSync.enabled = false;
|
|
}
|
|
|
|
|
|
public new void DisableInteractive(bool Disable)
|
|
{
|
|
_CardInteractObject.DisableInteractive =
|
|
(Networking.IsOwner(gameObject) && !Networking.LocalPlayer.IsUserInVR())
|
|
? Disable
|
|
: true;
|
|
}
|
|
|
|
public void SetPickupable(bool Pickupable)
|
|
{
|
|
_Pickup.pickupable =
|
|
(Networking.IsOwner(gameObject) && Networking.LocalPlayer.IsUserInVR() && _AnchorMode != CardAnchorMode.InRiskCardHolder)
|
|
? Pickupable
|
|
: false;
|
|
}
|
|
|
|
|
|
public void SetToHeldPosition()
|
|
{
|
|
_Pickup.Drop();
|
|
_ObjectSync.enabled = false;
|
|
_Pickup.InteractionText = "Reveal";
|
|
|
|
_AnchorMode = CardAnchorMode.InHeldPosition;
|
|
_SetPosition_Synced();
|
|
|
|
RequestSerialization();
|
|
}
|
|
|
|
public void ResetPosition()
|
|
{
|
|
_Pickup.Drop();
|
|
_Pickup.InteractionText = "Choose";
|
|
|
|
_AnchorMode = CardAnchorMode.AtSpawn;
|
|
_SetPosition_Synced();
|
|
|
|
RequestSerialization();
|
|
}
|
|
|
|
private void _SetPosition_Synced()
|
|
{
|
|
_ObjectSync.enabled = false;
|
|
|
|
switch (_AnchorMode)
|
|
{
|
|
case CardAnchorMode.AtSpawn:
|
|
_Pickup.transform.SetParent(_SpawnPosition, false);
|
|
_Pickup.transform.localPosition = Vector3.zero;
|
|
_Pickup.transform.localRotation = Quaternion.identity;
|
|
break;
|
|
case CardAnchorMode.InHeldPosition:
|
|
_Pickup.transform.SetParent(_HeldPosition, false);
|
|
_Pickup.transform.localPosition = Vector3.zero;
|
|
_Pickup.transform.localRotation = Quaternion.identity;
|
|
break;
|
|
case CardAnchorMode.InRiskCardHolder:
|
|
_Pickup.transform.SetParent(_Holder.transform, false);
|
|
_Pickup.transform.localPosition = Vector3.zero;
|
|
_Pickup.transform.localRotation = Quaternion.identity;
|
|
break;
|
|
}
|
|
}
|
|
}
|