{-# LANGUAGE StrictData #-} {-# LANGUAGE TemplateHaskell #-} module Dodge.Data.Room ( module Dodge.Data.Room, module Dodge.Data.CardinalPoint, ) where import Control.Lens import qualified Data.Set as S import Dodge.Data.CardinalPoint import Geometry data RoomPos = RoomPos { _rpPos :: Point2 , _rpDir :: Float , _rpType :: S.Set RoomPosType , _rpLinkStatus :: RPLinkStatus , _rpPlacementUse :: Int } deriving (Eq, Ord, Show) data RoomLink = RoomLink { _rlType :: S.Set RoomLinkType , _rlPos :: Point2 , _rlDir :: Float } deriving (Eq, Ord) data RoomType = DefaultRoomType | RectRoomType { _numLinkEW :: Int , _numLinkNS :: Int , _linkGapEW :: Float , _linkGapNS :: Float , _rmWidth :: Float , _rmHeight :: Float } deriving (Eq, Ord) data RoomLinkType = OutLink | InLink | LabLink Int | OnEdge CardinalPoint | FromEdge CardinalPoint Int | BlockedLink deriving (Eq, Ord, Show) data RoomWire = --RoomWire Point2 Float WallWire Point2 Float Float data RPLinkStatus = UsedOutLink { _rplsType :: S.Set RoomLinkType , _rplsChildNum :: Int , _rplsOutRoomID :: Int } | UsedInLink { _rplsType :: S.Set RoomLinkType , _rplsInRoomID :: Int } | UnusedLink {_rplsType :: S.Set RoomLinkType} | NotLink deriving (Eq, Ord, Show) data PathFromEdge = PathFromEdge CardinalPoint Int deriving (Eq, Ord, Show) data RoomPosType = RoomPosOnPath {_onPathFromEdges :: S.Set PathFromEdge} | RoomPosOffPath {_offPathFromEdges :: S.Set PathFromEdge} | RoomPosExLink | RoomPosLab Int deriving (Eq, Ord, Show) makeLenses ''RoomLink makeLenses ''RoomPos makeLenses ''RoomPosType makeLenses ''RPLinkStatus