Jamie Greunbaum 29b690029b - Implemented the Video Music Clue skateboard.
- Added image clues to the ACME Crimenet Computer.
- Improved functionality of the ACME Crimenet Computer.
2025-08-13 02:09:47 -04:00

138 lines
3.6 KiB
C#

using TMPro;
using UdonSharp;
using UnityEngine;
using VRC.SDK3.Image;
using VRC.SDK3.UdonNetworkCalling;
using VRC.SDKBase;
using VRC.Udon;
using VRC.Udon.Common.Interfaces;
[UdonBehaviourSyncMode(BehaviourSyncMode.NoVariableSync)]
public class ACMECrimenetComputer : UdonSharpBehaviour
{
[SerializeField] private GameManagerRound1 _GameManager;
[SerializeField] private AudioManager _AudioManager;
[Space]
[SerializeField] private GameObject _ComputerBase;
[SerializeField] private MeshRenderer _ClueImageCard;
[Space]
[SerializeField] private Transform _UntranslatedCard;
[SerializeField] private Transform _UntranslatedCardSpawn;
[SerializeField] private Transform _UntranslatedCardAnimator;
[SerializeField] private TextMeshProUGUI _UntranslatedTextGUI;
[Space]
[SerializeField] private Transform _TranslatedCard;
[SerializeField] private Transform _TranslatedCardAnimator;
[SerializeField] private TextMeshProUGUI _TranslatedTextGUI;
[Space]
[SerializeField] private GameObject[] _Interactables;
private VRCImageDownloader _ClueImageDownloader;
private Texture2D _ClueImage;
private Animator _Animator;
private void Start()
{
_ClueImageDownloader = new VRCImageDownloader();
_Animator = GetComponent<Animator>();
}
void OnDestroy()
{
_ClueImageDownloader.Dispose();
}
[NetworkCallable]
public void ResetComputer()
{
foreach (GameObject Interactable in _Interactables)
{
Interactable.SetActive(false);
}
_Animator.SetBool("Swooce Right In", false);
_Animator.SetBool("Open Compartment", false);
_Animator.SetBool("Throw Clue Into The Air", false);
_Animator.SetBool("Run Translator", false);
_UntranslatedCard.SetParent(_UntranslatedCardSpawn);
_UntranslatedCard.localPosition = Vector3.zero;
_UntranslatedCard.localRotation = Quaternion.identity;
_TranslatedCard.SetParent(_TranslatedCardAnimator);
_TranslatedCard.localPosition = Vector3.zero;
_TranslatedCard.localRotation = Quaternion.identity;
}
[NetworkCallable]
public void SetCardTexts(string Untranslated, string Translated)
{
_UntranslatedTextGUI.text = Untranslated;
_TranslatedTextGUI.text = Translated;
}
[NetworkCallable]
public void SwooceRightIn()
{
_Animator.SetBool("Swooce Right In", true);
foreach (GameObject Interactable in _Interactables)
{
Interactable.SetActive(true);
}
TextureInfo AdditionalTextureInfo = new TextureInfo();
AdditionalTextureInfo.WrapModeU = TextureWrapMode.Clamp;
AdditionalTextureInfo.WrapModeV = TextureWrapMode.Clamp;
AdditionalTextureInfo.GenerateMipMaps = true;
_ClueImageDownloader.DownloadImage(
_GameManager.GetClueImageURL(0), null,
(IUdonEventReceiver)this, AdditionalTextureInfo);
}
public override void OnImageLoadSuccess(IVRCImageDownload Result)
{
_ClueImageCard.sharedMaterial.SetTexture("_MainTex", Result.Result);
base.OnImageLoadSuccess(Result);
}
[NetworkCallable]
public void OpenCompartment()
{
_AudioManager.PlaySFX(SFXEventType.ComputerOpenCompartment);
_Animator.SetBool("Open Compartment", true);
}
[NetworkCallable]
public void ThrowClueIntoTheAir()
{
_AudioManager.PlaySFX(SFXEventType.ComputerOpenCompartment);
_Animator.SetBool("Throw Clue Into The Air", true);
}
[NetworkCallable]
public void RunTranslator()
{
_AudioManager.PlaySFX(SFXEventType.ComputerRunTranslator);
_UntranslatedCard.SetParent(_UntranslatedCardAnimator);
_UntranslatedCard.localPosition = Vector3.zero;
_UntranslatedCard.localRotation = Quaternion.identity;
_TranslatedCard.SetParent(_TranslatedCardAnimator);
_TranslatedCard.localPosition = Vector3.zero;
_TranslatedCard.localRotation = Quaternion.identity;
_Animator.SetBool("Run Translator", true);
}
}