AxibugEmuOnline/AxibugEmuOnline.Client/Assets/Script/UI/CommandDispatcher.cs

77 lines
3.0 KiB
C#
Raw Normal View History

2024-08-16 17:26:28 +08:00
using System;
using System.Collections.Generic;
using UnityEngine;
namespace AxibugEmuOnline.Client
{
public class CommandDispatcher : MonoBehaviour
{
public static CommandDispatcher Instance { get; private set; }
2024-08-21 16:28:23 +08:00
List<MenuItemController> m_register = new List<MenuItemController>();
2024-08-16 17:26:28 +08:00
Dictionary<KeyCode, MenuItemController.EnumCommand> m_keyMapper = new Dictionary<KeyCode, MenuItemController.EnumCommand>();
private void Awake()
{
Instance = this;
m_keyMapper.Add(KeyCode.A, MenuItemController.EnumCommand.SelectItemLeft);
m_keyMapper.Add(KeyCode.D, MenuItemController.EnumCommand.SelectItemRight);
m_keyMapper.Add(KeyCode.W, MenuItemController.EnumCommand.SelectItemUp);
m_keyMapper.Add(KeyCode.S, MenuItemController.EnumCommand.SelectItemDown);
m_keyMapper.Add(KeyCode.K, MenuItemController.EnumCommand.Enter);
m_keyMapper.Add(KeyCode.L, MenuItemController.EnumCommand.Back);
m_keyMapper.Add(KeyCode.I, MenuItemController.EnumCommand.OptionMenu);
m_keyMapper.Add(KeyCode.LeftArrow, MenuItemController.EnumCommand.SelectItemLeft);
m_keyMapper.Add(KeyCode.RightArrow, MenuItemController.EnumCommand.SelectItemRight);
m_keyMapper.Add(KeyCode.UpArrow, MenuItemController.EnumCommand.SelectItemUp);
m_keyMapper.Add(KeyCode.DownArrow, MenuItemController.EnumCommand.SelectItemDown);
m_keyMapper.Add(KeyCode.Return, MenuItemController.EnumCommand.Enter);
m_keyMapper.Add(KeyCode.Escape, MenuItemController.EnumCommand.Back);
m_keyMapper.Add(KeyCode.RightShift, MenuItemController.EnumCommand.OptionMenu);
m_keyMapper.Add(KeyCode.LeftShift, MenuItemController.EnumCommand.OptionMenu);
}
private void OnDestroy()
{
Instance = null;
}
public void RegistController(MenuItemController controller)
{
2024-08-21 16:28:23 +08:00
if (m_register.Contains(controller)) { return; }
2024-08-16 17:26:28 +08:00
m_register.Add(controller);
}
public void UnRegistController(MenuItemController menuItemController)
{
m_register.Remove(menuItemController);
}
private void Update()
{
foreach (var item in m_keyMapper)
{
if (Input.GetKeyDown(item.Key))
{
2024-08-21 16:28:23 +08:00
for (int i = 0; i < m_register.Count; i++)
{
var controller = m_register[i];
2024-08-16 17:26:28 +08:00
controller.ExecuteCommand(item.Value, false);
2024-08-21 16:28:23 +08:00
}
2024-08-16 17:26:28 +08:00
}
if (Input.GetKeyUp(item.Key))
{
2024-08-21 16:28:23 +08:00
for (int i = 0; i < m_register.Count; i++)
{
var controller = m_register[i];
2024-08-16 17:26:28 +08:00
controller.ExecuteCommand(item.Value, true);
2024-08-21 16:28:23 +08:00
}
2024-08-16 17:26:28 +08:00
}
}
}
}
}