{-# LANGUAGE StrictData #-} {-# LANGUAGE TemplateHaskell #-} module Dodge.Data.Door ( module Dodge.Data.Door, module Dodge.Data.MountedObject, module Dodge.Data.PathGraph, module Dodge.Data.WorldEffect, ) where import Control.Lens import Data.Aeson import Data.Aeson.TH import Dodge.Data.MountedObject import Dodge.Data.PathGraph import Dodge.Data.WorldEffect import Geometry.Data import qualified Data.IntMap.Strict as IM --data DoorStatus = DoorOpen | DoorClosed | DoorHalfway | DoorInt Int -- deriving Eq data PushSource = PushesItself | PushedBy Int | NotPushed deriving Eq data Door = Door { _drID :: Int , _drTrigger :: WdBl , _drUpdate :: DoorUpdate , _drZeroPos :: (Point2,Float) , _drOnePos :: (Point2,Float) , _drLerp :: Float , _drFootPrint :: IM.IntMap (Point2,Point2) , _drHP :: Int , _drPushedBy :: PushSource , _drPushes :: Maybe Int , _drMounts :: [MountedObject] } data DoorUpdate = DoorDoNothing | DoorLerp {_drLerpSpeed :: Float} | DoorLerpWithTimer {_drLerpTimer :: Int, _drLerpSpeed :: Float} makeLenses ''Door makeLenses ''DoorUpdate --deriveJSON defaultOptions ''DoorStatus deriveJSON defaultOptions ''DoorUpdate deriveJSON defaultOptions ''PushSource deriveJSON defaultOptions ''Door