The water moves not in real time but with the speed of the physics engine (60FPS at the moment) but this is by design to keep the used CPU cycles at a reasonable level. And you are right, that makes it look a bit like jelly. But you have to understand that the player can place water anywhere(!) in the (currently) 50x50x32x32x128 blocks world and then the simulation has to take care that it behaves in a way like water. It is also important to know that each change in water level makes a retesselation of the given sourroundings necessary, so this is not a simple process. But I agree that it is not 100% accurate - the question is, is it possible to make it more accurate without making it unreasonable complex and slow? If you compare it to Minecraft for example, then you see that water is also not simulated in any completely accurate way, just because it would most likely not be feasible.
And to explain why the water moves vertically first is simply because gravity is the bigger force here. I implemented it to first check if a block is below the water and if so the water should flow down, then if there is still water in the current block it would flow in the x/z-directions. You can check the javscript code below that I currently use - any suggestions are very welcome
The water javascript code: http://pastebin.java-gaming.org/5c2af2e3581
The onChange() function is called every time when a block is changed that is a neighbor of this block or the block at the position of this block has been changed.
You get four parameters:
- world - the world to access all world relevant stuff (like terrain, player, npc …)
- blockInstance - the instance of this class that is adjacent to the change
- blockInstanceBefore - the instance of a block before it was changed
- blockInstanceNow - the instance of a block after it has been changed
Soon when we release the alpha version, you can play around with the block definitions for yourself to optimize these things if you like