Обработка специфики производных классов без понижения

Допустим, у меня есть два разных типа коллайдеров, кругов и прямоугольников, которые получены из одного базового класса коллайдеров. У меня есть класс сущности, который содержит указатель на коллайдер, который может быть коллайдером круга или коллайдером коробки.

class Collider {};

class CircleCollider : public Collider
{
// Defines a circle
};
class BoxCollider : public Collider
{
// Defines a rectangle
};

class Entity
{
Collider* collider;
};

Я хочу создать обработчик коллизий, чтобы я мог просто пропустить несколько объектов и позволить ему выяснить, как разрешать их коллизии, но для этого обработчик должен знать, с какими типами коллайдеров он имеет дело.

Когда проблема была сформулирована так, как это, единственным решением, по-видимому, является уныние, но мне интересно, просто ли я подхожу к ней неправильно. Это похоже на обычный сценарий, но у меня возникают проблемы с поиском решений, из-за которых я подозреваю, что либо есть какой-то другой подход, которого я не вижу, либо это тот случай, когда нужно просто использовать даункинг.

Поскольку обработка коллизий специфична для разных пар коллайдеров, не похоже, что я могу использовать здесь шаблон посетителя, или я ошибаюсь?

0

Решение

Если вы добавите виртуальный метод collidesWith (Collider c) в класс Collider и добавите конкретную реализацию в BoxCollider и CircleCollider, которая будет выяснять, сталкиваются ли эти конкретные экземпляры, внешний обработчик столкновений никогда не должен будет понижать или даже знать, какой конкретный тип коллайдера он использовал.

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector