2025-05-26 05:02:00 -04:00

138 lines
2.7 KiB
C#

using UdonSharp;
using UnityEngine;
using VRC.SDKBase;
using VRC.Udon;
public enum MusicEventType
{
INTERNAL = -1,
None,
WhereInTheWorld,
RockapellaIdent
}
public enum SFXEventType
{
INTERNAL = -1,
None,
Buzzer
}
[UdonBehaviourSyncMode(BehaviourSyncMode.Manual)]
public class GameManager : UdonSharpBehaviour
{
[Header("Player Data")]
public PlayerPodium[] PlayerPodiums;
[Header("Audio")]
public AudioClip BuzzerSound = null;
public AudioClip WhereInTheWorld = null;
public AudioClip RockapellaIdent = null;
public AudioSource MusicPlayer = null;
[UdonSynced, FieldChangeCallback(nameof(MusicEvent))] private MusicEventType _MusicEvent = MusicEventType.None;
public AudioSource SFXPlayer = null;
[UdonSynced, FieldChangeCallback(nameof(SFXEvent))] private SFXEventType _SFXEvent = SFXEventType.None;
[UdonSynced] private bool BuzzInAllowed = true;
[UdonSynced] private int _BuzzedInPlayer = 0;
public void PlayerBuzzedIn(int PlayerNumber)
{
if (!BuzzInAllowed) { return; }
BuzzInAllowed = false;
_BuzzedInPlayer = PlayerNumber;
SFXEvent = SFXEventType.Buzzer;
RequestSerialization();
PlayerPodiums[PlayerNumber - 1].IncreaseScoreBy10();
PlayerPodiums[PlayerNumber - 1].RequestSerialization();
}
public void CancelBuzzIn() {
BuzzInAllowed = true;
_BuzzedInPlayer = 0;
RequestSerialization();
}
public void StartGame()
{
for (int i = 0; i < PlayerPodiums.Length; i++)
{
Networking.SetOwner(Networking.InstanceOwner, PlayerPodiums[i].gameObject);
}
PlayerPodiums[0].IncreaseScoreBy10();
PlayerPodiums[0].RequestSerialization();
PlayerPodiums[1].IncreaseScoreBy5();
PlayerPodiums[1].RequestSerialization();
PlayerPodiums[2].DecreaseScoreBy5();
PlayerPodiums[2].RequestSerialization();
}
public void PlayWhereInTheWorld()
{
MusicEvent = MusicEventType.WhereInTheWorld;
}
public void PlayRockapellaIdent()
{
MusicEvent = MusicEventType.RockapellaIdent;
}
public MusicEventType MusicEvent
{
set
{
_MusicEvent = value;
MusicPlayer.Stop();
switch(_MusicEvent)
{
case MusicEventType.WhereInTheWorld: MusicPlayer.clip = WhereInTheWorld; break;
case MusicEventType.RockapellaIdent: MusicPlayer.clip = RockapellaIdent; break;
default: break;
}
if (_MusicEvent != MusicEventType.None)
MusicPlayer.Play();
RequestSerialization();
}
get => _MusicEvent;
}
public SFXEventType SFXEvent
{
set
{
_SFXEvent = value;
SFXPlayer.Stop();
switch (_SFXEvent)
{
case SFXEventType.Buzzer: SFXPlayer.clip = BuzzerSound; break;
default: break;
}
if (_SFXEvent != SFXEventType.None)
SFXPlayer.Play();
RequestSerialization();
}
get => _SFXEvent;
}
}