Попытка обдумать способы правильной обработки столкновений в игре, основанной на компонентах.
Я вижу, что во многих примерах есть что-то вроде того, PhysicsComponent
что добавляется в список компонентов объекта, но фактическая реализация сбивает меня с толку.
Для того, чтобы это работало, PhysicsComponent
необходим доступ к окружающему миру. Это не имеет смысла для меня. Разве компонент не должен знать не только о своем контейнере (объекте), но и контейнере своего контейнера (мир)?
Для меня это звучит так, как будто уровень или сцена должны поддерживать список этих объектов, и при каждом обновлении игры, просматривайте объекты, чтобы определить, какие из них сталкиваются.
Мой вопрос, во-первых, хороший ли это дизайн или, во-вторых, как определить, какие объекты могут сталкиваться. Я предполагаю, что твердые объекты могут реализовать пустой интерфейс IRigidBody, чтобы уровень мог определить, какие объекты в списке поддерживают коллизию. Но это нарушает дизайн компонентов?
Вместо этого они должны содержать пустой компонент RigidBody? На самом деле это может быть лучше, потому что он не всегда может быть пустым, и этот подход более ориентирован на будущее. Единственная проблема с этим - сложность. Сцена должна была бы проходить не только по каждой сущности, но и по компонентам каждой сущности, чтобы определить, есть ли у нее этот компонент RigidBody.
В-третьих, когда они сталкиваются, обе организации должны быть как-то проинформированы, и я не уверен, как это сделать.
Предположим, что обе сущности содержат HealthComponent, и когда они сталкиваются, их здоровье будет уменьшено на какое-то произвольное значение, 5. Я полагаю, что сцена должна будет справиться с этим, когда обнаружит коллизию между двумя сущностями?
Но тогда сцена несет ответственность за слишком много? Я мог видеть, что это может выйти из-под контроля и стать громоздким, когда сцена ответственна за многие вещи, к которым сущности не должны (?) Иметь доступ.
Изменить: Вопрос обновлен с более подробной информацией.