Мені відомо, що це запитання задавали кілька разів, але я все ще не впевнений, як реалізувати обробку вводу в двигуні на компонентній основі.
Використовуваний нами компонентний дизайн базувався на серіях блогів T = Machine і на Артеміді, в якій сутності - це лише ідентифікаційні дані.
Є три основні ідеї, які я маю щодо впровадження обробки даних:
- Вхідний компонент буде проводити події, які його цікавлять. Система введення буде переводити події ключів та миші на ігрові події та здійснювати циклічну передачу через об'єкти із вхідним компонентом, і якщо вони зацікавлені у події, система введення здійснить відповідні дії. Ця дія буде важко закодована для вхідної системи.
- Немає вхідного компонента. Ви б реєстрували об'єкти з певними подіями у системі вводу. Потім система введення надсилатиме повідомлення (з ідентифікатором сутності та типом події) іншим системам, щоб вони могли вжити відповідних дій. Або, як і в першому випадку, дії будуть жорстко кодовані до системи введення.
- Подібно до першого методу, але замість жорсткого кодування дії на вхідну систему компонент міститиме карту подій до функцій (тобто
std::map<std::function>
), які б викликалися системою введення. Це додає ефекту можливості з'єднати одну і ту ж подію з різними діями.
Чи рекомендуєте ви будь-який із перерахованих вище способів чи є якісь пропозиції, які допомогли б мені впровадити гнучку систему обробки даних? Крім того, я ще не знайомий з багатопотоковою передачею, але будь-які пропозиції, які сприяли б оптимізації впровадження, також вітаються.
Примітка. Однією з додаткових вимог, яку я хотів би виконати, є те, що я зможу передавати один і той же вхід багатьом об'єктам, як, наприклад, переміщення об'єкта камери та плеєра одночасно.