Renamed shoot to bullet
This commit is contained in:
parent
7327695ca3
commit
89e87826a8
3 changed files with 36 additions and 36 deletions
|
@ -49,7 +49,7 @@ main = do
|
|||
]}
|
||||
gameState = GameState {level = theLevel, tanks = [ Tank 5.0 5.0 0 0 2 270 False 3 2 5
|
||||
, Tank 5.0 3.5 0 0 2 270 False 3 2 5
|
||||
], shoots = [], textures = M.empty}
|
||||
], bullets = [], textures = M.empty}
|
||||
|
||||
runGame gameState $ do
|
||||
setup
|
||||
|
@ -147,14 +147,14 @@ updateTank angle move aangle = do
|
|||
modify $ \tank -> tank {tankMoving = False}
|
||||
|
||||
|
||||
updateShoot :: State Shoot ()
|
||||
updateShoot = do
|
||||
angle <- gets shootDir >>= return . (/180) . (*pi) . fromRational . toRational
|
||||
speed <- gets shootSpeed
|
||||
updateBullet :: State Bullet ()
|
||||
updateBullet = do
|
||||
angle <- gets bulletDir >>= return . (/180) . (*pi) . fromRational . toRational
|
||||
speed <- gets bulletSpeed
|
||||
let dx = speed * fromRational (round ((cos angle)*1000)%1000000)
|
||||
dy = speed * fromRational (round ((sin angle)*1000)%1000000)
|
||||
|
||||
modify $ \shoot -> shoot {shootX = dx + shootX shoot, shootY = dy + shootY shoot}
|
||||
modify $ \bullet -> bullet {bulletX = dx + bulletX bullet, bulletY = dy + bulletY bullet}
|
||||
|
||||
|
||||
simulationStep :: Main ()
|
||||
|
@ -164,24 +164,24 @@ simulationStep = do
|
|||
|
||||
let (p, t, s) = unzip3 $ map updateTank' $ zip oldplayers oldtanks
|
||||
ts = zip3 t s [0..]
|
||||
shootingtanks = map (\(tank, _, n) -> (tank, n)) $ filter (\(tank, shoot, _) -> shoot && (tankShootsLeft tank) > 0) $ ts
|
||||
newtanks = map (\(tank, shoot, _) -> if shoot then tank {tankShootsLeft = (tankShootsLeft tank) - 1} else tank) $ ts
|
||||
newshoots = map (\(tank, n) -> Shoot
|
||||
{ shootX = tankX tank
|
||||
, shootY = tankY tank
|
||||
, shootDir = tankAim tank
|
||||
, shootSpeed = tankShootSpeed tank
|
||||
, shootBouncesLeft = tankShootBounces tank
|
||||
, shootTank = n
|
||||
}) shootingtanks
|
||||
bulletingtanks = map (\(tank, _, n) -> (tank, n)) $ filter (\(tank, bullet, _) -> bullet && (tankBulletsLeft tank) > 0) $ ts
|
||||
newtanks = map (\(tank, bullet, _) -> if bullet then tank {tankBulletsLeft = (tankBulletsLeft tank) - 1} else tank) $ ts
|
||||
newbullets = map (\(tank, n) -> Bullet
|
||||
{ bulletX = tankX tank
|
||||
, bulletY = tankY tank
|
||||
, bulletDir = tankAim tank
|
||||
, bulletSpeed = tankBulletSpeed tank
|
||||
, bulletBouncesLeft = tankBulletBounces tank
|
||||
, bulletTank = n
|
||||
}) bulletingtanks
|
||||
|
||||
|
||||
modify $ \state -> state {players = p}
|
||||
lift $ modify $ \state -> state {tanks = newtanks, shoots = map (execState updateShoot) (shoots state ++ newshoots)}
|
||||
lift $ modify $ \state -> state {tanks = newtanks, bullets = map (execState updateBullet) (newbullets ++ bullets state)}
|
||||
where
|
||||
updateTank' (player, tank) = let (p, angle, move, aangle, shoot) = playerUpdate player tank
|
||||
updateTank' (player, tank) = let (p, angle, move, aangle, bullet) = playerUpdate player tank
|
||||
t = execState (updateTank angle move aangle) tank
|
||||
in (p, t, shoot)
|
||||
in (p, t, bullet)
|
||||
|
||||
|
||||
handleEvents :: Main ()
|
||||
|
|
Reference in a new issue