+updateWaterChunk x y valid sim =
+ -- if the chunk below is free, fall straight down
+ if elem (0,-1) valid && fromEnum (simGetChunkType sim x (y-1)) == fromEnum Air
+ then
+ let moved = simSet sim ChunkData { chunkType=Air } x y
+ in simSet moved ChunkData { chunkType=Water } x (y-1)
+ else if elem (-1,-1) valid && fromEnum (simGetChunkType sim (x-1) (y-1)) == fromEnum Air
+ then
+ let moved = simSet sim ChunkData { chunkType=Air } x y
+ in simSet moved ChunkData { chunkType=Water } (x-1) (y-1)
+ else if elem (1,-1) valid && fromEnum (simGetChunkType sim (x+1) (y-1)) == fromEnum Air
+ then
+ let moved = simSet sim ChunkData { chunkType=Air } x y
+ in simSet moved ChunkData { chunkType=Water } (x+1) (y-1)
+ -- stay put
+ else sim