summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--HTanks.hs19
1 files changed, 14 insertions, 5 deletions
diff --git a/HTanks.hs b/HTanks.hs
index 7c648c1..ace90d3 100644
--- a/HTanks.hs
+++ b/HTanks.hs
@@ -160,14 +160,23 @@ simulationStep = do
oldplayers <- gets players
oldtanks <- lift $ gets tanks
- let pt = unzip $ map updateTank' $ zip oldplayers oldtanks
-
- modify $ \state -> state {players = fst pt}
- lift $ modify $ \state -> state {tanks = snd pt, shoots = map (execState updateShoot) $ shoots state}
+ let (p, t, s) = unzip3 $ map updateTank' $ zip oldplayers oldtanks
+ shootingtanks = map fst $ filter snd $ zip t s
+ newshoots = map (\tank -> Shoot
+ {shootX = posx tank
+ , shootY = posy tank
+ , shootDir = aim tank
+ , shootSpeed = tankShootSpeed tank
+ , bouncesLeft = tankShootBounces tank
+ }) shootingtanks
+
+
+ modify $ \state -> state {players = p}
+ lift $ modify $ \state -> state {tanks = t, shoots = map (execState updateShoot) (shoots state ++ newshoots)}
where
updateTank' (player, tank) = let (p, angle, move, aangle, shoot) = playerUpdate player tank
t = execState (updateTank angle move aangle) tank
- in (p, t)
+ in (p, t, shoot)
handleEvents :: Main ()