diff options
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 |