78 lines
1.8 KiB
Haskell
78 lines
1.8 KiB
Haskell
{-# LANGUAGE TemplateHaskell #-}
|
|
{-# LANGUAGE StrictData #-}
|
|
module Dodge.Data.Room where
|
|
import Geometry
|
|
|
|
import qualified Data.Set as S
|
|
import Control.Lens
|
|
|
|
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 CardinalPoint
|
|
= North
|
|
| East
|
|
| South
|
|
| West
|
|
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
|