diff options
author | Matthias Schiffer <matthias@gamezock.de> | 2010-03-05 04:38:31 +0100 |
---|---|---|
committer | Matthias Schiffer <matthias@gamezock.de> | 2010-03-05 04:38:31 +0100 |
commit | 0fb75af68220527fb10ab0ce39e35f61cba67e4c (patch) | |
tree | 6bc7dd114daa0b74cb7d25743741de90dfc5a768 /DefaultPlayer.hs | |
parent | 1020310190063279b7951e44d8ae21fe3a623aa3 (diff) | |
download | htanks-0fb75af68220527fb10ab0ce39e35f61cba67e4c.tar htanks-0fb75af68220527fb10ab0ce39e35f61cba67e4c.zip |
Aim with mouse in DefaultPlayer
Diffstat (limited to 'DefaultPlayer.hs')
-rw-r--r-- | DefaultPlayer.hs | 26 |
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 |