{-# LANGUAGE MultiParamTypeClasses #-} {-# LANGUAGE TypeSynonymInstances #-} {-# LANGUAGE FlexibleInstances #-} module Types.ObjClass where import Affection import Data.Ecstasy import Types.Entity import Types.UserData import Types.Direction class ObjectAction otype ostate where objectAction :: [(Ent, V2 Double, Direction, Word)] -> Double -> otype -> ostate -> Ent -> SystemT Entity (AffectionState (AffectionData UserData) IO) () objectTransition :: otype -> ostate -> Bool -> Ent -> Maybe Ent -> SystemT Entity (AffectionState (AffectionData UserData) IO) (Entity 'SetterOf) class ActionTime otype ostate where actionTime :: otype -> ostate -> Double