111 lines
2.7 KiB
Haskell
111 lines
2.7 KiB
Haskell
module Types.Interior where
|
|
|
|
import Data.Matrix as M
|
|
|
|
import Linear.V2
|
|
|
|
-- internal imports
|
|
|
|
import Types.Map
|
|
import Types.UserData
|
|
|
|
data Cluster
|
|
= ClusterBox1
|
|
| ClusterTable1
|
|
| ClusterTable2
|
|
| ClusterTable3
|
|
| ClusterTable4
|
|
| ClusterCornerTable
|
|
| ClusterTableGroup
|
|
deriving (Enum, Bounded)
|
|
|
|
clusterMat :: Cluster -> Matrix (Maybe ImgId)
|
|
clusterMat ClusterBox1 =
|
|
M.fromLists
|
|
-- [ [ Nothing]
|
|
[ [Just ImgMiscBox1]
|
|
-- , [Nothing, Nothing, Nothing]
|
|
]
|
|
clusterMat ClusterTable1 =
|
|
M.fromLists
|
|
[[Just ImgEmpty, Just ImgMiscTable1]]
|
|
clusterMat ClusterTable2 =
|
|
M.fromLists
|
|
[ [Just ImgMiscTable2]
|
|
, [Just ImgEmpty]
|
|
]
|
|
clusterMat ClusterTable3 =
|
|
M.fromLists
|
|
[[Just ImgMiscTable1, Just ImgEmpty]]
|
|
clusterMat ClusterTable4 =
|
|
M.fromLists
|
|
[ [Just ImgEmpty]
|
|
, [Just ImgMiscTable2]
|
|
]
|
|
clusterMat ClusterCornerTable =
|
|
M.fromLists
|
|
[ [Just ImgMiscTable2, Just ImgMiscTableCorner]
|
|
, [Just ImgEmpty , Just ImgMiscTable1]
|
|
]
|
|
clusterMat ClusterTableGroup =
|
|
M.fromLists
|
|
[ [ Just ImgEmpty, Just ImgMiscTable2, Just ImgMiscTableCorner
|
|
, Just ImgEmpty, Just ImgMiscTable2, Just ImgMiscTableCorner
|
|
]
|
|
, [ Just ImgEmpty, Just ImgEmpty, Just ImgMiscTable1
|
|
, Just ImgEmpty, Just ImgEmpty, Just ImgMiscTable1
|
|
]
|
|
, [ Just ImgEmpty, Just ImgEmpty, Just ImgEmpty
|
|
, Just ImgEmpty, Just ImgEmpty, Just ImgEmpty
|
|
]
|
|
, [ Nothing, Nothing, Nothing
|
|
, Just ImgEmpty, Just ImgMiscTable2, Just ImgMiscTableCorner
|
|
]
|
|
, [ Nothing, Nothing, Nothing
|
|
, Just ImgEmpty, Just ImgEmpty, Just ImgMiscTable1
|
|
]
|
|
]
|
|
|
|
clusterRoom :: Cluster -> TileState
|
|
clusterRoom ClusterBox1 = Offi
|
|
clusterRoom ClusterTable1 = Offi
|
|
clusterRoom ClusterTable2 = Offi
|
|
clusterRoom ClusterTable3 = Offi
|
|
clusterRoom ClusterTable4 = Offi
|
|
clusterRoom ClusterCornerTable = Offi
|
|
clusterRoom ClusterTableGroup = Offi
|
|
|
|
clusterPoints :: Cluster -> [ReachPoint]
|
|
clusterPoints ClusterBox1 = []
|
|
clusterPoints ClusterTable1 =
|
|
[ ReachPoint Table (V2 1 1) ]
|
|
clusterPoints ClusterTable2 =
|
|
[ ReachPoint Table (V2 2 1) ]
|
|
clusterPoints ClusterTable3 =
|
|
[ ReachPoint Table (V2 1 2) ]
|
|
clusterPoints ClusterTable4 =
|
|
[ ReachPoint Table (V2 1 1) ]
|
|
clusterPoints ClusterCornerTable =
|
|
[ ReachPoint Table (V2 2 1)
|
|
]
|
|
clusterPoints ClusterTableGroup =
|
|
[ ReachPoint Table (V2 2 2)
|
|
, ReachPoint Table (V2 2 5)
|
|
, ReachPoint Table (V2 5 5)
|
|
]
|
|
|
|
instance Size Cluster where
|
|
size c =
|
|
let mat = clusterMat c
|
|
in fromIntegral ((nrows mat) * (ncols mat))
|
|
|
|
data ReachPoint = ReachPoint
|
|
{ pointType :: PointType
|
|
, pointCoord :: V2 Int
|
|
}
|
|
deriving (Show)
|
|
|
|
data PointType
|
|
= RoomExit
|
|
| Table
|
|
deriving (Eq, Show)
|