160 lines
3.6 KiB
C#
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;
|
|
}
|
|
}
|