CarmenSandiego/Assets/UdonSharp/LightningRoundEffectsController.cs
Jamie Greunbaum 16dc6c79d8 - Added an umbrella and rain to the "Thunder And Rain" lightning round intro.
- Buzzer model has been updated, and includes a trigger pull animation.
- Lightning round intro sound is now music instead of a sound effect.
- Fixed a bug that made the host card interactable on round start.
2026-05-10 22:11:01 -04:00

101 lines
2.2 KiB
C#

using UdonSharp;
using UnityEngine;
using VRC.SDKBase;
using VRC.Udon.Common;
public enum LightningRoundEffect
{
Thunder,
LightningStrike,
ThunderAndRain,
MAX_EFFECTS
}
[UdonBehaviourSyncMode(BehaviourSyncMode.Manual)]
public class LightningRoundEffectsController : UdonSharpBehaviour
{
[SerializeField] private AudioManager _AudioManager;
[SerializeField] private Animator _Animator;
[Space]
[SerializeField] private GameObject _LightningBolt;
[SerializeField] private ParticleSystem _PersonalRaincloud;
[SerializeField] private Umbrella _Umbrella;
[UdonSynced] private LightningRoundEffect _Effect;
public override void OnOwnershipTransferred(VRCPlayerApi Player)
{
Networking.SetOwner(Player, _LightningBolt.gameObject);
Networking.SetOwner(Player, _Umbrella.gameObject);
base.OnOwnershipTransferred(Player);
}
public override void OnDeserialization(DeserializationResult Result)
{
_DeactivateRain();
_PlayLightningRoundAnimation_Synced();
base.OnDeserialization(Result);
}
public void Initialise()
{
_Umbrella.Respawn();
RequestSerialization();
}
public void PlayLightningRoundAnimation()
{
_Effect = (LightningRoundEffect)Random.Range(0, (int)LightningRoundEffect.MAX_EFFECTS);
_PlayLightningRoundAnimation_Synced();
RequestSerialization();
}
private void _PlayLightningRoundAnimation_Synced()
{
switch (_Effect)
{
case LightningRoundEffect.Thunder:
_LightningBolt.SetActive(false);
break;
case LightningRoundEffect.LightningStrike:
_LightningBolt.SetActive(true);
break;
case LightningRoundEffect.ThunderAndRain:
_LightningBolt.SetActive(false);
_ActivateRain();
break;
}
_AudioManager.PlayMusic(MusicEventType.LightningRound);
_Animator.SetBool("Lightning", true);
SendCustomEventDelayedSeconds(nameof(ResetLightningRoundAnimation), 2.0f);
}
public void ResetLightningRoundAnimation()
{
_LightningBolt.SetActive(false);
_Animator.SetBool("Lightning", false);
}
private void _ActivateRain()
{
_Umbrella.gameObject.SetActive(true);
_PersonalRaincloud.Play();
}
private void _DeactivateRain()
{
_Umbrella.gameObject.SetActive(false);
_PersonalRaincloud.Stop();
}
}