using System;
using System.Collections.Generic;
using JetBrains.Annotations;
using UnityEngine;
using UnityEngine.UI;
using VRC.SDKBase;
using VRC.Udon.Common;
namespace VRC.SDK3.ClientSim
{
///
/// System responsible for displaying the menu to the players and updating settings.
///
///
/// Sends Events:
/// - ClientSimMenuStateChangedEvent
/// - ClientSimMenuRespawnClickedEvent
/// - ClientSimOnPlayerHeightUpdateEvent
/// Listens to Events:
/// - ClientSimReadyEvent
/// - ClientSimOnPlayerMovedEvent
/// - ClientSimOnNewMasterEvent
/// - ClientSimOnPlayerJoinedEvent
/// Listens to Input Events:
/// - ToggleMenu
///
[AddComponentMenu("")]
public class ClientSimMenu : ClientSimBehaviour, IDisposable
{
// Property name on UI shaders to set the ZTest mode. Used to make the menu appear on top of everything.
private const string GUI_ZTEST_MODE_PROPERTY_NAME = "unity_GUIZTestMode";
private const string HAS_USER_ACCEPTED_WARNING = "accepted_warning";
public enum ClientSimDisplayedPage
{
PAUSE_MENU,
WARNING_PAGE,
INVALID_SETTINGS_PAGE,
DELAYED_START_PAGE,
}
// The method to open the settings window is set from Editor context.
// This hook is set on playmode start in ClientSimEditorRuntimeLinker.cs
internal static Action openSettingsHook;
// This method allows the menu to check the editor only method if ClientSim has all settings properly set
internal static Func checkValidSettingsHook;
[SerializeField]
private GameObject menu;
public float menuScaleFactor = 0.0035f;
[SerializeField]
private GameObject pauseMenu;
[SerializeField]
private GameObject warningsPage;
[SerializeField]
private GameObject invalidSettingsPage;
[SerializeField]
private GameObject delayStartPage;
[SerializeField]
private Toggle tooltipsToggle;
[SerializeField]
private Toggle reticleToggle;
[SerializeField]
private Toggle invertMouseToggle;
[SerializeField]
private Toggle consoleLoggingToggle;
[SerializeField]
private Slider playerHeightSlider;
[SerializeField]
private Text playerHeightText;
[SerializeField]
private Text playerNameText;
[SerializeField]
private Text playerIdText;
[SerializeField]
private Toggle isMasterToggle;
[SerializeField]
private Toggle isInstanceOwnerToggle;
[SerializeField]
private Toggle isVRCPlusToggle;
private IClientSimEventDispatcher _eventDispatcher;
private IClientSimInput _input;
private ClientSimSettings _settings;
private IClientSimSessionState _sessionState;
private IClientSimPlayerHeightManager _heightManager;
private ClientSimDisplayedPage _displayedPage = ClientSimDisplayedPage.WARNING_PAGE;
private bool _menuIsActive;
private bool _stackedCameraReady = false;
private float _playerHeightOriginalMaxvalue;
private Canvas _menuCanvas;
public void SetCanvasCamera(Camera cam)
{
_menuCanvas.worldCamera = cam;
}
protected override void Awake()
{
base.Awake();
_menuCanvas = menu.GetComponent