Enhancing the Water/Light Simulation

One big hurdle in creating new blöockshapes was the current limitation of the sim/light simulation which could only handle full blocks and each block was either blocking light/water or not. So this prevented me from adding more blockshapes like thinner walls because they would need a different system to contain water themselves but not give it to a neighbour tile.

So up we go to change the systems. For this to work I first needed some bits of space in the current simulation data model - which was full already. So I tried if it is possible to reduce the size of the waterlevel to 12 bits (instead of 16) and it turned out to be good enough to not be bothered with floating pooint precision during the simulation. Great! So now we can have a flag for each edge to define if it is "blocking" or not, so every single current blockshape (in every orientation) gets those flags set properly, which is a bit of a chore, but I dont sacrifice performance so it's all big chunk of constant values which are going to be used with bit operations only.

Luckily enough the changes itself were not that complicated, even tho it now needs a lot more parsing on the GPU side and ignore them from writing back. The Savefile Handler has to set those new flags on existing games and all the little bits happened as well and - voilá - it works. Granted - it was a bit more testing than written here, but eventually it worked out nice and now works even better than before and halfblocks can now properly block light and can be used as walls like they were supposed to.

I already made a thin wall shape at some point but it was deactivated for that very reason as I couldnt block light without going dark itself, so this blockshape is already finished and usable. Lots of other shapes are being made now as well to give the player more freedom of building.