CarmenSandiego/Assets/UdonSharp/LightningRoundEffectsController.cs
Jamie Greunbaum 5bb080d546 - Removed final remnants of LightSync from the project.
- Fixed jail chain potentially calling a GameManager function on all clients.
2026-06-05 15:02:18 -04:00

145 lines
3.8 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 _LightningStrikeExplosion;
[SerializeField] private LightningStrikeStation _LightningStrikeStation;
[SerializeField] private ParticleSystem _PersonalRaincloud;
[Space]
[SerializeField] private GameObject _UmbrellaActivator;
[SerializeField] private Umbrella _UmbrellaManager;
[UdonSynced] private LightningRoundEffect _Effect = LightningRoundEffect.MAX_EFFECTS;
private LightningRoundEffect _Effect_Cached = LightningRoundEffect.MAX_EFFECTS;
public override void OnOwnershipTransferred(VRCPlayerApi Player)
{
Networking.SetOwner(Player, _LightningBolt.gameObject);
Networking.SetOwner(Player, _LightningStrikeStation.gameObject);
Networking.SetOwner(Player, _PersonalRaincloud.gameObject);
Networking.SetOwner(Player, _UmbrellaActivator);
Networking.SetOwner(Player, _UmbrellaManager.gameObject);
base.OnOwnershipTransferred(Player);
}
public override void OnDeserialization(DeserializationResult Result)
{
_PlayLightningRoundAnimation_Synced();
base.OnDeserialization(Result);
}
public void Initialise()
{
_Effect = LightningRoundEffect.MAX_EFFECTS;
_PlayLightningRoundAnimation_Synced();
RequestSerialization();
}
public void PlayLightningRoundAnimation()
{
_Effect = LightningRoundEffect.ThunderAndRain;//(LightningRoundEffect)Random.Range(0, (int)LightningRoundEffect.MAX_EFFECTS);
_PlayLightningRoundAnimation_Synced();
RequestSerialization();
}
private void _PlayLightningRoundAnimation_Synced()
{
if (_Effect != _Effect_Cached)
{
_Effect_Cached = _Effect;
switch (_Effect)
{
case LightningRoundEffect.Thunder:
break;
case LightningRoundEffect.LightningStrike:
_ActivateLightningStrike();
break;
case LightningRoundEffect.ThunderAndRain:
_ActivateRainAndUmbrella();
break;
default: // Deactivate everything and leave
_Animator.SetBool("Lightning", false);
_LightningBolt.SetActive(false);
_DeactivateRainAndUmbrella();
_DeactivateLightningStrike();
return;
}
_AudioManager.PlayMusic(MusicEventType.LightningRound);
_Animator.SetBool("Lightning", true);
SendCustomEventDelayedSeconds(nameof(ResetLightningRoundAnimation), 10.0f);
}
}
public void ResetLightningRoundAnimation()
{
_LightningBolt.SetActive(false);
_Animator.SetBool("Lightning", false);
}
private void _ActivateLightningStrike()
{
_LightningBolt.SetActive(true);
_LightningStrikeStation.gameObject.SetActive(true);
VRCPlayerApi ActiveHost = Networking.GetOwner(gameObject);
Vector3 Position = ActiveHost.GetPosition();
Quaternion Rotation = ActiveHost.GetRotation();
_LightningStrikeStation.transform.SetPositionAndRotation(Position, Rotation);
_LightningBolt.transform.SetPositionAndRotation(Position, Rotation);
_LightningStrikeExplosion.Play();
if (Networking.IsOwner(gameObject))
{
_LightningStrikeStation.EnterStation();
}
}
private void _DeactivateLightningStrike()
{
_LightningBolt.SetActive(false);
_LightningStrikeStation.gameObject.SetActive(false);
_LightningStrikeExplosion.Stop();
}
private void _ActivateRainAndUmbrella()
{
_UmbrellaActivator.SetActive(true);
_UmbrellaManager.Respawn();
_PersonalRaincloud.Play();
}
private void _DeactivateRainAndUmbrella()
{
_UmbrellaActivator.SetActive(false);
_PersonalRaincloud.Stop();
}
}