import Debug.Trace
import Data.Vector ((!), (//))
import qualified Data.Vector as V
+import Data.List as L
data Simulation = Simulation
{ simSpace :: V.Vector ChunkData
else updateScaffolder x y valid sim (tail directs) cond exec
updateWaterChunk x y valid sim = updateScaffolder x y valid sim
- [(0,1),(-1,1),(1,1),(-1,0),(1,0)]
+ ((0,1) : (waterRandom [(-1,1),(1,1),(-1,0),(1,0)] x y))
(\qd ->
elem qd valid &&
fromEnum (simGetChunkType sim ((+) x $ fst qd) ((+) y $ snd qd)) == fromEnum Air
((+) y $ snd qd)
)
+-- really stupid pure psuedorandom
+waterRandom d x y =
+ let perm = L.permutations d
+ in perm !! ((x^y+x*y^x+x) `mod` (length perm))
+
updatePumpChunk x y valid sim = updateScaffolder x y valid sim
[(0,1),(-1,0),(1,0)]
(\qd ->
simToString :: Simulation -> [Char]
simToString sim@Simulation{simW=w} =
let simStr = V.toList $ V.map chunkToChar $ simSpace sim
- in insert w '\n' simStr
+ in Sim.insert w '\n' simStr
-- from https://stackoverflow.com/questions/12659562/insert-specific-element-y-after-every-n-elements-in-a-list
insert :: Int -> a -> [a] -> [a]