summaryrefslogtreecommitdiffstats
path: root/Player.hs
blob: 5c41841a2cb459c835a31d69bffe4f8239365f98 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
{-# LANGUAGE ExistentialQuantification, DeriveDataTypeable #-}

module Player ( Player(..)
              , SomePlayer(..)
              ) where

import Data.Fixed
import Data.Typeable

import Tank
import GLDriver (SomeEvent)


class Player a where
    playerUpdate :: a -> Tank -> (a, Maybe Micro, Bool, Maybe Micro)
    handleEvent :: a -> SomeEvent -> a
    
    handleEvent player _ = player


data SomePlayer = forall a. Player a => SomePlayer a

instance Player SomePlayer where
    playerUpdate (SomePlayer player) tank = 
        let (p, angle, move, aangle) = playerUpdate player tank
        in (SomePlayer p, angle, move, aangle)
    handleEvent (SomePlayer player) event = SomePlayer $ handleEvent player event