1#ifndef YAZE_APP_EDITOR_TILE16EDITOR_H
2#define YAZE_APP_EDITOR_TILE16EDITOR_H
9#include "absl/status/status.h"
17#include "imgui/imgui.h"
38 std::array<uint8_t, 0x200>& all_tiles_types);
43 std::function<absl::Status(
int,
int)> callback) {
48 return absl::FailedPreconditionError(
"Graphics editor is unavailable");
61 bool left_click,
bool right_click);
63 const ImVec2& display_position);
112 std::function<
void()> before_edit = {}) {
207 std::function<
void(
const std::vector<Tile16Commit>&)> callback) {
211 std::function<absl::Status(
const std::vector<Tile16Commit>&)> callback) {
249 bool show_advanced_controls);
252 bool* show_advanced_controls);
256 float display_scale);
273 "Tile16BlocksetSelector",
The Rom class is used to load, save, and modify Rom data. This is a generic SNES ROM container and do...
Allows the user to view and edit in game palettes.
Domain session for Tile16 editing (no ImGui).
absl::Status UpdateROMTile16Data()
gfx::Tile16 * GetCurrentTile16Data()
absl::Status SetCurrentTile(int id)
absl::Status ValidateTile16Data()
absl::Status CommitChangesToBlockset()
int GetActualPaletteSlot(int palette_button, int sheet_index) const
int current_tile8() const
gfx::SnesPalette CreateRemappedPaletteForViewing(const gfx::SnesPalette &source, int target_row) const
void set_on_current_tile_changed(std::function< void(int)> callback)
bool IsTile16Valid(int tile_id) const
absl::Status RegenerateTile16BitmapFromROM()
int current_tile16() const
absl::Status SaveTile16ToROM()
absl::Status CommitChangesToOverworld()
zelda3::GameData * game_data() const
absl::Status DiscardChanges()
void set_palette(const gfx::SnesPalette &palette)
void set_on_document_changed(std::function< void(const std::vector< Tile16Commit > &)> callback)
absl::Status CyclePalette(bool forward=true)
void AnalyzeTile8SourceData() const
absl::Status FlipTile16Vertical()
absl::Status ApplyPaletteToAll(uint8_t palette_id)
absl::Status ReplaceCurrentTile(const gfx::Tile16 &data)
void set_current_palette(int palette)
void SetGameData(zelda3::GameData *game_data)
absl::Status UpdateBlocksetBitmap()
bool has_pending_changes() const
absl::Status CopyTile16ToClipboard(int tile_id)
absl::Status PasteTile16FromClipboard()
int current_palette() const
Tile16EditMode edit_mode() const
absl::Status UpdateLivePreview()
int active_quadrant() const
absl::Status PreviewPaletteChange(uint8_t palette_id)
int GetActualPaletteSlotForCurrentTile16() const
absl::Status ClearTile16()
void DiscardCurrentTileChanges()
absl::Status RefreshAllPalettes()
int pending_changes_count() const
absl::Status SaveLayoutToScratch(int slot)
absl::Status RotateTile16()
absl::Status FillTile16WithTile8(int tile8_id)
absl::Status ApplyPaletteToQuadrant(int quadrant, uint8_t palette_id)
void MarkCurrentTileModified()
absl::Status LoadTile16FromScratchSpace(int slot)
absl::Status FlipTile16Horizontal()
void RequestTileSwitch(int target_tile_id)
absl::Status SaveTile16ToScratchSpace(int slot)
void set_on_changes_committed(std::function< absl::Status(const std::vector< Tile16Commit > &)> callback)
absl::Status UpdateTile8Palette(int tile8_id)
absl::Status UpdateOverworldTilemap()
absl::Status CommitAllChanges()
int GetEncodedPaletteRow(uint8_t pixel_value) const
void EnableLivePreview(bool enable)
int GetSheetIndexForTile8(int tile8_id) const
const gfx::Bitmap & Tile8PreviewBitmap() const
bool is_tile_modified(int tile_id) const
void set_active_quadrant(int quadrant)
const gfx::Bitmap * GetPendingTileBitmap(int tile_id) const
void BindDocument(std::vector< gfx::Tile16 > *definitions, UndoManager *history, std::function< void()> before_edit)
absl::Status RefreshTile16Blockset()
void set_edit_mode(Tile16EditMode mode)
absl::Status ClearScratchSpace(int slot)
ImGui façade for Tile16 editing; domain state lives in Tile16EditSession.
absl::Status SaveTile16ToScratchSpace(int slot)
Tile16Editor(Rom *rom, gfx::Tilemap *tile16_blockset)
absl::Status LoadLayoutFromScratch(int slot)
static ImVec2 Tile16PreviewDisplayPixelToTilePosition(const ImVec2 &display_position)
absl::Status DrawTile16EditorWorkbenchColumn(bool show_debug_info, bool show_advanced_controls)
zelda3::GameData * game_data() const
util::NotifyValue< uint32_t > notify_tile16
absl::Status CyclePalette(bool forward=true)
absl::Status HandleTile16CanvasClick(const ImVec2 &tile_position, bool left_click, bool right_click)
absl::Status ClearTile16()
absl::Status ReplaceCurrentTile(const gfx::Tile16 &data)
void HandleKeyboardShortcuts()
absl::Status FillTile16WithTile8(int tile8_id)
absl::Status CommitAllChanges()
int active_quadrant() const
int selected_tile16_for_testing() const
void AnalyzeTile8SourceData() const
PaletteEditor palette_editor_
absl::Status SaveTile16ToROM()
absl::Status ApplyPaletteToAll(uint8_t palette_id)
int current_tile16() const
std::function< absl::Status(int, int)> open_graphics_for_quadrant_
int GetActualPaletteSlotForCurrentTile16() const
void set_current_palette(int palette)
absl::Status RegenerateTile16BitmapFromROM()
void set_active_quadrant(int quadrant)
absl::Status DiscardChanges()
absl::Status HandleTile8SourceSelection(bool right_clicked, float display_scale)
absl::Status PasteTile16FromClipboard()
gui::TileSelectorWidget blockset_selector_
int pending_changes_count() const
absl::Status SaveLayoutToScratch(int slot)
absl::Status LoadTile16FromScratchSpace(int slot)
gfx::SnesPalette CreateRemappedPaletteForViewing(const gfx::SnesPalette &source, int target_row) const
int GetActualPaletteSlot(int palette_button, int sheet_index) const
absl::Status FlipTile16Horizontal()
void SetGameData(zelda3::GameData *game_data)
int current_tile8() const
void set_edit_mode(Tile16EditMode mode)
absl::Status OpenGraphicsForActiveQuadrant()
absl::Status UpdateTile16Edit()
absl::Status UpdateBlockset()
absl::Status DrawBrushAndTilePaletteControls(bool show_debug_info)
int GetEncodedPaletteRow(uint8_t pixel_value) const
void DrawTile8UsageOverlay()
gfx::Bitmap stamp_preview_bitmap_
void EnableLivePreview(bool enable)
absl::Status DrawTile8SourcePanel(float preferred_height=0.0f)
Tile16EditMode edit_mode() const
absl::Status SetCurrentTile(int id)
absl::Status UpdateTile8Palette(int tile8_id)
absl::Status UpdateAsPanel()
absl::Status RefreshTile16Blockset()
absl::Status ValidateTile16Data()
void DrawManualTile8Inputs()
void BindDocument(std::vector< gfx::Tile16 > *definitions, UndoManager *history, std::function< void()> before_edit={})
absl::Status graphics_open_status_
const gfx::Bitmap * GetPendingTileBitmap(int tile_id) const
absl::Status RefreshAllPalettes()
void SetOpenGraphicsForQuadrant(std::function< absl::Status(int, int)> callback)
void DrawPaletteSettings()
absl::Status ApplyPaletteToQuadrant(int quadrant, uint8_t palette_id)
void set_on_changes_committed(std::function< absl::Status(const std::vector< Tile16Commit > &)> callback)
absl::Status UpdateOverworldTilemap()
absl::Status DrawTile16NavigationHeader(int total_tiles)
absl::Status RotateTile16()
gui::Canvas tile16_edit_canvas_
absl::Status CommitChangesToBlockset()
absl::Status UpdateROMTile16Data()
gui::Canvas blockset_canvas_
void set_on_document_changed(std::function< void(const std::vector< Tile16Commit > &)> callback)
gui::Canvas tile8_source_canvas_
bool IsTile16Valid(int tile_id) const
gfx::Tile16 * GetCurrentTile16Data()
absl::Status DrawCompactActionStatusRow(bool *show_debug_info, bool *show_advanced_controls)
void MarkCurrentTileModified()
bool has_pending_changes() const
absl::Status CommitChangesToOverworld()
absl::Status UpdateBlocksetBitmap()
void DiscardCurrentTileChanges()
void RequestTileSwitch(int target_tile_id)
int current_palette() const
absl::Status DrawToCurrentTile16(ImVec2 pos, const gfx::Bitmap *source_tile=nullptr)
absl::Status UpdateLivePreview()
absl::Status Initialize(gfx::Bitmap &tile16_blockset_bmp, gfx::Bitmap ¤t_gfx_bmp, std::array< uint8_t, 0x200 > &all_tiles_types)
absl::Status PreviewPaletteChange(uint8_t palette_id)
absl::Status CopyTile16ToClipboard(int tile_id)
absl::Status DrawPrimaryActionControls()
const gfx::Bitmap & Tile8PreviewBitmapForTesting() const
absl::Status ClearScratchSpace(int slot)
int selection_start_tile_
bool is_tile_modified(int tile_id) const
gui::Table tile_edit_table_
int GetSheetIndexForTile8(int tile8_id) const
absl::Status FlipTile16Vertical()
Tile16EditSession session_
absl::Status PickTile8FromTile16(const ImVec2 &position)
std::vector< int > selected_tiles_
void set_palette(const gfx::SnesPalette &palette)
util::NotifyValue< uint8_t > notify_palette
void set_on_current_tile_changed(std::function< void(int)> callback)
Manages undo/redo stacks for a single editor.
Represents a bitmap image optimized for SNES ROM hacking.
Shared graphical context across editors.
Represents a palette of colors for the Super Nintendo Entertainment System (SNES).
Tile composition of four 8x8 tiles.
Modern, robust canvas for drawing and manipulating graphics.
A class to manage a value that can be modified and notify when it changes.
constexpr int kTilesheetEditorHeight
constexpr int kTilesheetEditorWidth
constexpr int kTilesheetHeight
constexpr int kTilesheetWidth
Tilemap structure for SNES tile-based graphics management.