48 lines
1.4 KiB
Haskell
48 lines
1.4 KiB
Haskell
{-# 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
|