summaryrefslogtreecommitdiffstats
path: root/src/Player.hs
blob: 59076dd1c88b156481f3041b88f0cad196598a64 (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, Bool)
    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, shoot) = playerUpdate player tank
        in (SomePlayer p, angle, move, aangle, shoot)
    handleEvent (SomePlayer player) event = SomePlayer $ handleEvent player event