Я играл с несколькими простыми игровыми программами на C #, используя моногаму, и в настоящее время я пытаюсь создать элементарный ECS с нуля.Я понимаю, что уже существуют очень хорошо сделанные библиотеки ECS, это больше личное упражнение.
Код, который у меня есть на данный момент, выглядит примерно так:
public class Entity{
private bool active;
IComponent[] Components;
public Entity(){
active = true;
}
public AddComponent(IComponent component){
}
public bool Active { get => active; set => active = value; }
}
С IComponent являетсяинтерфейс для компонентов, и мне было интересно, существует ли способ определения индекса глобального массива для определенного типа компонента, когда он впервые определен во время выполнения?
Как, например;Если у вас есть Transform Component и CollisionComponent, то, когда первый компонент Transform во время выполнения определен, глобальный индекс присваивается каждому компоненту Transform, определенному после, с компонентом коллайдера, который ведет себя аналогичным образом, но с явно другим номером индекса.
C ++ эквивалент того, что я ищу, выглядит примерно так:
inline ComponentID getNewComponentTypeID()
{
static ComponentID lastID = 0u;
return lastID++;
}
template <typename T>
inline ComponentID getComponentTypeID() noexcept
{
static_assert(std::is_base_of<Component, T>::value, "");
static ComponentID typeID = getNewComponentTypeID();
return typeID;
}