93 lines
2.3 KiB
C#

using System;
using UnityEngine;
using ConjureOS.Input;
namespace ConjureOS.ArcadeMenu
{
public class ConjureArcadeMenu : MonoBehaviour
{
public event Action OnOpen;
#if !ENABLE_INPUT_SYSTEM && ENABLE_LEGACY_INPUT_MANAGER
[SerializeField]
private string homeButton = "Home";
#endif
public bool IsOpened { get; private set; } = false;
private void Start()
{
#if !ENABLE_INPUT_SYSTEM && ENABLE_LEGACY_INPUT_MANAGER
if (!IsButtonAvailable(homeButton))
{
Debug.LogWarning(
$"ConjureOS: {nameof(homeButton)} in {nameof(ConjureArcadeMenu)} must be a valid action name ('{homeButton}' is not set up). " +
"To modify actions, go to 'Edit > Project Settings > Input Manager'.");
}
#endif
}
#if !ENABLE_INPUT_SYSTEM && ENABLE_LEGACY_INPUT_MANAGER
private bool IsButtonAvailable(string buttonName)
{
try
{
UnityEngine.Input.GetButton(buttonName);
return true;
}
catch (ArgumentException)
{
return false;
}
}
private bool WasButtonPressedThisFrame(string buttonName)
{
try
{
return UnityEngine.Input.GetButtonDown(buttonName);
}
catch (ArgumentException)
{
return false;
}
}
#endif
private void Update()
{
#if ENABLE_INPUT_SYSTEM
foreach (ConjureArcadeController arcadeController in ConjureArcadeController.allControllers)
{
if (arcadeController.home.wasPressedThisFrame)
{
OpenArcadeMenu();
}
}
#elif ENABLE_LEGACY_INPUT_MANAGER
if (WasButtonPressedThisFrame(homeButton))
{
OpenArcadeMenu();
}
#endif
}
private void OpenArcadeMenu()
{
if (IsOpened)
{
return;
}
IsOpened = true;
// This will eventually open the arcade menu.
// However, for now, it will only close the game.
OnOpen?.Invoke();
#if UNITY_EDITOR
UnityEditor.EditorApplication.isPlaying = false;
#endif
Application.Quit();
}
}
}