module Types.GameMap where import Data.Vector import Linear -- internal imports import Types.Texture 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 , tileMapTexture :: Texture -- ^ Texture object 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)