I want to start with an example illustrating my question. The following way it is done in the most games.
class car
{
vec3 position;
vec3 rotation;
mesh model;
imge texture;
void move(); // modify position and rotation
void draw(); // use model, texture, ...
};
vector<car> cars;
for(auto i = cars.begin(); i != cars.end(); ++i)
{
i->move();
i->draw();
}
Data oriented design means to process the same calculation on the hole batch of data at once. This way it takes more advantage out of the processor cache.
struct movedata
{
vec3 position;
vec3 rotation;
};
struct drawdata
{
mesh model;
imge texture;
};
vector<movedata> movedatas;
vector<drawdata> drawdatas;
for(auto i = movedatas.begin(); i != movedatas.end(); ++i)
{
// modify position and rotation
}
for(auto i = drawdatas.begin(); i != drawdatas.end(); ++i)
{
// use model, texture, ...
}
But there comes a point where you need to find other properties according to an entity.
For example if the car crashes, I do not need the drawdata and the movedata any more. So I need to delete the entries of this entity in all vectors.
The entries are not linked by code. So my question is the following. How are properties of the same entity conceptually linked in a data oriented design?