44module Component (mkComponent ) where
55
66import Data.IntSet qualified as IS
7- import Language.Javascript.JSaddle (JSM , liftJSM , FromJSVal (.. ), ToJSVal (.. ))
7+ import Language.Javascript.JSaddle (liftJSM , FromJSVal (.. ), ToJSVal (.. ))
88import Miso
99import Miso.Canvas as Canvas
1010import Miso.Lens
@@ -14,7 +14,7 @@ import Miso.Html.Property as P
1414import Miso.CSS as CSS
1515
1616import Model
17- import World
17+ import Game
1818
1919-------------------------------------------------------------------------------
2020-- params
@@ -44,25 +44,29 @@ updateModel ActionSayHelloWorld =
4444
4545updateModel (ActionKey keys)
4646 | IS. member 37 keys = do
47- modelPos %= over _1 ( subtract 1 )
48- io_ $ consoleLog " left "
47+ modelGame %= playMove MoveUp
48+ modelNbMoves += 1
4949 | IS. member 38 keys = do
50- modelPos %= over _2 ( subtract 1 )
51- io_ $ consoleLog " up "
50+ modelGame %= playMove MoveLeft
51+ modelNbMoves += 1
5252 | IS. member 39 keys = do
53- modelPos %= over _1 ( + 1 )
54- io_ $ consoleLog " right "
53+ modelGame %= playMove MoveDown
54+ modelNbMoves += 1
5555 | IS. member 40 keys = do
56- modelPos %= over _2 ( + 1 )
57- io_ $ consoleLog " down "
56+ modelGame %= playMove MoveRight
57+ modelNbMoves += 1
5858 | otherwise = pure ()
5959
6060-------------------------------------------------------------------------------
6161-- resources
6262-------------------------------------------------------------------------------
6363
6464data Resources = Resources
65- { _resEmpty :: Image
65+ { _resBox1 :: Image
66+ , _resBox2 :: Image
67+ , _resEmpty :: Image
68+ , _resPlayer :: Image
69+ , _resTarget :: Image
6670 , _resWall :: Image
6771 }
6872
@@ -71,16 +75,13 @@ instance ToJSVal Resources where
7175
7276instance FromJSVal Resources where
7377 fromJSVal v = do
74- [empty', wall' ] <- fromJSValUnchecked v
75- pure $ Just $ Resources empty' wall'
78+ [b1, b2, e, p, t, w ] <- fromJSValUnchecked v
79+ pure $ Just $ Resources b1 b2 e p t w
7680
7781-------------------------------------------------------------------------------
7882-- view
7983-------------------------------------------------------------------------------
8084
81- assetSizeD :: Double
82- assetSizeD = fromIntegral assetSize
83-
8485viewModel :: Model -> View Model Action
8586viewModel m =
8687 div_ []
@@ -95,26 +96,40 @@ viewModel m =
9596
9697initCanvas :: DOMRef -> Canvas Resources
9798initCanvas _ = liftJSM $
98- Resources <$> newImage (assetsUrl <> " empty.png" )
99+ Resources <$> newImage (assetsUrl <> " box1.png" )
100+ <*> newImage (assetsUrl <> " box2.png" )
101+ <*> newImage (assetsUrl <> " empty.png" )
102+ <*> newImage (assetsUrl <> " player.png" )
103+ <*> newImage (assetsUrl <> " target.png" )
99104 <*> newImage (assetsUrl <> " wall.png" )
100105
101106drawCanvas :: Model -> Resources -> Canvas ()
102107drawCanvas Model {.. } Resources {.. } = do
103108 globalCompositeOperation DestinationOver
104109 clearRect (0 , 0 , 300 , 300 )
105- let (i, j) = _modelPos
106- drawImage (_resWall, fromIntegral (assetSize* i), fromIntegral (assetSize* j))
107- fillStyle (Canvas. color CSS. red)
108- fillRect (0 , 0 , 300 , 300 )
110+
111+ forGame _modelGame $ \ ij c -> do
112+ let (x, y) = ij2xy ij
113+ case c of
114+ CellT -> drawImage (_resTarget, x, y)
115+ CellW -> drawImage (_resWall, x, y)
116+ _ -> drawImage (_resEmpty, x, y)
117+
118+ let (xp, yp) = _modelGame & _gameCurrentPos & ij2xy
119+ drawImage (_resPlayer, xp, yp)
120+
121+ ij2xy :: (Int , Int ) -> (Double , Double )
122+ ij2xy (i, j) = (fromIntegral (assetSize* j), fromIntegral (assetSize* i))
109123
110124-------------------------------------------------------------------------------
111125-- component
112126-------------------------------------------------------------------------------
113127
114128mkComponent :: App Model Action
115129mkComponent =
116- (component mkModel updateModel viewModel)
117- { subs = [ keyboardSub ActionKey ]
118- , logLevel = DebugAll
119- }
130+ let initialMode = mkModel 1
131+ in (component initialMode updateModel viewModel)
132+ { subs = [ keyboardSub ActionKey ]
133+ , logLevel = DebugAll
134+ }
120135
0 commit comments