Created
February 29, 2020 07:37
-
-
Save jackyli-work/bd28db0bdd0535bbc95b428870000356 to your computer and use it in GitHub Desktop.
escapeButton
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using JFun.Gameplay.MessageSystem; | |
using UnityEngine; | |
using UnityEngine.Events; | |
using UnityEngine.UI; | |
namespace JFun.Gameplay.CreateWorld.UI | |
{ | |
public class UIInputEventHelper : MonoBehaviour | |
{ | |
public KeyCode InputKey; | |
public float EscapeDelaySecs = 1f; | |
public UnityEvent Callback; | |
private Button _escapeButton; | |
private bool? _lastActive = null; | |
public bool IsEscapeActive { get; set; } | |
public void SetEscapeActive(bool isActive) | |
{ | |
if (isActive) | |
{ | |
if (_lastActive.HasValue) | |
{ | |
if (_lastActive.Value && MessageManager.HaveListener(MessageCmd.EscapeButtonInactive)) | |
{ | |
MessageManager.RemoveListener(MessageCmd.EscapeButtonInactive, null); | |
} | |
_lastActive = null; | |
} | |
} | |
else | |
{ | |
if (!_lastActive.HasValue) | |
{ | |
_lastActive = !MessageManager.HaveListener(MessageCmd.EscapeButtonInactive); | |
if (_lastActive.Value) | |
{ | |
MessageManager.AddListener(MessageCmd.EscapeButtonInactive, null); | |
} | |
} | |
} | |
} | |
private void OnEnable() | |
{ | |
if (InputKey != KeyCode.Escape) | |
{ | |
return; | |
} | |
if (EscapeDelaySecs < 0f) | |
{ | |
if (!MessageManager.HaveListener(MessageCmd.EscapeButtonInactive)) | |
{ | |
MessageManager.AddListener(MessageCmd.EscapeButtonInactive, null); | |
} | |
return; | |
} | |
_escapeButton = GetComponent<Button>(); | |
if (MessageManager.HaveListener(MessageCmd.EscapeButtonOpen)) | |
{ | |
MessageManager.Broadcast<UIInputEventHelper>(MessageCmd.EscapeButtonOpen, this); | |
} | |
else | |
{ | |
new EscapeButtonController(this); | |
} | |
} | |
private void OnDisable() | |
{ | |
if (InputKey != KeyCode.Escape) | |
{ | |
return; | |
} | |
if ((EscapeDelaySecs < 0f) && | |
(MessageManager.HaveListener(MessageCmd.EscapeButtonInactive))) | |
{ | |
MessageManager.RemoveListener(MessageCmd.EscapeButtonInactive, null); | |
return; | |
} | |
if (MessageManager.HaveListener(MessageCmd.EscapeButtonClose)) | |
{ | |
MessageManager.Broadcast(MessageCmd.EscapeButtonClose, this, -1f); | |
} | |
} | |
private void Start() | |
{ | |
if (InputKey == KeyCode.None) | |
{ | |
enabled = false; | |
} | |
} | |
private void Update() | |
{ | |
if (Input.GetKeyDown(InputKey) && | |
(InputKey != KeyCode.Escape) && | |
(Callback != null)) | |
{ | |
Callback.Invoke(); | |
return; | |
} | |
if (Input.GetKeyDown(KeyCode.Escape) && IsEscapeActive) | |
{ | |
if (MessageManager.HaveListener(MessageCmd.EscapeButtonInactive)) | |
{ | |
return; | |
} | |
if (MessageManager.HaveListener(MessageCmd.EscapeButtonClose)) | |
{ | |
MessageManager.Broadcast(MessageCmd.EscapeButtonClose, this, EscapeDelaySecs); | |
} | |
if (_escapeButton) | |
{ | |
_escapeButton.onClick.Invoke(); | |
} | |
Callback.Invoke(); | |
} | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment