Bonjour à tous,
Dans le cadre d’un monde pseudo-infinie que j’ai divisé en chunks pour ne pas l’avoir complètement chargé, je cherche à déplacer une grille uniforme qui me sert pour tester mes collisions par la suite. Sauf que le déplacement est un peu coûteux avec l’algorithme que j’ai écris et je n’ai pas trop d’idée comment l’optimiser
Voici la fonction en question :
void Grid::moveCenter(int mX, int mY) {
int pixelGridSize = NB_ITEMS * 32;
if (mX % pixelGridSize != 0 && mY % pixelGridSize != 0) return;
int maxX = size.x / pixelGridSize;
int maxY = size.y / pixelGridSize;
glm::ivec2 topCorner = glm::ivec2(mX, mY) - size / 2 + pixelGridSize / 2;
// erasing superfluous nodes
for (auto it = nodes.begin(); it != nodes.end();) {
glm::ivec2 nPos = (*it)->getPos();
if (nPos.x >= topCorner.x + size.x || nPos.y >= topCorner.y + size.y ||
nPos.x < topCorner.x || nPos.y < topCorner.y) {
nodes.erase(it);
} else {
it++;
}
}
// adding nodes not present yet
for (int i = 0; i < maxX; i++) {
for (int j = 0; j < maxY; j++) {
glm::ivec2 nPos = topCorner + glm::ivec2(i * pixelGridSize, j * pixelGridSize);
if (nPos.x >= pos.x + size.x || nPos.y >= pos.y + size.y || nPos.x < pos.x ||
nPos.y < pos.y) {
int index = i * maxY + j;
auto it = nodes.begin();
it += index;
nodes.insert(
it, std::make_unique<GridNode>(manager, topCorner.x + i * pixelGridSize,
topCorner.y + j * pixelGridSize, pixelGridSize,
pixelGridSize));
}
}
}
pos.x = topCorner.x;
pos.y = topCorner.y;
}
Merci d’avance pour les pistes que vous pourriez me donner
+0
-0