- 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.
82 lines
1.2 KiB
C#
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;
|
|
}
|
|
}
|