Jamie Greunbaum e485d0d992 - Modem camera transition now has zoom animations.
- Added a CameraAnchor and follower for the winning player in round 2.
- Round 2 now has a more reliable check for when the call ends.
- CameraAnchor can now follow different areas of a player's body.
- CameraTimedSwitcher can now choose to always reactivate when asked.
- Glass shatter effect now only works for hosts.
- CaseVideoSyncPlayer will no longer crash when skipping too fast in round 1.
- Fixed an erroneous camera switcher activation in round 3.
- Made a minor wording change to Eartha Brute's wanted poster.
2026-03-25 04:08:23 -04:00

82 lines
1.2 KiB
C#

using UdonSharp;
using UnityEngine;
using VRC.Udon.Common.Interfaces;
[UdonBehaviourSyncMode(BehaviourSyncMode.Manual)]
public class GlassShatter : UdonSharpBehaviour
{
[SerializeField] private AudioManager _AudioManager;
[SerializeField] private Collider[] _Colliders;
[UdonSynced, FieldChangeCallback(nameof(Shattered))] private bool _Shattered = false;
private bool _Prepared = false;
public void HostEnabled()
{
foreach (Collider GlassCollider in _Colliders)
{
GlassCollider.gameObject.SetActive(true);
}
}
public void HostDisabled()
{
foreach (Collider GlassCollider in _Colliders)
{
GlassCollider.gameObject.SetActive(false);
}
}
public void PrepareEnter()
{
if (!Shattered)
{
_Prepared = true;
}
}
public void PrepareExit()
{
_Prepared = false;
}
public void ShatterEnter()
{
if (_Prepared && !Shattered)
{
Shattered = true;
_Shatter_Synced();
RequestSerialization();
}
}
public void ShatterExit()
{
Shattered = false;
}
private void _Shatter_Synced()
{
if (Shattered)
{
_AudioManager.PlaySFXAtPitch(SFXEventType.GlassShatter, Random.Range(0.9f, 1.1f));
}
}
public bool Shattered
{
set
{
_Shattered = value;
_Shatter_Synced();
}
get => _Shattered;
}
}