CarmenSandiego/Assets/UdonSharp/CaptureCarmenNewspaper.cs

160 lines
3.6 KiB
C#

using TMPro;
using UdonSharp;
using UnityEngine;
using VRC.SDK3.UdonNetworkCalling;
using VRC.SDKBase;
public enum NewspaperAnimation
{
None,
Win,
Lose
}
[UdonBehaviourSyncMode(BehaviourSyncMode.Manual)]
public class CaptureCarmenNewspaper : UdonSharpBehaviour
{
[SerializeField] private TextMeshProUGUI _Date;
[SerializeField] private TextMeshProUGUI _Headline;
[SerializeField] private MeshRenderer _CarmenPortrait;
[SerializeField] private AudioManager _AudioManager;
[UdonSynced, FieldChangeCallback(nameof(PlayAnimation))] private NewspaperAnimation _PlayAnimation;
[UdonSynced, FieldChangeCallback(nameof(WinningPlayer))] private string _WinningPlayer;
private Animator _Animator;
public void Start()
{
_Animator = GetComponent<Animator>();
}
public void PlayWinAnimation(string Winner)
{
WinningPlayer = Winner;
PlayAnimation = NewspaperAnimation.Win;
RequestSerialization();
}
public void PlayLoseAnimation()
{
WinningPlayer = "";
PlayAnimation = NewspaperAnimation.Lose;
RequestSerialization();
}
public void ResetAnimation()
{
WinningPlayer = "";
PlayAnimation = NewspaperAnimation.None;
RequestSerialization();
}
public void ApplyJailEffect()
{
_AudioManager.PlaySFX(SFXEventType.JailDoorSlam);
_CarmenPortrait.material.SetVector("_MainTex_ST", new Vector4(0.5f, 0.5f, 0.0f, 0.0f));
}
public void ApplyEscapeEffect()
{
_AudioManager.PlaySFX(SFXEventType.CarmenEscape);
_CarmenPortrait.material.SetVector("_MainTex_ST", new Vector4(0.5f, 0.5f, 0.5f, 0.5f));
}
private void GetCurrentDate()
{
System.DateTime CurrentDate = Networking.GetNetworkDateTime();
_Date.text =
DayOfWeekToString(CurrentDate.DayOfWeek) + ", " +
MonthToString(CurrentDate.Month) + " " + CurrentDate.Day + ", " + CurrentDate.Year;
}
private void SetHeadline(bool PlayerWon)
{
_Headline.text = PlayerWon ? (WinningPlayer + "\nCaptures Carmen!") : "Carmen Sandiego\nEvades Capture";
}
private string MonthToString(int Month)
{
switch (Month)
{
case 1: return "January";
case 2: return "February";
case 3: return "March";
case 4: return "April";
case 5: return "May";
case 6: return "June";
case 7: return "July";
case 8: return "August";
case 9: return "September";
case 10: return "October";
case 11: return "November";
case 12: return "December";
}
return "[[ERROR]]";
}
private string DayOfWeekToString(System.DayOfWeek Day)
{
switch (Day)
{
case System.DayOfWeek.Sunday: return "Sunday";
case System.DayOfWeek.Monday: return "Monday";
case System.DayOfWeek.Tuesday: return "Tuesday";
case System.DayOfWeek.Wednesday: return "Wednesday";
case System.DayOfWeek.Thursday: return "Thursday";
case System.DayOfWeek.Friday: return "Friday";
case System.DayOfWeek.Saturday: return "Saturday";
}
return "[[ERROR]]";
}
private NewspaperAnimation PlayAnimation
{
set
{
_PlayAnimation = value;
GetCurrentDate();
switch (_PlayAnimation)
{
case NewspaperAnimation.None:
_Animator.SetBool("Speen", false);
_CarmenPortrait.material.SetVector("_MainTex_ST", new Vector4(0.5f, 0.5f, 0.0f, 0.5f));
break;
case NewspaperAnimation.Win:
_Animator.SetBool("Speen", true);
SendCustomEventDelayedSeconds(nameof(ApplyJailEffect), 2.0f);
break;
case NewspaperAnimation.Lose:
_Animator.SetBool("Speen", true);
SendCustomEventDelayedSeconds(nameof(ApplyEscapeEffect), 2.0f);
break;
}
}
get => _PlayAnimation;
}
private string WinningPlayer
{
set
{
_WinningPlayer = value;
SetHeadline(_WinningPlayer == "" ? false : true);
}
get => _WinningPlayer;
}
}