diff options
-rw-r--r-- | HTanks.hs | 19 |
1 files changed, 14 insertions, 5 deletions
@@ -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 () |