CrossCraft/CrossCraft-Classic

Substitute long if/else for switch statement for minor speedup.

Closed this issue · 0 comments

There are enough cases in functions like ChunkMesh::getTexCoord to consider using a switch statement for a minor CPU usage reduction. Could be trivial now but worth doing anyway for PSP.

std::array<float, 8> ChunkMesh::getTexCoord(uint8_t idx, uint32_t lv) {
auto vec = glm::vec2(16, 16);
if (idx == 1) // Stone
return getTexture(vec, 1);
else if (idx == 2) // Dirt
return getTexture(vec, 2);
else if (idx == 3) { // Grass
if (lv == LIGHT_SIDE)
return getTexture(vec, 3);
else if (lv == LIGHT_BOT)
return getTexture(vec, 2);
else
return getTexture(vec, 0);
} else if (idx == 4) // Cobblestone
return getTexture(vec, 16);
else if (idx == 5) // Wood
return getTexture(vec, 4);
else if (idx == 7) // Bedrock
return getTexture(vec, 17);
else if (idx == 8 || idx == 9) // Water
return getTexture(vec, 14);
else if (idx == 10 || idx == 11) // Lava
return getTexture(vec, 30);
else if (idx == 12) // Sand
return getTexture(vec, 18);
else if (idx == 13) // Gravel
return getTexture(vec, 19);
else if (idx == 14) // Gold Ore
return getTexture(vec, 32);
else if (idx == 15) // Iron Ore
return getTexture(vec, 33);
else if (idx == 16) // Coal Ore
return getTexture(vec, 34);
else if (idx == 6) // Sapling
return getTexture(vec, 15);
else if (idx == 17) { // Log
if (lv == LIGHT_TOP || lv == LIGHT_BOT)
return getTexture(vec, 21);
else
return getTexture(vec, 20);
} else if (idx == 18) // Leaves
return getTexture(vec, 22);
else if (idx == 19) // Sponge
return getTexture(vec, 48);
else if (idx == 20) // Glass
return getTexture(vec, 49);
else if (idx == 37) // Flower1
return getTexture(vec, 13);
else if (idx == 38) // Flower2
return getTexture(vec, 12);
else if (idx == 39) // Mushroom1
return getTexture(vec, 29);
else if (idx == 40) // Mushroom2
return getTexture(vec, 28);
else if (idx == 41) // Gold
return getTexture(vec, 24);
else if (idx == 42) // Iron
return getTexture(vec, 23);
else if (idx == 43) // DSLAB
return getTexture(vec, 5);
else if (idx == 44) // HSLAB
if (lv == LIGHT_SIDE)
return getTexture(vec, 25);
else
return getTexture(vec, 6);
else if (idx == 45) // Brick
return getTexture(vec, 7);
else if (idx == 46) // TNT
{
if (lv == LIGHT_SIDE)
return getTexture(vec, 8);
else if (lv == LIGHT_BOT)
return getTexture(vec, 10);
else
return getTexture(vec, 9);
} else if (idx == 47) // BookShelf
if (lv == LIGHT_TOP || lv == LIGHT_BOT)
return getTexture(vec, 4);
else
return getTexture(vec, 35);
else if (idx == 48) // Mossy Cobble
return getTexture(vec, 36);
else if (idx == 49) // Obsidian
return getTexture(vec, 37);
else {
return getTexture(vec, idx - 21 + 64);
}
}