130 lines
2.7 KiB
C#
130 lines
2.7 KiB
C#
|
|
using UdonSharp;
|
|
using UnityEngine;
|
|
using VRC.SDK3.Components;
|
|
using VRC.SDKBase;
|
|
using VRC.Udon.Common;
|
|
|
|
|
|
public enum CardAnchorMode
|
|
{
|
|
AtSpawn,
|
|
InHeldPosition,
|
|
InRiskCardHolder
|
|
}
|
|
|
|
|
|
[UdonBehaviourSyncMode(BehaviourSyncMode.Manual)]
|
|
public class ChoiceCard : UdonSharpBehaviour
|
|
{
|
|
[UdonSynced] public int ChoiceNumber = 0;
|
|
[Space]
|
|
[SerializeField] private ChoiceCardGroup CardGroup = null;
|
|
[Space]
|
|
[SerializeField] private VRCPickup _Pickup;
|
|
[SerializeField] private VRCObjectSync _ObjectSync;
|
|
[SerializeField] private UdonSharpBehaviour CardInteractObject;
|
|
[Space]
|
|
[SerializeField] private MeshRenderer _Mesh;
|
|
[SerializeField] private Transform _SpawnPosition;
|
|
[SerializeField] private Transform _HeldPosition;
|
|
|
|
[UdonSynced] private CardAnchorMode _AnchorMode = CardAnchorMode.AtSpawn;
|
|
|
|
|
|
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 ChoiceCardPickedUp()
|
|
{
|
|
CardGroup.ChoiceCardPickedUp(ChoiceNumber);
|
|
_ObjectSync.enabled = true;
|
|
}
|
|
|
|
public void ChoiceCardInteract()
|
|
{
|
|
CardGroup.ChoiceCardInteract(ChoiceNumber);
|
|
_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())
|
|
? Pickupable
|
|
: false;
|
|
}
|
|
|
|
public void SetColourMaterial(Material Colour)
|
|
{
|
|
_Mesh.sharedMaterial = Colour;
|
|
}
|
|
|
|
|
|
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;
|
|
}
|
|
}
|
|
}
|