diff options
Diffstat (limited to 'HTanks.hs')
-rw-r--r-- | HTanks.hs | 16 |
1 files changed, 9 insertions, 7 deletions
@@ -39,10 +39,11 @@ main = do when (initialized gl) $ do currentTime <- getCurrentTime let mainState = MainState {run = True, driver = SomeDriver gl, time = currentTime, keyset = S.empty} - gameState = GameState {level = testLevel, tanks = [Tank 0.0 0.0 0 0]} + gameState = GameState {level = testLevel, tanks = [Tank 0.0 0.0 0 0 2]} - setup 800 600 - runGame gameState $ runMain mainState $ mainLoop + runGame gameState $ do + setup 800 600 + runMain mainState mainLoop deinitGL gl @@ -90,10 +91,11 @@ simulationStep = do when (lengthsq /= 0) $ do let length = sqrt lengthsq - let dx = fromRational (round (x*1000/length)%1000000) - dy = fromRational (round (y*1000/length)%1000000) - oldtank <- lift $ gets (head . tanks) + + let dx = (speed oldtank) * fromRational (round (x*1000/length)%1000000) + dy = (speed oldtank) * fromRational (round (y*1000/length)%1000000) + let tank = oldtank {posx = dx + posx oldtank, posy = dy + posy oldtank} lift $ modify $ \state -> state {tanks = tank:(tail . tanks $ state)} @@ -107,7 +109,7 @@ handleEvents = do handleEvent :: SomeEvent -> Main () handleEvent ev - | Just (ResizeEvent w h) <- fromEvent ev = liftIO $ resize w h + | Just (ResizeEvent w h) <- fromEvent ev = lift $ resize w h | Just (KeyPressEvent key) <- fromEvent ev = modify $ \state -> state {keyset = S.insert key (keyset state)} | Just (KeyReleaseEvent key) <- fromEvent ev = modify $ \state -> state {keyset = S.delete key (keyset state)} | Just QuitEvent <- fromEvent ev = modify $ \state -> state {run = False} |