module Types.GameMap where import Data.Vector import Linear data LevelMap = LevelMap { mapLayers :: Vector MapLayer -- | Layer stack , mapWalkLayer :: Word -- | Collision layer index in stack , mapDimensions :: V2 Word -- | Dimension of map in tiles , mapTileMap :: TileMap -- | The tile map , mapStartPos :: V2 Word -- | Player start position } deriving (Eq, Show) newtype MapLayer = MapLayer { layerTiles :: Vector Tile -- | Tiles of this layer } deriving (Eq, Show) data Tile = Tile { tileOffset :: V2 Word -- | Offset of this tile on the tile map , tileType :: TileType -- | Type of tile } deriving (Eq, Show) data TileType = Solid | Platform | Decoration deriving (Enum, Ord, Eq, Show) data TileMap = TileMap { tileMapDimensions :: V2 Word -- | Dimensions of tile map image in pixels , tileMapPath :: FilePath -- | Filepath to image , tileMapIndex :: Word -- | Index on GPU } deriving (Eq, Show) data LevelDescriptor = LevelDescriptor { levelLayerPath :: [(Word, FilePath)] -- | Indexed paths to the layers , levelWalkLayer :: Word -- | Index of walk layer , levelTileMap :: FilePath -- | Filepath to tile map , levelStartPos :: (Word, Word) -- | Player start position -- , levelCollectibles :: [(V2 Word, ())] -- | TODO; Collectibles and their tile coords -- , levelEnemies :: [(V2 Word, ())] -- | TODO: Enemies and their tile coords -- , levelInteractables :: [(V2 Word, ())] -- | TODO: Interactables and their coords } deriving (Eq, Show)