Системи повинні зберігати пару ключових значень Entity to Component в якомусь мапі, об’єкті словника або асоціативному масиві (залежно від мови, що використовується). Крім того, коли ви створюєте свій об'єкт Entity, я б не переймався зберіганням його в менеджері, якщо вам не потрібно мати можливість відреєстрації його в будь-якій із систем. Entity - це складова компонентів, але вона не повинна обробляти жодне з оновлень компонента. Цим повинні займатися Системи. Натомість трактуйте свою сутність як ключ, який відображається на всіх компонентах, які вони містять у системах, а також як центр зв'язку для цих компонентів, щоб спілкуватися один з одним.
Велика частина моделей Entity-Component-System полягає в тому, що ви можете легко реалізувати можливість передачі повідомлень від одного компонента до інших компонентів сутності. Це дозволяє компоненту спілкуватися з іншим компонентом, не знаючи, хто цей компонент або як поводитися з компонентом, який він змінює. Замість цього він передає повідомлення і дозволяє компоненту самому змінюватися (якщо він існує)
Наприклад, система позицій не мала б у ній великого коду, лише слідкуючи за об'єктами сутності, відображеними на їх компонентах позиції. Але коли позиція змінюється, вони можуть надіслати повідомлення суб'єкту, що займається, і, в свою чергу, передається всім компонентам цієї організації. Позиція змінюється з будь-якої причини? Система позицій надсилає Суб'єкту повідомлення, що позиція змінилася, і десь компонент відображення зображення цього об'єкта отримує це повідомлення та оновлює, де воно буде малюватись далі.
І навпаки, фізична система повинна знати, що всі її об'єкти роблять; Він повинен мати можливість бачити всі світові об’єкти для перевірки зіткнень. Коли відбувається зіткнення, він оновлює компонент напряму суб'єкта господарювання, надсилаючи якесь "Повідомлення про зміну напрямку" суб'єкту, а не прямуючи безпосередньо до компонента Суб'єкта. Це відв'язує менеджера від необхідності знати, як змінювати напрямки, використовуючи повідомлення, замість того, щоб покладатися на певний компонент, який там є (якого його взагалі не може бути. У такому випадку повідомлення просто потраплятиме на глухі вуха замість деякої помилки виникає тому, що очікуваний об’єкт відсутній).
Ви помітите в цьому величезну перевагу, оскільки згадали, що у вас є мережевий інтерфейс. Мережевий компонент прослухає всі повідомлення, які надходять про те, що повинні знати всі інші. Це любить плітки. Потім, коли мережева система оновлюється, мережеві компоненти надсилають ці повідомлення іншим мережевим системам на інших клієнтських машинах, які потім надсилають ці повідомлення всім іншим компонентам для оновлення позицій програвача тощо. надсилати повідомлення по мережі, але це краса системи, ви можете просто керувати цією логікою, реєструючи в ній потрібні речі.
Коротко:
Сутність - це складова Компонентів, яка може приймати повідомлення. Організація може отримувати повідомлення, делегуючи вказані повідомлення всім їх компонентам, щоб оновити їх. (Повідомлення змінено позицію, напрямок зміни швидкості тощо) Це як центральна поштова скринька, яку всі компоненти можуть чути один від одного, а не говорити безпосередньо один одному.
Компонент - це невелика частина суб'єкта, що зберігає деякий стан сутності. Вони здатні розбирати певні повідомлення та викидати інші повідомлення. Наприклад, "Компонент напряму" дбає лише про "Повідомлення про зміну напрямку", але не про "Повідомлення про зміну позиції". Компоненти оновлюють власний стан на основі повідомлень, а потім оновлюють стан інших компонентів, надсилаючи повідомлення зі своєї Системи.
Система керує всіма компонентами певного типу і відповідає за оновлення зазначених компонентів кожного кадру, а також за відправлення повідомлень з компонентів, якими вони керують, до об'єктів, до яких належать компоненти
Системи зможуть паралельно оновлювати всі свої компоненти та зберігати всі повідомлення у міру їх надходження. Потім, коли виконання методів оновлення всіх систем завершиться, ви попросите кожну систему відправити їх повідомлення в певному порядку. Спочатку управління, можливо, потім - фізика, а потім напрямок, положення, візуалізація тощо. Має значення, в якому порядку вони надсилаються, оскільки зміна напряму фізики завжди повинна зважувати зміну напрямку управління.
Сподіваюсь, це допомагає. Це пекло зразка дизайну, але він смішно потужний, якщо зробити все правильно.