#ifndef YAZE_APPLICATION_DATA_TILE_H #define YAZE_APPLICATION_DATA_TILE_H #include #include #include #include #include #include "Core/constants.h" #include "Graphics/palette.h" namespace yaze { namespace Application { namespace Graphics { // vhopppcc cccccccc // [0, 1] // [2, 3] class TileInfo { public: ushort id_; ushort over_; ushort vertical_mirror_; ushort horizontal_mirror_; uchar palette_; TileInfo() = default; TileInfo(ushort id, uchar palette, ushort v, ushort h, ushort o) : id_(id), over_(o), vertical_mirror_(v), horizontal_mirror_(h), palette_(palette) {} }; class Tile32 { public: ushort tile0_; ushort tile1_; ushort tile2_; ushort tile3_; Tile32(ushort t0, ushort t1, ushort t2, ushort t3) : tile0_(t0), tile1_(t1), tile2_(t2), tile3_(t3) {} }; class Tile16 { public: TileInfo tile0_; TileInfo tile1_; TileInfo tile2_; TileInfo tile3_; std::vector tiles_info; Tile16(TileInfo t0, TileInfo t1, TileInfo t2, TileInfo t3) : tile0_(t0), tile1_(t1), tile2_(t2), tile3_(t3) { tiles_info.push_back(tile0_); tiles_info.push_back(tile1_); tiles_info.push_back(tile2_); tiles_info.push_back(tile3_); } }; class TilesPattern { public: TilesPattern(); std::string name; std::string description; bool custom; unsigned int tiles_per_row_; unsigned int number_of_tiles_; void default_settings(); static TilesPattern pattern(std::string name); static std::vector> transform( const TilesPattern& pattern, const std::vector& tiles); protected: std::vector> transform( const std::vector& tiles) const; std::vector reverse(const std::vector& tiles) const; private: std::vector> transform_vector_; }; class TilePreset { public: TilePreset() = default; TilesPattern tilesPattern; bool no_zero_color_ = false; int pc_tiles_location_ = 0; int pc_palette_location_ = 0; int bits_per_pixel_ = 0; int length_ = 0; int SNESTilesLocation = 0; int SNESPaletteLocation = 0; }; } // namespace Graphics } // namespace Application } // namespace yaze #endif