Я пытаюсь написать свою собственную систему сущностей / компонентов с нуля на C #, и я застрял в том, где / как реализовать некоторые функции.
Редактировать: Я понял, как я собираюсь добавить такие функции, как Move () и Jump ().
public static class Actions
{
public static void MoveUp(EntityManager entityManager, int EGUID) {}
public static void MoveDown(EntityManager entityManage, int EGUID {}
}
Я могу добавить их в коллекцию следующим образом:
KeyboardController kbController = entityManager.GetComponent<KeyboardController(1);
kbController.KeyBindings.Add(Keys.Right, new Dictionary<KeyStateES, Action<EntityManager, int>());
kbController.KeyBindings[Keys.Right].Add(KeyStateES.Held, Actions.MoveUp);
И теперь я могу довольно легко перемещать сущность с помощью клавиш. Тем не менее, это все еще не совсем идеально, потому что:
- Я не могу связать более одного метода с ключом.
- Я вынужден передать аргументы метода в классе InputManager.
Это проблема, потому что иногда я хочу, чтобы ключ выполнял несколько несвязанных задач, и потому что для моего InputManager кажется действительно глупым передавать аргументы для методов. В идеале мне бы хотелось, чтобы событие KeyDown, KeyHeld или KeyReleased было запущено, и только контроллеры с определенным связанным ключом (ами) отвечали на событие и выполняли связанные с ними методы.