Система компонентов сущности: как представлять архетипы?C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Система компонентов сущности: как представлять архетипы?

Сообщение Anonymous »

В настоящее время я работаю над системой компонентов сущностей. Я тестировал несколько разных проектов, чтобы увидеть, какой из них работает быстрее всего. Лучшее решение, которое мне удалось придумать, — это создать «архетипы» для каждой комбинации компонентов. Все различные архетипы хранятся в векторах, и каждая система перебирает только те архетипы, которые ей необходимы. Вот пример:

Код: Выделить всё

// COMPONENTS

class Transform {
public:
Vector3 position;
Quaternion rotation;
};

class Rigidbody {
public:
Vector3 velocity;
};

class Collider {
public:
Vector3 offset;
Vector3 size;
};

// ARCHETYPES

class Archetype1 {
public:
Transform transform;
Rigidbody rigidbody;
};

class Archetype2 {
public:
Transform transform;
Collider collider;
};

class Archetype3 {
public:
Rigidbody rigidbody;
Collider collider;
};

// STORAGE

std::vector archetype1s;
std::vector archetype2s;
std::vector archetype3s;
Проблема в том, что я хотел бы избежать этого дизайна с копированием и вставкой. С каждым реализуемым мной компонентом количество архетипов начинает быстро увеличиваться, что значительно усложняет поддержку этого проекта. Я пытался найти решения, чтобы избежать этого, например, используя классы шаблонов:

Код: Выделить всё

template  class Archetype {
public:
A a;
};

template  class Archetype {
public:
A a;
B b;
};

template  class Archetype {
public:
A a;
B b;
C c;
};

... and so on ...
Хотя это решает только половину проблемы. Этот метод позволяет мне ограничить количество классов архетипов (хотя доступ к компонентам с помощью Archetype.a или Archetype.b довольно грубый), я столкнулся с проблемой, когда мне все еще приходится копировать и вставлять векторы для каждого архетипа.
В какой-то момент я пытался создать единый класс архетипа, который содержал бы сигнатуру для определения того, какие компоненты он содержит, и массив байтов, которые должны были представлять данные компонента. Хотя мне не удалось найти способ хранения данных в удобном для кэша виде.
Я понимаю, что для моей конкретной проблемы может не быть решения, и я могу просто придется скопировать-вставить потенциально сотню векторов разных архетипов. Или может быть гораздо лучшее решение, использующее совершенно другой подход, чем моя идея архетипа. В любом случае я открыт ко всему и ценю любую информацию!

Подробнее здесь: https://stackoverflow.com/questions/783 ... archetypes
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»