68 lines
1.7 KiB
C#

using TMPro;
using UdonSharp;
using UnityEngine;
using VRC.Udon.Common;
[UdonBehaviourSyncMode(BehaviourSyncMode.Manual)]
public class WantedPoster : UdonSharpBehaviour
{
[SerializeField] private TextMeshProUGUI _CrookName;
[SerializeField] private TextMeshProUGUI _RewardText;
[Space]
[SerializeField] private MeshRenderer _WantedPosterMesh;
[SerializeField] private Texture _DefaultPortrait;
[SerializeField] private Texture[] _CrookPortraits;
[SerializeField] private string _DefaultReward;
[SerializeField] private string[] _RewardOptions;
[UdonSynced] private int _SelectedCrook = (int)AccusedCrook.INDEX_MAX;
[UdonSynced] private string _Name = "";
[UdonSynced] private int _RewardIndex = 0;
private Material _PortraitMaterial = null;
private void Start()
{
_PortraitMaterial = _WantedPosterMesh.materials[2];
}
void OnDestroy()
{
SetNewCrook(AccusedCrook.INDEX_MAX, "Carmen Sandiego");
}
public override void OnDeserialization(DeserializationResult Result)
{
_ApplyNewConfiguration();
base.OnDeserialization(Result);
}
public void SetNewCrook(AccusedCrook Crook, string Name)
{
_SelectedCrook = (int)Crook;
_Name = Name;
_RewardIndex = Random.Range(0, _RewardOptions.Length);
_ApplyNewConfiguration();
RequestSerialization();
}
private void _ApplyNewConfiguration()
{
if (_SelectedCrook >= (int)AccusedCrook.INDEX_MAX)
{
_PortraitMaterial.SetTexture("_MainTex", _DefaultPortrait);
_RewardText.text = "Reward: " + _DefaultReward;
}
else
{
_PortraitMaterial.SetTexture("_MainTex", _CrookPortraits[_SelectedCrook]);
_RewardText.text = "Reward: " + _RewardOptions[_RewardIndex];
}
_CrookName.text = _Name;
}
}