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]
- #~~~~~~~~~~~~~~~~~~@@~~~~~~~~~~~~~~~~~~#
- #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~#
- #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~#
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~@@~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
- ######
- ######
- ######
-
- ###### ######
- ###### ######
- ###### ######
-
- ###### ###### ######
- ###### ###### ######
- ###### ###### ######
-
- ###### ###### ###### ######
- ###### ###### ###### ######
- ###### ###### ###### ######
-
-
+ ######
+ ######
+ ######
+
+ ###### ######
+ ###### ######
+ ###### ######
+
+ ###### ###### ######
+ ###### ###### ######
+ ###### ###### ######
+
+ ###### ###### ###### ######
+ ###### ###### ###### ######
+ ###### ###### ###### ######
+
+
-###############################################################
+################################################################
+++ /dev/null
- ~~~~~~~ ~~ ~~ ~~ ~~~~~~~~ ~~~~~ ~~
- ~~ ~~ ~~ ~~ ~~ ~~ ~~ ~~
- ~~~~~ ~~~~~ ~~ ~~ ~~~~~~~ ~~
- ~~ ~~ ~~ ~~ ~~ ~~ ~~ ~~
- ~~~~~~~ ~~ ~~ ~~ ~~ ~~ ~~ ~~
-
-
-
-#######################################################