very bsaic rendering done
authorDaniel Liu <mr.picklepinosaur@gmail.com>
Sat, 1 May 2021 21:13:03 +0000 (17:13 -0400)
committerDaniel Liu <mr.picklepinosaur@gmail.com>
Sat, 1 May 2021 21:13:03 +0000 (17:13 -0400)
Render.hs
Sim.hs
readme.md

index fc321f6..37a8e0a 100644 (file)
--- a/Render.hs
+++ b/Render.hs
@@ -6,10 +6,14 @@ import Brick.Types
 import Brick.Widgets.Core
 import Graphics.Vty.Input.Events
 
+import qualified Data.Vector as V
+import Sim
+
 type ResourceName = String
 
-data EkitaiState =
-    EkitaiState deriving (Show)
+data EkitaiState = EkitaiState
+    { ekitaiStateSim           :: Simulation
+    } deriving (Show)
 
 ekitaiApp :: App EkitaiState e ResourceName
 ekitaiApp = App
@@ -21,10 +25,14 @@ ekitaiApp = App
     }
 
 buildInitialState :: IO EkitaiState
-buildInitialState = pure EkitaiState
+buildInitialState =
+    pure EkitaiState
+    { ekitaiStateSim = testSim
+    }
 
 drawEkitai :: EkitaiState -> [Widget ResourceName]
-drawEkitai state = []
+-- drawEkitai state = [ vBox $ drawSim $ ekitaiStateSim state ]
+drawEkitai state = [ vBox [str $ simToString $ ekitaiStateSim state] ]
 
 handleEkitaiEvent :: EkitaiState -> BrickEvent n e -> EventM n (Next EkitaiState)
 handleEkitaiEvent s e =
diff --git a/Sim.hs b/Sim.hs
index c48dbe4..26fc5f1 100644 (file)
--- a/Sim.hs
+++ b/Sim.hs
@@ -1,4 +1,8 @@
-module Sim ( initSimSpace, testSim, physStep, updateWaterChunk, validDirects ) where
+module Sim (
+    Simulation, simSpace,
+    ChunkType, ChunkData, chunkType,
+    initSimSpace, testSim, physStep, updateWaterChunk, validDirects, simToString 
+) where
 
 import Debug.Trace
 import           Data.Vector ((!), (//))
@@ -66,3 +70,21 @@ validDirects x y w h = filter
     (\q -> 0 <= (fst q) && (fst q) < w && (snd q) <= 0 && (snd q) < h)
     [(a-x,b-y) | a <- [x-1..x+1], b <- [y-1..y+1], not (a==x && b==y)]
 
+simToString :: Simulation -> [Char]
+simToString sim@Simulation{simW=w} = 
+    let simStr = V.toList $ V.map chunkToChar $ simSpace sim
+    in 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]
+insert n y xs = countdown n xs where
+   countdown 0 xs = y:countdown n xs
+   countdown _ [] = []
+   countdown m (x:xs) = x:countdown (m-1) xs
+
+chunkToChar :: ChunkData -> Char
+chunkToChar c =
+    case chunkType c of
+        Water -> '~'
+        Air -> '.'
+        _ -> '?'
index fe7c77e..87d051c 100644 (file)
--- a/readme.md
+++ b/readme.md
@@ -10,8 +10,10 @@ this will be incredibly painful
 
 ## FAQ
 **why ekitai?**
+
 ekitai is fluid in japanese. since naming your projects in a different language is apparently cool.
 
 **why not in c?**
+
 c would have probably been one of the best choices to do this project in, but i wanted to add a bit of challenge by using a language that i didn't know.