2024-09-12 15:10:48 +08:00
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
using UnityEngine;
|
|
|
|
|
|
|
|
|
|
namespace AxibugEmuOnline.Client
|
|
|
|
|
{
|
|
|
|
|
public class CommandDispatcher : MonoBehaviour
|
|
|
|
|
{
|
|
|
|
|
public static CommandDispatcher Instance { get; private set; }
|
|
|
|
|
|
2024-09-12 16:20:11 +08:00
|
|
|
|
/// <summary> ƽ<><C6BD>ע<EFBFBD><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧָ<D3A6><D6B8> </summary>
|
2024-09-12 15:10:48 +08:00
|
|
|
|
List<CommandExecuter> m_register = new List<CommandExecuter>();
|
2024-09-12 16:20:11 +08:00
|
|
|
|
/// <summary> <20><>ռע<D5BC><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,ָ<><D6B8><EFBFBD>ᱻ<EFBFBD>б<EFBFBD><D0B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ռ </summary>
|
|
|
|
|
List<CommandExecuter> m_registerHigh = new List<CommandExecuter>();
|
|
|
|
|
|
2024-09-12 15:10:48 +08:00
|
|
|
|
Dictionary<KeyCode, EnumCommand> m_keyMapper = new Dictionary<KeyCode, EnumCommand>();
|
|
|
|
|
|
|
|
|
|
private void Awake()
|
|
|
|
|
{
|
|
|
|
|
Instance = this;
|
|
|
|
|
|
2024-09-23 13:21:51 +08:00
|
|
|
|
m_keyMapper[KeyCode.A] = EnumCommand.SelectItemLeft;
|
|
|
|
|
m_keyMapper[KeyCode.D] = EnumCommand.SelectItemRight;
|
|
|
|
|
m_keyMapper[KeyCode.W] = EnumCommand.SelectItemUp;
|
|
|
|
|
m_keyMapper[KeyCode.S] = EnumCommand.SelectItemDown;
|
|
|
|
|
m_keyMapper[KeyCode.K] = EnumCommand.Enter;
|
|
|
|
|
m_keyMapper[KeyCode.L] = EnumCommand.Back;
|
|
|
|
|
m_keyMapper[KeyCode.I] = EnumCommand.OptionMenu;
|
|
|
|
|
m_keyMapper[KeyCode.LeftArrow] = EnumCommand.SelectItemLeft;
|
|
|
|
|
m_keyMapper[KeyCode.RightArrow] = EnumCommand.SelectItemRight;
|
|
|
|
|
m_keyMapper[KeyCode.UpArrow] = EnumCommand.SelectItemUp;
|
|
|
|
|
m_keyMapper[KeyCode.DownArrow] = EnumCommand.SelectItemDown;
|
|
|
|
|
m_keyMapper[KeyCode.Return] = EnumCommand.Enter;
|
|
|
|
|
m_keyMapper[KeyCode.Escape] = EnumCommand.Back;
|
|
|
|
|
m_keyMapper[KeyCode.RightShift] = EnumCommand.OptionMenu;
|
|
|
|
|
m_keyMapper[KeyCode.LeftShift] = EnumCommand.OptionMenu;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (Application.platform == RuntimePlatform.PSP2)
|
|
|
|
|
{
|
|
|
|
|
m_keyMapper[Common.PSVitaKey.Left] = EnumCommand.SelectItemLeft;
|
|
|
|
|
m_keyMapper[Common.PSVitaKey.Right] = EnumCommand.SelectItemRight;
|
|
|
|
|
m_keyMapper[Common.PSVitaKey.Up] = EnumCommand.SelectItemUp;
|
|
|
|
|
m_keyMapper[Common.PSVitaKey.Down] = EnumCommand.SelectItemDown;
|
|
|
|
|
m_keyMapper[Common.PSVitaKey.Circle] = EnumCommand.Enter;
|
|
|
|
|
m_keyMapper[Common.PSVitaKey.Cross] = EnumCommand.Back;
|
|
|
|
|
m_keyMapper[Common.PSVitaKey.Triangle] = EnumCommand.OptionMenu;
|
|
|
|
|
}
|
|
|
|
|
//<2F>ֱ<EFBFBD>
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
}
|
2024-09-12 15:10:48 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void OnDestroy()
|
|
|
|
|
{
|
|
|
|
|
Instance = null;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void RegistController(CommandExecuter controller)
|
|
|
|
|
{
|
2024-09-12 16:20:11 +08:00
|
|
|
|
if (!controller.AloneMode)
|
|
|
|
|
{
|
|
|
|
|
if (m_register.Contains(controller)) { return; }
|
2024-09-12 15:10:48 +08:00
|
|
|
|
|
2024-09-12 16:20:11 +08:00
|
|
|
|
m_register.Add(controller);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
if (m_registerHigh.Contains(controller)) { return; }
|
|
|
|
|
|
|
|
|
|
m_registerHigh.Add(controller);
|
|
|
|
|
}
|
2024-09-12 15:10:48 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void UnRegistController(CommandExecuter menuItemController)
|
|
|
|
|
{
|
2024-09-12 16:20:11 +08:00
|
|
|
|
if (!menuItemController.AloneMode)
|
|
|
|
|
m_register.Remove(menuItemController);
|
|
|
|
|
else
|
|
|
|
|
m_registerHigh.Remove(menuItemController);
|
2024-09-12 15:10:48 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
readonly List<CommandExecuter> oneFrameRegister = new List<CommandExecuter>();
|
|
|
|
|
private void Update()
|
|
|
|
|
{
|
|
|
|
|
foreach (var item in m_keyMapper)
|
|
|
|
|
{
|
2024-09-12 16:20:11 +08:00
|
|
|
|
peekRegister(oneFrameRegister);
|
|
|
|
|
|
2024-09-12 15:10:48 +08:00
|
|
|
|
if (Input.GetKeyDown(item.Key))
|
|
|
|
|
{
|
2024-09-12 16:20:11 +08:00
|
|
|
|
foreach (var controller in oneFrameRegister)
|
2024-09-12 15:10:48 +08:00
|
|
|
|
{
|
|
|
|
|
if (!controller.Enable) continue;
|
|
|
|
|
controller.ExecuteCommand(item.Value, false);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if (Input.GetKeyUp(item.Key))
|
|
|
|
|
{
|
2024-09-12 16:20:11 +08:00
|
|
|
|
foreach (var controller in oneFrameRegister)
|
2024-09-12 15:10:48 +08:00
|
|
|
|
{
|
|
|
|
|
if (!controller.Enable) continue;
|
|
|
|
|
controller.ExecuteCommand(item.Value, true);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
2024-09-12 16:20:11 +08:00
|
|
|
|
|
|
|
|
|
private List<CommandExecuter> peekRegister(List<CommandExecuter> results)
|
|
|
|
|
{
|
|
|
|
|
results.Clear();
|
|
|
|
|
|
|
|
|
|
if (m_registerHigh.Count > 0)
|
|
|
|
|
{
|
|
|
|
|
for (int i = m_registerHigh.Count - 1; i >= 0; i--)
|
|
|
|
|
{
|
|
|
|
|
var controller = m_registerHigh[i];
|
|
|
|
|
if (controller.Enable)
|
|
|
|
|
{
|
|
|
|
|
results.Add(controller);
|
|
|
|
|
return results;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
foreach (var controller in m_register)
|
|
|
|
|
{
|
|
|
|
|
if (!controller.Enable) continue;
|
|
|
|
|
|
|
|
|
|
results.Add(controller);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return results;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#if UNITY_EDITOR
|
|
|
|
|
public void GetRegisters(out IReadOnlyList<CommandExecuter> normal, out IReadOnlyList<CommandExecuter> alone)
|
|
|
|
|
{
|
|
|
|
|
normal = m_register;
|
|
|
|
|
alone = m_registerHigh;
|
|
|
|
|
}
|
|
|
|
|
#endif
|
2024-09-12 15:10:48 +08:00
|
|
|
|
}
|
|
|
|
|
}
|