Переглянувши кілька моделей ігрового дизайну, я погодився з Entity-Component-System (ES System) для мого ігрового двигуна. Я читаю статті (головним чином T = Машина ) та переглядаю деякий вихідний код, і думаю, що мені достатньо, щоб почати роботу.
Є лише одна основна ідея, з якою я борюся. Як я маю справу з групами сутностей, які залежать один від одного?
Дозвольте скористатись прикладом:
Припустимо, що я створюю стандартний стрілець (думаю, що Джеймстаун ), і хочу створити "начальник" з декількома чіткими, але пов'язаними частинами. Розбивка може виглядати приблизно так:
- Корпус судна: Рух, Надання
- Гармата: позиція (заблокована відносно корпусу судна), відстеження \ вогонь у героя, пошкодження до вимкнення
- Основні: Положення (заблоковано відносно корпусу судна), Відстеження \ вогонь у героя, Пошкодження до моменту вимкнення, Відключення (е ... знищення) всіх інших об'єктів групи судна
Моєю метою було б те, що було б ідентифіковано (і маніпулювалося) як окремий ігровий елемент, без того, щоб переписувати підсистему з нуля кожного разу, коли я хочу створити новий сукупний Елемент.
Як я реалізую такий дизайн в системі ES?
- Чи реалізую я якісь відносини батько-дитина (суб'єкти можуть мати дітей)? Це, мабуть, суперечить методології того, що Суб'єкти просто порожній контейнер і змушує його відчувати себе більше OOP.
- Чи реалізую я їх як окремі об'єкти, з якимось з'єднувальним компонентом (BossComponent) та пов'язаною системою (BossSubSystem)? Не можу не стверджувати, що це буде важко реалізувати, оскільки те, як компоненти спілкуються, здається великою пасткою для ведмедів.
- Чи реалізую я їх як одне ціле об'єднання із набором компонентів (ShipComponent, CannonComponents, CoreComponent)? Це, здається, відповідає способу намірів системи ES (компоненти тут здаються занадто схожими на велику вагу), але я це знаю, тому я подумав, що я викладу це там.
- Чи реалізую я їх як щось інше, про що я згадав?
Я знаю, що це може бути реалізовано дуже легко в OOP, але мій вибір ES через OOP - це той, якого я буду дотримуватися. Якщо мені потрібно розібратися з чистою теорією ES, щоб реалізувати цю конструкцію, я буду (як не раніше мені не довелося йти на компроміс із чистим дизайном), але я вважаю за краще робити це з міркувань продуктивності, а не починати з поганого дизайну.
Щоб отримати додатковий кредит, подумайте про той самий дизайн, але кожен з "начальницьких об'єднань" насправді був пов'язаний з більшим "об'єктом BigBoss", виготовленим з основного корпусу, основного ядра та 3 "Суб'єктів Бос". Це дозволило б мені побачити рішення принаймні на 3 виміри (дідусь-батько-дитина) ... що для мене повинно бути більш ніж достатньо.