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