- -- spawn = simSet next (ChunkData Water) 5 0
-
--- takes in list of valid chunks, as well as the sim to modify
--- updateWaterChunk x y valid sim | trace ("x:" ++ show x ++ " y:" ++ show y ++ " " ++ show valid) False = undefined
-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)
- else if elem (-1,0) valid && fromEnum (simGetChunkType sim (x-1) y) == fromEnum Air
- then
- let moved = simSet sim ChunkData { chunkType=Air } x y
- in simSet moved ChunkData { chunkType=Water } (x-1) y
- else if elem (1,0) valid && fromEnum (simGetChunkType sim (x+1) y) == fromEnum Air
- then
- let moved = simSet sim ChunkData { chunkType=Air } x y
- in simSet moved ChunkData { chunkType=Water } (x+1) y
- -- stay put
- else sim
-
-updatePumpChunk x y valid sim =
- if elem (0,1) valid && fromEnum (simGetChunkType sim x (y+1)) == fromEnum Air
- then simSet sim ChunkData { chunkType=Water } x (y+1)
- else if elem (-1,0) valid && fromEnum (simGetChunkType sim (x-1) y) == fromEnum Air
- then simSet sim ChunkData { chunkType=Water } (x-1) y
- else if elem (1,0) valid && fromEnum (simGetChunkType sim (x+1) y) == fromEnum Air
- then simSet sim ChunkData { chunkType=Water } (x+1) y
- else sim
-
-updateDrainChunk x y valid sim =
- if elem (0,1) valid && fromEnum (simGetChunkType sim x (y+1)) == fromEnum Water
- then simSet sim ChunkData { chunkType=Air } x (y+1)
- else if elem (0,-1) valid && fromEnum (simGetChunkType sim x (y-1)) == fromEnum Water
- then simSet sim ChunkData { chunkType=Air } x (y-1)
- else if elem (1,0) valid && fromEnum (simGetChunkType sim (x+1) y) == fromEnum Water
- then simSet sim ChunkData { chunkType=Air } (x+1) y
- else if elem (-1,0) valid && fromEnum (simGetChunkType sim (x-1) y) == fromEnum Water
- then simSet sim ChunkData { chunkType=Air } (x-1) y
- else sim