summaryrefslogtreecommitdiffstats
path: root/HTanks.hs
diff options
context:
space:
mode:
Diffstat (limited to 'HTanks.hs')
-rw-r--r--HTanks.hs16
1 files changed, 9 insertions, 7 deletions
diff --git a/HTanks.hs b/HTanks.hs
index 77684e4..27b5755 100644
--- a/HTanks.hs
+++ b/HTanks.hs
@@ -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}