1#ifndef YAZE_APP_EDITOR_OVERWORLD_TILE16_TILE16_EDIT_SESSION_H_
2#define YAZE_APP_EDITOR_OVERWORLD_TILE16_TILE16_EDIT_SESSION_H_
13#include "absl/status/status.h"
51 std::function<
void()> before_edit) {
144 bool left_click,
bool right_click);
160 std::function<
void(
const std::vector<Tile16Commit>&)> callback) {
164 std::function<absl::Status(
const std::vector<Tile16Commit>&)> callback) {
176 std::function<
void(
float width,
float height)> callback) {
317 absl::Status
RunEdit(
const std::function<absl::Status()>& operation);
318 absl::Status
ApplyDefinitions(
const std::vector<Tile16Commit>& definitions);
352 std::function<absl::Status(
const std::vector<Tile16Commit>&)>
The Rom class is used to load, save, and modify Rom data. This is a generic SNES ROM container and do...
Domain session for Tile16 editing (no ImGui).
absl::Status UpdateROMTile16Data()
const std::map< int, gfx::Tile16 > & pending_tile16_changes() const
gfx::Tile16 current_tile16_data_
gfx::Tile16 * GetCurrentTile16Data()
absl::Status SetCurrentTile(int id)
void set_tile8_stamp_size(int size)
absl::Status ValidateTile16Data()
absl::Status ApplyDefinitions(const std::vector< Tile16Commit > &definitions)
gfx::SnesPalette CreateRemappedPaletteForTile8(const gfx::SnesPalette &source, int target_row, int tile8_id) const
absl::Status ApplyPaletteToAllImpl(uint8_t palette_id)
absl::Status CommitChangesToBlockset()
bool show_palette_preview() const
int GetActualPaletteSlot(int palette_button, int sheet_index) const
int current_tile8() const
absl::Status ClearTile16Impl()
void set_scroll_to_current(bool scroll)
gfx::SnesPalette CreateRemappedPaletteForViewing(const gfx::SnesPalette &source, int target_row) const
void set_on_current_tile_changed(std::function< void(int)> callback)
gfx::Bitmap * tile16_blockset_bmp()
bool * mutable_show_tile_grid()
const Tile16ClipboardData & clipboard() const
std::array< Tile16ScratchData, 4 > scratch_space_
bool IsTile16Valid(int tile_id) const
bool * mutable_grid_snap_enabled()
absl::Status RegenerateTile16BitmapFromROM()
gfx::Tilemap * tile16_blockset()
bool HasCurrentGfxBitmap() const
absl::Status HandleTile16CanvasClick(Tile16LocalPos tile_position, bool left_click, bool right_click)
const std::vector< zelda3::Tile8PixelData > & current_gfx_individual() const
int current_tile16() const
bool has_shared_history() const
gfx::SnesPalette overworld_palette_
absl::Status SaveTile16ToROM()
Tile16EditMode edit_mode_
absl::Status CommitChangesToOverworld()
bool auto_tile_mode() const
absl::Status RunEdit(const std::function< absl::Status()> &operation)
absl::Status ApplyPaletteToQuadrantImpl(int quadrant, uint8_t palette_id)
zelda3::GameData * game_data() const
Tile16ClipboardData clipboard_tile16_
int last_rom_write_count() const
absl::StatusOr< gfx::Tile16 > ReadDocumentTile(int id) const
bool priority_tile() const
absl::Status FillTile16WithTile8Impl(int tile8_id)
bool live_preview_enabled_
float tile8_source_display_scale() const
int current_palette_group_
bool show_palette_preview_
std::function< void()> before_edit_
uint8_t * mutable_palette_normalization_mask()
zelda3::GameData * game_data_
gfx::Bitmap tile8_preview_bmp_
void CopyTileBitmapToBlockset(int tile_id, const gfx::Bitmap &tile_bitmap)
absl::Status DiscardChanges()
void set_palette(const gfx::SnesPalette &palette)
const std::array< uint8_t, 0x200 > & all_tiles_types() const
int current_palette_group() const
void set_on_document_changed(std::function< void(const std::vector< Tile16Commit > &)> callback)
std::map< int, gfx::Bitmap > edited_tile_bitmaps_
absl::Status CyclePalette(bool forward=true)
float * mutable_tile8_source_display_scale()
void AnalyzeTile8SourceData() const
bool has_rom_write_history() const
absl::Status InitializeBitmaps(gfx::Bitmap &tile16_blockset_bmp, gfx::Bitmap ¤t_gfx_bmp, std::array< uint8_t, 0x200 > &all_tiles_types)
const gfx::SnesPalette & overworld_palette() const
absl::Status FlipTile16Vertical()
absl::Status PickTile8FromTile16(Tile16LocalPos position)
absl::Status ApplyPaletteToAll(uint8_t palette_id)
static constexpr int kTilesPerRow
absl::Status ReplaceCurrentTile(const gfx::Tile16 &data)
bool * mutable_show_tile_collision_ids()
std::array< uint8_t, 0x200 > all_tiles_types_
Tile16ScratchData & scratch_slot(int i)
gfx::Bitmap * tile16_blockset_bmp_
absl::Status BuildStampPreview(Tile16LocalPos pos, gfx::Bitmap *output) const
const gfx::Bitmap & current_tile16_bmp() const
void set_current_palette(int palette)
bool show_tile_info() const
void SetGameData(zelda3::GameData *game_data)
absl::Status UpdateBlocksetBitmap()
void set_map_blockset_loaded(bool loaded)
int last_rom_write_count_
void ApplyPaletteToCurrentTile16Bitmap()
bool has_pending_changes() const
absl::Status DrawToCurrentTile16Impl(Tile16LocalPos pos, const gfx::Bitmap *source_tile)
bool tile8_usage_cache_dirty() const
void set_tile8_usage_cache_dirty(bool dirty)
int * mutable_current_palette_group()
std::chrono::steady_clock::time_point last_rom_write_time() const
absl::Status DrawToCurrentTile16(Tile16LocalPos pos, const gfx::Bitmap *source_tile=nullptr)
bool show_palette_settings_
std::function< void(int)> on_tile_selection_changed_
bool has_rom_write_history_
gfx::Tilemap * tile16_blockset_
bool * mutable_highlight_tile8_usage()
void set_on_tile_selection_changed(std::function< void(int)> callback)
Optional: UI can sync blockset selector when current tile changes.
absl::Status LoadLayoutFromScratch(int slot)
std::function< void(int)> on_current_tile_changed_
gfx::Tile16 & current_tile16_data()
absl::Status CopyTile16ToClipboard(int tile_id)
bool * mutable_auto_normalize_pixels()
absl::Status PasteTile16FromClipboard()
gfx::Bitmap * current_gfx_bmp()
int current_palette() const
std::chrono::steady_clock::time_point last_rom_write_time_
int * mutable_tile8_stamp_size()
void CopyTile16ToAtlas(int tile_id)
absl::Status RebuildTile8UsageCache()
gfx::Bitmap preview_tile16_
Tile16EditMode edit_mode() const
absl::Status UpdateLivePreview()
int active_quadrant() const
std::map< int, gfx::Tile16 > document_edits_
absl::Status PreviewPaletteChange(uint8_t palette_id)
void set_current_tile8(int id)
int GetActualPaletteSlotForCurrentTile16() const
absl::Status ClearTile16()
void DiscardCurrentTileChanges()
absl::Status BuildTile16BitmapFromData(const gfx::Tile16 &tile_data, gfx::Bitmap *output_bitmap) const
Tile16LayoutScratch & layout_scratch(int i)
absl::Status RefreshAllPalettes()
void set_current_page(int page)
gfx::SnesPalette palette_
bool * mutable_auto_tile_mode()
bool live_preview_enabled() const
bool * mutable_priority_tile()
const std::map< int, gfx::Bitmap > & pending_tile16_bitmaps() const
int pending_changes_count() const
gfx::Bitmap & mutable_tile8_preview_bitmap()
gfx::Bitmap current_tile16_bmp_
absl::Status SaveLayoutToScratch(int slot)
bool HasTile16BlocksetBitmap() const
bool highlight_tile8_usage() const
Tile16EditSession(Rom *rom, gfx::Tilemap *tile16_blockset)
const gfx::Tile16 & current_tile16_data() const
absl::Status RotateTile16()
absl::Status FillTile16WithTile8(int tile8_id)
absl::Status ApplyPaletteToQuadrant(int quadrant, uint8_t palette_id)
uint8_t palette_normalization_mask() const
int * mutable_jump_to_tile_id()
void MarkCurrentTileModified()
bool tile8_usage_cache_dirty_
gfx::Bitmap * current_gfx_bmp_
std::function< void(float, float)> on_tile8_sheet_resized_
absl::Status LoadTile16FromScratchSpace(int slot)
std::array< Tile16LayoutScratch, 4 > layout_scratch_
bool scroll_to_current() const
zelda3::Tile8UsageIndex tile8_usage_cache_
absl::Status RotateTile16Impl()
bool * mutable_show_palette_settings()
absl::Status FlipTile16Horizontal()
void RequestTileSwitch(int target_tile_id)
std::vector< zelda3::Tile8PixelData > & mutable_current_gfx_individual()
UndoManager undo_manager_
int jump_to_tile_id() const
bool show_tile_collision_ids_
absl::Status SaveTile16ToScratchSpace(int slot)
bool show_palette_settings() const
std::function< void(const std::vector< Tile16Commit > &) on_document_changed_)
absl::Status FlipTile16HorizontalImpl()
const Tile16ScratchData & scratch_slot(int i) const
void set_on_changes_committed(std::function< absl::Status(const std::vector< Tile16Commit > &)> callback)
bool auto_normalize_pixels() const
std::function< absl::Status(const std::vector< Tile16Commit > &) on_changes_committed_)
absl::Status UpdateTile8Palette(int tile8_id)
absl::Status UpdateOverworldTilemap()
bool * mutable_show_palette_preview()
bool highlight_tile8_usage_
bool map_blockset_loaded_
absl::Status CommitAllChanges()
bool grid_snap_enabled() const
int GetEncodedPaletteRow(uint8_t pixel_value) const
void EnableLivePreview(bool enable)
const gfx::SnesPalette & palette() const
bool show_tile_collision_ids() const
bool show_tile_grid() const
const gfx::SnesPalette * ResolveDisplayPalette() const
absl::Status FlipTile16VerticalImpl()
bool auto_normalize_pixels_
int GetSheetIndexForTile8(int tile8_id) const
static Tile16LocalPos Tile16PreviewDisplayPixelToTilePosition(Tile16LocalPos display_position)
static constexpr int kTilesPerPage
bool BitmapHasEncodedPaletteRows(const gfx::Bitmap &bitmap) const
int tile8_stamp_size() const
const gfx::Bitmap & Tile8PreviewBitmap() const
bool is_tile_modified(int tile_id) const
bool map_blockset_loaded() const
const zelda3::Tile8UsageIndex & tile8_usage_cache() const
void set_active_quadrant(int quadrant)
uint8_t palette_normalization_mask_
void set_on_tile8_sheet_resized(std::function< void(float width, float height)> callback)
Optional: UI updates Tile8 source canvas size after LoadTile8.
absl::Status LoadTile16FromScratchSpaceImpl(int slot)
gfx::Bitmap & current_tile16_bmp()
const gfx::Bitmap * GetPendingTileBitmap(int tile_id) const
std::vector< gfx::Tile16 > * document_definitions_
absl::StatusOr< std::vector< zelda3::Tile16StampMutation > > BuildStampMutations(Tile16LocalPos pos) const
absl::Status PasteTile16FromClipboardImpl()
std::vector< zelda3::Tile8PixelData > current_gfx_individual_
void BindDocument(std::vector< gfx::Tile16 > *definitions, UndoManager *history, std::function< void()> before_edit)
absl::Status RefreshTile16Blockset()
void set_edit_mode(Tile16EditMode mode)
bool * mutable_show_tile_info()
absl::Status ClearScratchSpace(int slot)
float tile8_source_display_scale_
Manages undo/redo stacks for a single editor.
Represents a bitmap image optimized for SNES ROM hacking.
Represents a palette of colors for the Super Nintendo Entertainment System (SNES).
Tile composition of four 8x8 tiles.
std::array< std::vector< Tile8UsageHit >, kMaxTile8UsageId > Tile8UsageIndex
Tilemap structure for SNES tile-based graphics management.