SanAndreasUnity/Assets/Scripts/UI/PauseMenu.cs
2020-05-31 19:09:51 +02:00

167 lines
4.1 KiB
C#

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using SanAndreasUnity.Behaviours;
using System.Linq;
using SanAndreasUnity.Utilities;
namespace SanAndreasUnity.UI {
public class PauseMenu : MonoBehaviour {
public static PauseMenu Instance { get; private set; }
private static bool m_isOpened = false;
public static bool IsOpened
{
get {
return m_isOpened;
}
set {
m_isOpened = value;
}
}
public static event System.Action onDrawItems = delegate {};
// public Color windowsColor = new Color(0.5f, 0.5f, 0.5f, 0.8f);
// private static Texture2D m_windowBackgroundTexture = null;
// private static bool m_changedWindowStyle = false;
public Color openedWindowTextColor = Color.green;
string m_chatText = "";
void Awake () {
if (null == Instance)
Instance = this;
// m_windowBackgroundTexture = Utilities.F.CreateTexture (1, 1, this.windowsColor);
}
void Start () {
}
public static PauseMenuWindow[] GetAllWindows() {
return FindObjectsOfType<PauseMenuWindow> ();
}
void Update () {
// toggle pause menu
if (Loader.HasLoaded && Input.GetButtonDown ("Start")) {
if (IsOpened) {
// if there is a modal window, close it, otherwise close pause menu
var window = GetAllWindows ().FirstOrDefault (w => w.IsOpened && w.IsModal);
if (window != null) {
window.IsOpened = false;
} else {
IsOpened = !IsOpened;
}
} else {
IsOpened = !IsOpened;
}
}
// if (IsOpened && Input.GetKeyDown(KeyCode.M))
// IsOpened = false;
// if (MiniMap.toggleMap && Input.GetKeyDown(KeyCode.Escape))
// MiniMap.toggleMap = false;
// bool isConsoleStateChanged = Console.Instance.m_openKey != Console.Instance.m_closeKey ?
// Input.GetKeyDown(Console.Instance.m_openKey) || Input.GetKeyDown(Console.Instance.m_closeKey) :
// Input.GetKeyDown(Console.Instance.m_openKey);
//
// if (m_playerController != null) {
// // WTF is this ?!
//
// // Fixed: If Escape is pressed, map isn't available
// if (!IsOpened && (Input.GetKeyDown (KeyCode.Escape) || isConsoleStateChanged || Input.GetKeyDown (KeyCode.F1) || (m_playerController.CursorLocked && Input.GetKeyDown (KeyCode.M))))
// m_playerController.ChangeCursorState (!m_playerController.CursorLocked);
// }
// update cursor lock state and visibility
if (Loader.HasLoaded)
{
if (UIManager.Instance.UseTouchInput)
{
// unlock the cursor
GameManager.ChangeCursorState (false, false);
// make it visible while pause menu is opened
Cursor.visible = IsOpened;
}
else
{
bool shouldBeLocked = !IsOpened;
if (GameManager.CursorLocked != shouldBeLocked)
GameManager.ChangeCursorState (shouldBeLocked);
}
}
}
void OnGUI() {
if (!Loader.HasLoaded || !IsOpened)
return;
// if (!m_changedWindowStyle) {
// m_changedWindowStyle = true;
// GUI.skin.window.normal.background = m_windowBackgroundTexture;
// }
// draw title
Utilities.GUIUtils.CenteredLabel (new Vector2 (Screen.width / 2.0f, 20), "<b>PAUSE MENU</b>");
GUI.BeginGroup (new Rect (10, 0, 250, Screen.height));
GUILayout.Space (20);
if (GUILayout.Button ("Resume"))
IsOpened = false;
GUILayout.Space (10);
// draw all registered items
onDrawItems ();
GUILayout.Space (10);
if (GUILayout.Button ("Exit")) {
GameManager.ExitApplication ();
}
GUI.EndGroup ();
// chat input
string buttonText = "Send";
Vector2 buttonSize = GUIUtils.CalcScreenSizeForText(buttonText, GUI.skin.button);
Rect rect = GUIUtils.GetCornerRect(ScreenCorner.BottomRight, buttonSize, new Vector2(40, 40));
if (GUI.Button(rect, buttonText))
{
Chat.ChatManager.SendChatMessageToAllPlayersAsLocalPlayer(m_chatText);
m_chatText = "";
}
float textInputWidth = 200;
rect.xMin -= textInputWidth;
rect.xMax -= buttonSize.x + 15;
m_chatText = GUI.TextField(rect, m_chatText, 100);
}
}
}