From de78537f8edc6cb162ba58520956255f7e53769d Mon Sep 17 00:00:00 2001 From: chai Date: Sun, 29 Aug 2021 12:54:37 +0800 Subject: =?UTF-8?q?*=E8=BD=B4=E5=90=91=E6=94=B9=E4=B8=BAxy?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Assets/Scripts/Input/InputManager.cs | 63 ++++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) (limited to 'Assets/Scripts/Input/InputManager.cs') diff --git a/Assets/Scripts/Input/InputManager.cs b/Assets/Scripts/Input/InputManager.cs index b5e3d8a1..62fd5f91 100644 --- a/Assets/Scripts/Input/InputManager.cs +++ b/Assets/Scripts/Input/InputManager.cs @@ -2,12 +2,22 @@ using System.Collections.Generic; using UnityEngine; +public struct InputCommand +{ + public KeyCode key; + public float time; +} + // 处理输入逻辑,不涉及读取输入,只处理逻辑 public class InputManager : SingletonMB { PCController _pc; + List m_CommandQueue = new List(); + + const float threshold = 3; + PCController pc { get @@ -49,4 +59,57 @@ public class InputManager : SingletonMB pc.unitState.ChangeState(UnitState.EUnitState.Attack, new UnitState.SkillParam()); } + public void OnUpdate() + { + foreach (KeyCode vKey in System.Enum.GetValues(typeof(KeyCode))) + { + if (Input.GetKeyDown(vKey)) + { + InputCommand cmd = new InputCommand(); + cmd.key = vKey; + cmd.time = Time.time; + m_CommandQueue.Add(cmd); + Debug.Log(cmd.time); + string cmdStr = ""; + m_CommandQueue.ForEach(s => cmdStr += s.key.ToString() + ","); + Debug.Log(cmdStr); + } + } + float curTime = Time.time; + int removeCount = 0; + for(int i = 0; i < m_CommandQueue.Count; ++i) + { + if(curTime - m_CommandQueue[i].time > threshold) + { + removeCount++; + } + } + m_CommandQueue.RemoveRange(0, removeCount); + } + + public bool TryCommand(float interval = 0.5f, params KeyCode[] keys) + { + if (keys.Length > m_CommandQueue.Count) + return false; + int count = m_CommandQueue.Count; + float preTime = m_CommandQueue[count - keys.Length].time; + for (int i = 0; i < keys.Length; ++i) + { + if(keys[i] == m_CommandQueue[i + count - keys.Length].key) + { + if(m_CommandQueue[i + count - keys.Length].time - preTime > interval) + { + return false; + } + preTime = m_CommandQueue[i + count - keys.Length].time; + } + else + { + return false; + } + } + m_CommandQueue.RemoveRange(count - keys.Length, keys.Length); + return true; + } + } -- cgit v1.1-26-g67d0