Porytiles
Loading...
Searching...
No Matches
porytiles::LayerModeConverter Class Reference

#include <layer_mode_converter.hpp>

Public Member Functions

 LayerModeConverter (gsl::not_null< const TextFormatter * > format, gsl::not_null< const UserDiagnostics * > diag, gsl::not_null< const TilePrinter * > tile_printer, const Rgba32 &extrinsic_transparency)
 
ChainableResult< std::vector< TilemapEntry > > triple_layerize (const PorymapTilesetComponent &component)
 Converts a tileset component to triple-layer format.
 
std::vector< TilemapEntrydual_layerize (const std::vector< TilemapEntry > &entries, const std::vector< Metatile< Rgba32 > > &source_metatiles)
 Converts a tileset from triple-layer format to dual-layer format.
 

Detailed Description

Definition at line 17 of file layer_mode_converter.hpp.

Constructor & Destructor Documentation

◆ LayerModeConverter()

porytiles::LayerModeConverter::LayerModeConverter ( gsl::not_null< const TextFormatter * >  format,
gsl::not_null< const UserDiagnostics * >  diag,
gsl::not_null< const TilePrinter * >  tile_printer,
const Rgba32 extrinsic_transparency 
)
inlineexplicit

Definition at line 19 of file layer_mode_converter.hpp.

Member Function Documentation

◆ dual_layerize()

std::vector< TilemapEntry > porytiles::LayerModeConverter::dual_layerize ( const std::vector< TilemapEntry > &  entries,
const std::vector< Metatile< Rgba32 > > &  source_metatiles 
)

Converts a tileset from triple-layer format to dual-layer format.

Converts triple-layer metatiles (12 entries per metatile) to dual-layer metatiles (8 entries per metatile) by removing transparent tilemap entries based on each metatile's inferred LayerType. This is the inverse operation of triple_layerize().

The conversion strategy depends on the metatile's inferred LayerType:

  • normal: Removes the first 4 transparent entries, keeps the last 8 entries
  • covered: Keeps the first 8 entries, removes the last 4 transparent entries
  • split: Keeps the first 4 entries, removes the middle 4 transparent entries, keeps the last 4 entries
Parameters
entriesThe triple-layer tilemap entries to convert
source_metatilesThe source metatiles used to infer layer types
Precondition
The entries vector contains triple-layer entries (size must equal source_metatiles.size() * 12)
No metatile in source_metatiles has implied LayerMode::triple
Returns
A dual-layerized TilemapEntry vector

Definition at line 83 of file layer_mode_converter.cpp.

◆ triple_layerize()

ChainableResult< std::vector< TilemapEntry > > porytiles::LayerModeConverter::triple_layerize ( const PorymapTilesetComponent component)

Converts a tileset component to triple-layer format.

Converts dual-layer metatiles (8 entries per metatile) to triple-layer metatiles (12 entries per metatile) by inserting transparent tilemap entries based on each metatile's LayerType attribute. If the component is already in triple-layer format, it is returned unchanged.

The conversion strategy depends on the metatile's LayerType:

  • normal: Inserts 4 transparent entries at the beginning, followed by the 8 original entries
  • covered: Copies the 8 original entries first, then appends 4 transparent entries at the end
  • split: Copies the first 4 entries, inserts 4 transparent entries in the middle, then copies the last 4 entries
Parameters
componentThe tileset component to convert
Returns
A triple-layerized TilemapEntry vector

Definition at line 14 of file layer_mode_converter.cpp.


The documentation for this class was generated from the following files: