diff options
author | Matthias Schiffer <matthias@gamezock.de> | 2010-03-02 21:36:37 +0100 |
---|---|---|
committer | Matthias Schiffer <matthias@gamezock.de> | 2010-03-02 21:36:37 +0100 |
commit | 8586ef7b8502bc8be2f37026b6e443b5a6cf0868 (patch) | |
tree | 80cefe818017f90c1a34f4245d23fd5e7188aece /DefaultPlayer.hs | |
parent | d4db00ce9bce4410becfc4ee71264fc607b96c5b (diff) | |
download | htanks-8586ef7b8502bc8be2f37026b6e443b5a6cf0868.tar htanks-8586ef7b8502bc8be2f37026b6e443b5a6cf0868.zip |
New generic player implementation
Diffstat (limited to 'DefaultPlayer.hs')
-rw-r--r-- | DefaultPlayer.hs | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/DefaultPlayer.hs b/DefaultPlayer.hs new file mode 100644 index 0000000..351928f --- /dev/null +++ b/DefaultPlayer.hs @@ -0,0 +1,35 @@ +{-# LANGUAGE DeriveDataTypeable, PatternGuards #-} + +module DefaultPlayer ( DefaultPlayer(..) + ) where + + +import qualified Data.Set as S +import Data.Fixed +import Data.Ratio ((%)) +import Data.Typeable + +import GLDriver +import Player +import Tank + + +data DefaultPlayer = DefaultPlayer (S.Set Key) + deriving (Typeable, Show) + +instance Player DefaultPlayer where + playerMovement (DefaultPlayer keys) _ = playerMovement' keys + + handleEvent (DefaultPlayer keys) ev + | Just (KeyPressEvent key) <- fromEvent ev = DefaultPlayer $ S.insert key keys + | Just (KeyReleaseEvent key) <- fromEvent ev = DefaultPlayer $ S.delete key keys + | otherwise = DefaultPlayer keys + + +playerMovement' :: S.Set Key -> (DefaultPlayer, Maybe Micro, Bool) +playerMovement' keys = (DefaultPlayer keys, angle, move) + 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 |