138 lines
2.7 KiB
C#
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;
|
|
}
|
|
}
|