1 module Render ( buildInitialState, ekitaiApp ) where
6 import Brick.Widgets.Core
7 import Graphics.Vty.Input.Events
9 import qualified Data.Vector as V
12 type ResourceName = String
14 data EkitaiState = EkitaiState
15 { ekitaiStateSim :: Simulation
18 ekitaiApp :: App EkitaiState e ResourceName
20 { appDraw = drawEkitai
21 , appChooseCursor = showFirstCursor
22 , appHandleEvent = handleEkitaiEvent
23 , appStartEvent = pure
24 , appAttrMap = const $ attrMap mempty []
27 buildInitialState :: Simulation -> IO EkitaiState
28 buildInitialState sim =
30 { ekitaiStateSim = sim
33 drawEkitai :: EkitaiState -> [Widget ResourceName]
34 -- drawEkitai state = [ vBox $ drawSim $ ekitaiStateSim state ]
35 drawEkitai state = [ vBox [str $ simToString $ ekitaiStateSim state] ]
37 handleEkitaiEvent :: EkitaiState -> BrickEvent n e -> EventM n (Next EkitaiState)
38 handleEkitaiEvent s e =
42 EvKey (KChar 'q') [] -> halt s
43 EvKey (KChar 's') [] -> continue s { ekitaiStateSim = physStep $ ekitaiStateSim s }