using System; using UnityEngine; [AddComponentMenu("NGUI/Interaction/Key Binding")] public class UIKeyBinding : MonoBehaviour { protected virtual void Start() { UIInput component = base.GetComponent(); this.mIsInput = (component != null); if (component != null) { EventDelegate.Add(component.onSubmit, new EventDelegate.Callback(this.OnSubmit)); } } protected virtual void OnSubmit() { if (UICamera.currentKey == this.keyCode && this.IsModifierActive()) { this.mIgnoreUp = true; } } protected virtual bool IsModifierActive() { if (this.modifier == UIKeyBinding.Modifier.None) { return true; } if (this.modifier == UIKeyBinding.Modifier.Alt) { if (Input.GetKey(KeyCode.LeftAlt) || Input.GetKey(KeyCode.RightAlt)) { return true; } } else if (this.modifier == UIKeyBinding.Modifier.Control) { if (Input.GetKey(KeyCode.LeftControl) || Input.GetKey(KeyCode.RightControl)) { return true; } } else if (this.modifier == UIKeyBinding.Modifier.Shift && (Input.GetKey(KeyCode.LeftShift) || Input.GetKey(KeyCode.RightShift))) { return true; } return false; } protected virtual void Update() { if (this.keyCode == KeyCode.None || !this.IsModifierActive()) { return; } if (this.action == UIKeyBinding.Action.PressAndClick || this.action == UIKeyBinding.Action.All) { if (UICamera.inputHasFocus) { return; } UICamera.currentTouch = UICamera.controller; UICamera.currentScheme = UICamera.ControlScheme.Mouse; UICamera.currentTouch.current = base.gameObject; if (Input.GetKeyDown(this.keyCode)) { this.mPress = true; this.OnBindingPress(true); } if (Input.GetKeyUp(this.keyCode)) { this.OnBindingPress(false); if (this.mPress) { this.OnBindingClick(); this.mPress = false; } } UICamera.currentTouch.current = null; } if ((this.action == UIKeyBinding.Action.Select || this.action == UIKeyBinding.Action.All) && Input.GetKeyUp(this.keyCode)) { if (this.mIsInput) { if (!this.mIgnoreUp && !UICamera.inputHasFocus) { UICamera.selectedObject = base.gameObject; } this.mIgnoreUp = false; } else { UICamera.selectedObject = base.gameObject; } } } protected virtual void OnBindingPress(bool pressed) { UICamera.Notify(base.gameObject, "OnPress", pressed); } protected virtual void OnBindingClick() { UICamera.Notify(base.gameObject, "OnClick", null); } public KeyCode keyCode; public UIKeyBinding.Modifier modifier; public UIKeyBinding.Action action; private bool mIgnoreUp; private bool mIsInput; private bool mPress; public enum Action { PressAndClick, Select, All } public enum Modifier { None, Shift, Control, Alt } }