summaryrefslogtreecommitdiffstats
path: root/src/DefaultPlayer.hs
diff options
context:
space:
mode:
authorMatthias Schiffer <mschiffer@universe-factory.net>2011-06-24 21:50:32 +0200
committerMatthias Schiffer <mschiffer@universe-factory.net>2011-06-24 21:50:32 +0200
commit83f0606ea9dfd6b493097dc97330055dff4a2867 (patch)
tree464d7f3ed2c02f48b6463d1528e3e0b5f50e79c6 /src/DefaultPlayer.hs
parentd7971385e844e24d9d851d3d142895b5cb89c91b (diff)
downloadhtanks-83f0606ea9dfd6b493097dc97330055dff4a2867.tar
htanks-83f0606ea9dfd6b493097dc97330055dff4a2867.zip
Added Transformable class to simplify collision calculation
Diffstat (limited to 'src/DefaultPlayer.hs')
-rw-r--r--src/DefaultPlayer.hs15
1 files changed, 8 insertions, 7 deletions
diff --git a/src/DefaultPlayer.hs b/src/DefaultPlayer.hs
index e16502a..00dce95 100644
--- a/src/DefaultPlayer.hs
+++ b/src/DefaultPlayer.hs
@@ -16,8 +16,9 @@ import Graphics.Rendering.OpenGL.GL.VertexSpec
import Tank
import GLDriver
import Player
-
-
+import Vector
+import Transformable (Coord)
+import Data.VectorSpace
data DefaultPlayer = DefaultPlayer (S.Set Key) Float Float Bool
deriving (Typeable, Show)
@@ -26,12 +27,12 @@ instance Player DefaultPlayer where
playerUpdate (DefaultPlayer keys aimx aimy shoot) tank =
let x = (if (S.member KeyLeft keys) then (-1) else 0) + (if (S.member KeyRight keys) then 1 else 0)
y = (if (S.member KeyDown keys) then (-1) else 0) + (if (S.member KeyUp keys) then 1 else 0)
- ax = aimx - (fromRational . toRational . tankX $ tank)
- ay = aimy - (fromRational . toRational . tankY $ tank)
+ ax = realToFrac $ aimx - (fromRational . toRational . tankX $ tank)
+ ay = realToFrac $ aimy - (fromRational . toRational . tankY $ tank)
move = (x /= 0 || y /= 0)
- angle = if move then Just $ fromRational $ round ((atan2 y x)*1000000*180/pi)%1000000 else Nothing
- aangle = if (ax /= 0 || ay /= 0) then Just $ fromRational $ round ((atan2 ay ax)*1000000*180/pi)%1000000 else Nothing
- in return (DefaultPlayer keys aimx aimy False, angle, move, aangle, shoot)
+ dir = if move then Just (normalized $ Vector x y) else Nothing
+ adir = if (ax /= 0 || ay /= 0) then Just (normalized $ Vector ax ay) else Nothing
+ in return (DefaultPlayer keys aimx aimy False, dir, move, adir, shoot)
handleEvent (DefaultPlayer keys aimx aimy shoot) ev
| Just (KeyPressEvent key) <- fromEvent ev = DefaultPlayer (S.insert key keys) aimx aimy shoot