26 lines
681 B
Haskell
26 lines
681 B
Haskell
![]() |
{-# 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
|