using System; using TMPro; using UdonSharp; using UnityEngine; using VRC.SDK3.Image; using VRC.SDKBase; using VRC.Udon; using VRC.Udon.Common.Interfaces; [UdonBehaviourSyncMode(BehaviourSyncMode.Manual)] public class FilingCabinetNoteDispenser : UdonSharpBehaviour { [SerializeField] private GameManagerRound1 _GameManager; [SerializeField] private AudioManager _AudioManager; [SerializeField] private Animator _Animator; [SerializeField] private Transform _ClueCard; [SerializeField] private TextMeshProUGUI _ClueCardText; [SerializeField] private MeshRenderer _ImageCard; [UdonSynced, FieldChangeCallback(nameof(Activate))] private bool _Activate = false; [UdonSynced, FieldChangeCallback(nameof(Note))] private string _Note = ""; [UdonSynced, FieldChangeCallback(nameof(Image))] private int _Image = -1; [UdonSynced, FieldChangeCallback(nameof(ImageScale))] private float _ImageScale = 1.0f; private VRCImageDownloader _ClueImageDownloader; private void Start() { _ClueImageDownloader = new VRCImageDownloader(); } public bool Activate { set { _Activate = value; if (_Note != "") _Animator.SetBool("Spring Action", _Activate); _ClueCard.localPosition = Vector3.zero; _ClueCard.localRotation = Quaternion.identity; RequestSerialization(); } get => _Activate; } private void LoadClueImage() { if (_Image >= 0) { TextureInfo AdditionalTextureInfo = new TextureInfo(); AdditionalTextureInfo.WrapModeU = TextureWrapMode.Clamp; AdditionalTextureInfo.WrapModeV = TextureWrapMode.Clamp; AdditionalTextureInfo.GenerateMipMaps = true; _ClueImageDownloader.DownloadImage( _GameManager.GetClueImageURL(_Image), null, (IUdonEventReceiver)this, AdditionalTextureInfo); } else { _ImageCard.gameObject.SetActive(false); } } public override void OnImageLoadSuccess(IVRCImageDownload Result) { _ImageCard.material.SetTexture("_MainTex", Result.Result); _ImageCard.gameObject.SetActive(true); base.OnImageLoadSuccess(Result); } public string Note { set { _Note = value; _ClueCardText.text = _Note; } get => _Note; } public int Image { set { _Image = value; LoadClueImage(); } get => _Image; } public float ImageScale { set { _ImageScale = value; _ImageCard.transform.localScale = new Vector3(_ImageScale, _ImageScale, _ImageScale); } get => _ImageScale; } }