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 /Player.hs | |
parent | d4db00ce9bce4410becfc4ee71264fc607b96c5b (diff) | |
download | htanks-8586ef7b8502bc8be2f37026b6e443b5a6cf0868.tar htanks-8586ef7b8502bc8be2f37026b6e443b5a6cf0868.zip |
New generic player implementation
Diffstat (limited to 'Player.hs')
-rw-r--r-- | Player.hs | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/Player.hs b/Player.hs new file mode 100644 index 0000000..f3303f8 --- /dev/null +++ b/Player.hs @@ -0,0 +1,25 @@ +{-# LANGUAGE ExistentialQuantification, DeriveDataTypeable #-} + +module Player ( Player(..) + , SomePlayer(..) + ) where + +import Data.Fixed +import Data.Typeable + +import Tank +import GLDriver (SomeEvent) + + +class Player a where + playerMovement :: a -> Tank -> (a, Maybe Micro, Bool) + handleEvent :: a -> SomeEvent -> a + + handleEvent player _ = player + + +data SomePlayer = forall a. Player a => SomePlayer a + +instance Player SomePlayer where + playerMovement (SomePlayer player) tank = (\(p, angle, move) -> (SomePlayer p, angle, move)) $ playerMovement player tank + handleEvent (SomePlayer player) event = SomePlayer $ handleEvent player event |