summaryrefslogtreecommitdiffstats
path: root/HTanks.hs
diff options
context:
space:
mode:
Diffstat (limited to 'HTanks.hs')
-rw-r--r--HTanks.hs20
1 files changed, 11 insertions, 9 deletions
diff --git a/HTanks.hs b/HTanks.hs
index 1f6ac11..1bbae03 100644
--- a/HTanks.hs
+++ b/HTanks.hs
@@ -44,7 +44,7 @@ main = do
when (initialized gl) $ do
currentTime <- getCurrentTime
let mainState = MainState {run = True, driver = SomeDriver gl, time = currentTime, players =
- [ SomePlayer $ DefaultPlayer S.empty
+ [ SomePlayer $ DefaultPlayer S.empty 0 0
, SomePlayer $ CPUPlayer 0
]}
gameState = GameState {level = testLevel, tanks = [ Tank 0.0 0.0 0 0 2 360 False
@@ -52,7 +52,7 @@ main = do
], textures = M.empty}
runGame gameState $ do
- setup 800 600
+ setup
runMain mainState mainLoop
deinitGL gl
@@ -123,11 +123,14 @@ updateAngle angle = do
modify $ \tank -> tank {dir = newangle180}
-updateTank :: Maybe Micro -> Bool -> State Tank ()
-updateTank angle move = do
+updateTank :: Maybe Micro -> Bool -> Maybe Micro -> State Tank ()
+updateTank angle move aangle = do
when (isJust angle) $
updateAngle $ fromJust angle
-
+
+ when (isJust aangle) $
+ modify $ \tank -> tank {aim = fromJust aangle}
+
when move $ do
tdir <- gets dir
tspeed <- gets speed
@@ -154,8 +157,8 @@ simulationStep = do
modify $ \state -> state {players = fst pt}
lift $ modify $ \state -> state {tanks = snd pt}
where
- updateTank' (player, tank) = let (p, angle, move) = playerMovement player tank
- t = execState (updateTank angle move) tank
+ updateTank' (player, tank) = let (p, angle, move, aangle) = playerUpdate player tank
+ t = execState (updateTank angle move aangle) tank
in (p, t)
@@ -169,6 +172,5 @@ handleEvents = do
handleEvent :: SomeEvent -> Main ()
handleEvent ev
- | Just (ResizeEvent w h) <- fromEvent ev = lift $ resize w h
- | Just QuitEvent <- fromEvent ev = modify $ \state -> state {run = False}
+ | Just QuitEvent <- fromEvent ev = modify $ \state -> state {run = False}
| otherwise = return ()