Розробляючи систему-компонент сутності для мого двигуна, я натрапив на невеликий корч у способі зберігання та пошуку певного типу компонента.
По-перше, дозвольте мені встановити трохи термінології, яку я буду використовувати в цьому питанні:
- Я називаю " Компонент " структурою даних, яка зберігає відповідні дані для певної системи.
- Я називаю " Система " сукупністю методів та структур даних, яка використовує компоненти для оновлення ігрового стану / інтерфейсу з користувачем.
- " Сутність " - це в основному лише ідентифікатор, який використовується для отримання конкретних компонентів та зміни їх даних в логіці гри.
Кожна система володіє масивом (накреслений по ID) свого типу компонентів (наприклад, Physics-> PhysicsComponent, AI-> AIComponent, Rendering-> RenderingComponent), щоб вона могла ефективно повторювати дані.
Однак не всі компоненти спеціально належать системі. Наприклад, компонент Transform зберігає положення, обертання та масштаб об'єкта. Це одна з найважливіших частин суб'єкта (Єдність робить його обов'язковим навіть), оскільки його використовують багато систем, наприклад фізика, AI, візуалізація тощо.
Це в значній мірі проблема, з якою я стикаюся. Оскільки Transform використовується в багатьох інших системах, то як я можу взятись із пошуком однієї для використання для кожного компонента? Я бачу одне з можливих рішень - зробити кожен компонент зберігати свій ідентифікатор особи. Буде легко отримати будь-який подібний компонент, але це було б не настільки ефективно, і це також би суперечило концепції Компонента як ізольованого та незалежного набору даних, що не знає жодного іншого.
Чи є правильний спосіб вирішити цю проблему? Чи повинен Трансформація навіть бути складовою?