diff options
Diffstat (limited to 'HTanks.hs')
-rw-r--r-- | HTanks.hs | 21 |
1 files changed, 14 insertions, 7 deletions
@@ -3,7 +3,6 @@ import Game import Level import Render -import Tank import Player import CPUPlayer import DefaultPlayer @@ -45,12 +44,12 @@ main = do when (initialized gl) $ do currentTime <- getCurrentTime let mainState = MainState {run = True, driver = SomeDriver gl, time = currentTime, players = - [ SomePlayer $ DefaultPlayer S.empty 0 0 + [ SomePlayer $ DefaultPlayer S.empty 0 0 False , SomePlayer $ CPUPlayer 0 ]} - gameState = GameState {level = theLevel, tanks = [ Tank 5.0 5.0 0 0 2 270 False - , Tank 5.0 3.5 0 0 2 270 False - ], textures = M.empty} + gameState = GameState {level = theLevel, tanks = [ Tank 5.0 5.0 0 0 2 270 False 3 2 + , Tank 5.0 3.5 0 0 2 270 False 3 2 + ], shoots = [], textures = M.empty} runGame gameState $ do setup @@ -148,6 +147,14 @@ updateTank angle move aangle = do modify $ \tank -> tank {moving = False} +updateShoot :: State Shoot () +updateShoot = modify $ \shoot -> + let angle = (fromRational . toRational . shootDir $ shoot)*pi/180 + dx = (shootSpeed shoot) * fromRational (round ((cos angle)*1000)%1000000) + dy = (shootSpeed shoot) * fromRational (round ((sin angle)*1000)%1000000) + in shoot {shootX = dx + shootX shoot, shootY = dy + shootY shoot} + + simulationStep :: Main () simulationStep = do oldplayers <- gets players @@ -156,9 +163,9 @@ simulationStep = do let pt = unzip $ map updateTank' $ zip oldplayers oldtanks modify $ \state -> state {players = fst pt} - lift $ modify $ \state -> state {tanks = snd pt} + lift $ modify $ \state -> state {tanks = snd pt, shoots = map (execState updateShoot) $ shoots state} where - updateTank' (player, tank) = let (p, angle, move, aangle) = playerUpdate player tank + updateTank' (player, tank) = let (p, angle, move, aangle, shoot) = playerUpdate player tank t = execState (updateTank angle move aangle) tank in (p, t) |