pinosaur
/
ekitaihs.git
/ blobdiff
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
docs
[ekitaihs.git]
/
Render.hs
diff --git
a/Render.hs
b/Render.hs
index
16fda2b
..
d6d967e
100644
(file)
--- a/
Render.hs
+++ b/
Render.hs
@@
-1,10
+1,15
@@
-module Render (
buildInitialState, ekitaiApp
) where
+module Render (
ekitaiMain
) where
import Brick.AttrMap
import Brick.Main
import Brick.Types
import Brick.Widgets.Core
import Brick.AttrMap
import Brick.Main
import Brick.Types
import Brick.Widgets.Core
-import Graphics.Vty.Input.Events
+import Brick.BChan (newBChan, writeBChan)
+import Graphics.Vty
+
+import Control.Monad (forever, void)
+import Control.Monad.IO.Class (liftIO)
+import Control.Concurrent (threadDelay, forkIO)
import qualified Data.Vector as V
import Sim
import qualified Data.Vector as V
import Sim
@@
-15,7
+20,10
@@
data EkitaiState = EkitaiState
{ ekitaiStateSim :: Simulation
} deriving (Show)
{ ekitaiStateSim :: Simulation
} deriving (Show)
-ekitaiApp :: App EkitaiState e ResourceName
+-- custom event
+data Tick = Tick
+
+ekitaiApp :: App EkitaiState Tick ResourceName
ekitaiApp = App
{ appDraw = drawEkitai
, appChooseCursor = showFirstCursor
ekitaiApp = App
{ appDraw = drawEkitai
, appChooseCursor = showFirstCursor
@@
-24,23
+32,29
@@
ekitaiApp = App
, appAttrMap = const $ attrMap mempty []
}
, appAttrMap = const $ attrMap mempty []
}
-buildInitialState :: IO EkitaiState
-buildInitialState =
+ekitaiMain sim timestep = do
+ chan <- newBChan 10
+ -- tick game
+ forkIO $ forever $ do
+ writeBChan chan Tick
+ threadDelay timestep
+ let buildVty = Graphics.Vty.mkVty Graphics.Vty.defaultConfig
+ initialVty <- buildVty
+ initialState <- buildInitialState sim
+ endState <- customMain initialVty buildVty (Just chan) ekitaiApp initialState
+ return 0
+
+buildInitialState :: Simulation -> IO EkitaiState
+buildInitialState sim =
pure EkitaiState
pure EkitaiState
- { ekitaiStateSim =
testS
im
+ { ekitaiStateSim =
s
im
}
drawEkitai :: EkitaiState -> [Widget ResourceName]
}
drawEkitai :: EkitaiState -> [Widget ResourceName]
--- drawEkitai state = [ vBox $ drawSim $ ekitaiStateSim state ]
drawEkitai state = [ vBox [str $ simToString $ ekitaiStateSim state] ]
drawEkitai state = [ vBox [str $ simToString $ ekitaiStateSim state] ]
-handleEkitaiEvent :: EkitaiState -> BrickEvent n e -> EventM n (Next EkitaiState)
-handleEkitaiEvent s e =
- case e of
- VtyEvent vtye ->
- case vtye of
- EvKey (KChar 'q') [] -> halt s
- EvKey (KChar 's') [] -> continue s { ekitaiStateSim = physStep $ ekitaiStateSim s }
- _ -> continue s
- _ -> continue s
+handleEkitaiEvent :: EkitaiState -> BrickEvent n Tick -> EventM n (Next EkitaiState)
+handleEkitaiEvent s (VtyEvent (EvKey (KChar 'q') [])) = halt s
+handleEkitaiEvent s (AppEvent Tick) = continue s { ekitaiStateSim = physStep $ ekitaiStateSim s }
+handleEkitaiEvent s _ = continue s