using TMPro; using UdonSharp; using UnityEngine; using VRC.SDKBase; using VRC.Udon; 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; } }