Моє запитання:
Як я можу обробляти ігрові стани в моїй системі сутності, не вдаючись до збереження стопки об’єктів стану гри навколо?
Отже, дизайн моєї системи сутності означає, що коли суб'єкту потрібно зареєструватися, наприклад, для подій введення, компонент входу викликає систему введення та каже "зареєструвати цю сутність для цього вводу". Це все добре і добре, однак якщо додати до цього поняття ігрових станів (скажімо, екран пауз), це стане проблемою, щоб розробитись, якщо суб'єкт господарювання знаходиться у поточному стані і повинен отримати вхід.
Я міг би доповнити вхідний компонент / систему так, щоб він говорив, "зареєструйте цю сутність для цього вводу, перебуваючи в цих ігрових станах", але для цього потрібно, щоб кожен суб'єкт знав, у яких станах він буде використовуватися, і це може бути не очевидно. Крім того, зберігання списку ігрових станів навколо кожного зареєстрованого входу (та інших систем, що використовують зворотні дзвінки), не здається занадто ефективним.
Ще одна ідея, яку я мав, оскільки з'явиться сутність, яка представляє ігровий стан, відзначте це як відключене, то при генерації події введення перевіряйте, чи не є нащадком відключеного об'єкта ігрового стану. Дуже дорого відпрацьовувати батьків за кожен зворотний дзвінок.
Інша ідея полягає у тому, щоб усі системи зберігали свої дані, відведені до поточного стану, таким чином при генеруванні введення цільовий суб'єкт навіть не буде кандидатом. Однак це дійсно шкодить можливості дозволити спілкування між сутностями в різних станах (не стільки проблема для пауз екранів, але думка вибору блокування в Oblivion / Skyrim).
Єдиною іншою ідеєю я був - щоб усі компоненти обробляли події зміни стану та спілкувалися зі своєю відповідною системою, щоб відключити все, що вони зареєстрували, та повторно включити його під час повернення до цього стану.
Другі (позначте об'єкт як відключений) і далі (кожен компонент має справу зі змінами стану) здаються найкращими з моїх ідей, але жодна з них не вискакує на мене як особливо велику.
Хтось ще має якісь ідеї, як це зробити?
редагувати Хоча я розповідаю про вхід конкретно в цьому питанні, це може означати будь-яку систему, здатну надсилати повідомлення / події сутностям, наприклад, зіткнення, події таймера тощо.