summaryrefslogtreecommitdiffstats
path: root/HTanks.hs
diff options
context:
space:
mode:
Diffstat (limited to 'HTanks.hs')
-rw-r--r--HTanks.hs21
1 files changed, 14 insertions, 7 deletions
diff --git a/HTanks.hs b/HTanks.hs
index c75aba2..7c648c1 100644
--- a/HTanks.hs
+++ b/HTanks.hs
@@ -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)