{-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE TemplateHaskell #-} {-# LANGUAGE StrictData #-} module Dodge.Data.Door where import GHC.Generics import Data.Aeson import Dodge.Data.PathGraph import Dodge.Data.MountedObject import Geometry.Data import Dodge.Data.WorldEffect import qualified Data.IntSet as IS import Control.Lens data DoorStatus = DoorOpen | DoorClosed | DoorHalfway | DoorInt Int deriving (Eq, Ord, Show,Read,Generic) instance ToJSON DoorStatus where toEncoding = genericToEncoding defaultOptions instance FromJSON DoorStatus data PushSource = PushesItself | PushedBy Int | NotPushed deriving (Eq,Ord,Show,Read,Generic) instance ToJSON PushSource where toEncoding = genericToEncoding defaultOptions instance FromJSON PushSource data Door = Door { _drID :: Int , _drWallIDs :: IS.IntSet , _drStatus :: DoorStatus , _drTrigger :: WdBl , _drMech :: DrWdWd , _drPos :: (Point2,Point2) , _drOpenPos :: (Point2,Point2) , _drClosePos :: (Point2,Point2) , _drHP :: Int , _drDeath :: DrWdWd , _drSpeed :: Float , _drPushedBy :: PushSource , _drPushes :: Maybe Int , _drMounts :: [MountedObject] , _drObstructs :: [(Int,Int,PathEdge)] , _drObstacleType :: EdgeObstacle } deriving (Eq,Ord,Show,Read,Generic) instance ToJSON Door where toEncoding = genericToEncoding defaultOptions instance FromJSON Door makeLenses ''Door