This repository has been archived on 2025-03-03. You can view files and clone it, but cannot push or open issues or pull requests.
htanks/Player.hs

26 lines
681 B
Haskell
Raw Normal View History

2010-03-02 21:36:37 +01:00
{-# 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