summaryrefslogtreecommitdiffstats
path: root/DefaultPlayer.hs
diff options
context:
space:
mode:
authorMatthias Schiffer <matthias@gamezock.de>2010-03-05 04:38:31 +0100
committerMatthias Schiffer <matthias@gamezock.de>2010-03-05 04:38:31 +0100
commit0fb75af68220527fb10ab0ce39e35f61cba67e4c (patch)
tree6bc7dd114daa0b74cb7d25743741de90dfc5a768 /DefaultPlayer.hs
parent1020310190063279b7951e44d8ae21fe3a623aa3 (diff)
downloadhtanks-0fb75af68220527fb10ab0ce39e35f61cba67e4c.tar
htanks-0fb75af68220527fb10ab0ce39e35f61cba67e4c.zip
Aim with mouse in DefaultPlayer
Diffstat (limited to 'DefaultPlayer.hs')
-rw-r--r--DefaultPlayer.hs26
1 files changed, 13 insertions, 13 deletions
diff --git a/DefaultPlayer.hs b/DefaultPlayer.hs
index d1c1e24..6f80096 100644
--- a/DefaultPlayer.hs
+++ b/DefaultPlayer.hs
@@ -14,22 +14,22 @@ import Player
import Tank
-data DefaultPlayer = DefaultPlayer (S.Set Key) Micro Micro
+data DefaultPlayer = DefaultPlayer (S.Set Key) Float Float
deriving (Typeable, Show)
instance Player DefaultPlayer where
- playerUpdate (DefaultPlayer keys aimx aimy) tank = playerUpdate' keys aimx aimy tank
+ playerUpdate (DefaultPlayer keys aimx aimy) 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 $ posx tank)
+ ay = aimy - (fromRational . toRational $ posy 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 (DefaultPlayer keys aimx aimy, angle, move, aangle)
handleEvent (DefaultPlayer keys aimx aimy) ev
- | Just (KeyPressEvent key) <- fromEvent ev = DefaultPlayer (S.insert key keys) aimx aimy
- | Just (KeyReleaseEvent key) <- fromEvent ev = DefaultPlayer (S.delete key keys) aimx aimy
+ | Just (KeyPressEvent key) <- fromEvent ev = DefaultPlayer (S.insert key keys) aimx aimy
+ | Just (KeyReleaseEvent key) <- fromEvent ev = DefaultPlayer (S.delete key keys) aimx aimy
+ | Just (MouseMotionEvent x y) <- fromEvent ev = DefaultPlayer keys x y
| otherwise = DefaultPlayer keys aimx aimy
-
-
-playerUpdate' :: S.Set Key -> Micro -> Micro -> Tank -> (DefaultPlayer, Maybe Micro, Bool, Maybe Micro)
-playerUpdate' keys aimx aimy tank = (DefaultPlayer keys aimx aimy, angle, move, Nothing)
- where
- 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)
- move = (x /= 0 || y /= 0)
- angle = if move then Just $ fromRational $ round ((atan2 y x)*1000000*180/pi)%1000000 else Nothing