1#ifndef YAZE_APP_EDITOR_SPRITE_EDITOR_H
2#define YAZE_APP_EDITOR_SPRITE_EDITOR_H
10#include "absl/status/status.h"
29 ImGuiTabItemFlags_Trailing | ImGuiTabItemFlags_NoTooltip;
32 ImGuiTabBarFlags_AutoSelectNewTabs | ImGuiTabBarFlags_Reorderable |
33 ImGuiTabBarFlags_FittingPolicyResizeDown |
34 ImGuiTabBarFlags_TabListPopupButton;
37 ImGuiTableFlags_Resizable | ImGuiTableFlags_Reorderable |
38 ImGuiTableFlags_Hideable | ImGuiTableFlags_BordersOuter |
39 ImGuiTableFlags_BordersV;
59 absl::Status
Load()
override;
60 absl::Status
Update()
override;
63 absl::Status
Cut()
override;
64 absl::Status
Copy()
override;
65 absl::Status
Paste()
override;
66 absl::Status
Find()
override {
return absl::UnimplementedError(
"Find"); }
67 absl::Status
Save()
override;
81 const std::string& catalog_key =
"");
90 const std::string& prefix);
92 const std::array<uint8_t, 8>& sheets,
93 const std::array<project::SpritePaletteBinding, 8>& rows);
277 std::optional<std::map<int, zelda3::OverworldAreaGfxInfo>>
usage_areas_;
291 ImVec2(0x80 * 2 + 2, 0x40 * 8 + 2),
The Rom class is used to load, save, and modify Rom data. This is a generic SNES ROM container and do...
Interface for editor classes.
UndoManager undo_manager_
Draws sprite OAM tiles to bitmaps for preview rendering.
Allows the user to edit sprites.
absl::Status SetSpriteBehavior(const project::SpriteBehavior &behavior)
friend struct SpriteEditorPreviewTestPeer
ImVector< int > active_sprites_
absl::Status Find() override
absl::Status OpenSpriteAsset(const std::string &path)
int current_custom_sprite_index_
void UpdateAnimationPlayback(float delta_time)
const std::optional< zelda3::SpriteCatalog > & sprite_catalog() const
std::string catalog_source_root_
std::vector< project::SpriteAssetBinding > custom_sprite_bindings_
absl::Status ReloadProjectSpriteAssets()
std::vector< zelda3::SpriteTileIssue > tile_issues_
absl::Status OpenSelectedOamGraphics()
void DrawAnimationPanel()
std::optional< zelda3::SpriteSourceDocument > catalog_source_
void EnsureCustomSpritePaths()
std::optional< zelda3::SpriteCatalog > sprite_catalog_
void ApplySpritesetToSheets(int spriteset)
void DrawSpriteAssetBindings()
const zsprite::ZSprite * current_custom_sprite() const
absl::Status source_check_status_
void BeginUndoTransaction()
void RefreshSpritePreviewGraphics(bool use_asset_binding)
std::array< uint64_t, 8 > loaded_preview_revisions_
void RenderZSpriteFrame(int frame_index)
absl::Status Paste() override
std::array< uint8_t, 8 > loaded_preview_sheets_
bool preview_use_room_palette_
absl::StatusOr< std::string > ExportCurrentSpriteDraw()
std::string catalog_path_
bool preview_needs_update_
void DrawZSpriteOnCanvas()
void LoadSpritePalettes(bool use_asset_binding=true)
std::optional< zsprite::Frame > frame_clipboard_
bool vanilla_preview_needs_update_
absl::Status Update() override
uint64_t preview_palette_revision_
void DrawSpriteBehaviorPanel()
void HandleEditorShortcuts()
gfx::PaletteGroup sprite_palettes_
void LoadZsmFile(const std::string &path)
bool sprite_mutated_this_frame_
void ApplyCurrentSpriteBinding()
absl::Status Redo() override
void DrawUserRoutinesPanel()
absl::Status Cut() override
absl::Status ImportCatalogDraw(const zelda3::SpriteSourceBinding &binding, const std::string &catalog_key="")
absl::StatusOr< std::string > ExportCurrentSpriteBehavior(const std::string &prefix)
void RefreshCatalogIfChanged()
absl::Status Undo() override
void RenderVanillaSprite(const zelda3::SpriteOamLayout &layout)
absl::Status palette_binding_status_
void DrawSpritesetPicker()
void Initialize() override
void DrawFrameTileWarnings()
bool catalog_scroll_to_label_
void DrawVanillaSpriteEditor()
int selected_routine_index_
int selected_behavior_action_
std::string behavior_candidate_
std::optional< std::map< int, zelda3::RoomGfxInfo > > usage_rooms_
const std::string & GetCurrentZsmPath() const
uint8_t current_sheets_[8]
SpriteDrawer sprite_drawer_
absl::Status asset_load_status_
gui::Canvas graphics_sheet_canvas_
int room_palette_cache_room_
absl::Status SaveSpriteAsset(const std::string &path)
void RestoreFromSnapshot(const SpriteSnapshot &snapshot)
bool undo_snapshot_pending_
std::vector< zsprite::ZSprite > custom_sprites_
std::vector< uint8_t > sprite_gfx_buffer_
gfx::Bitmap sprite_preview_bitmap_
const std::optional< zelda3::SpriteSourceDocument > & catalog_source() const
absl::Status ReloadSpriteCatalog()
int current_animation_index_
const project::SpriteAssetBinding * current_sprite_binding() const
void DrawBooleanProperties()
void DrawSpritePropertiesPanel()
void SetCurrentZsmPath(const std::string &path)
absl::Status behavior_status_
size_t catalog_session_id_
char behavior_prefix_[65]
absl::Status catalog_status_
absl::Status Copy() override
void SetDependencies(const EditorDependencies &deps) override
const zelda3::GameData * preview_graphics_owner_
absl::Status Save() override
std::optional< std::map< int, zelda3::OverworldAreaGfxInfo > > usage_areas_
friend class AuthoringSaveWorkflowTestPeer
void DrawCustomSpritesMetadata()
SpriteSnapshot undo_before_snapshot_
void SaveZsmFile(const std::string &path)
gui::Canvas sprite_canvas_
absl::Status catalog_source_status_
absl::Status BindOracleBehaviorProfile()
void CommitUndoTransaction()
SpriteSnapshot CaptureCurrentSpriteSnapshot() const
void DrawStatProperties()
absl::Status graphics_binding_status_
absl::Status graphics_context_status_
const project::YazeProject * catalog_project_
std::optional< gfx::PaletteGroup > room_palette_cache_
absl::Status OpenCatalogSource(const zelda3::SpriteSourceBinding &binding)
absl::Status CheckCurrentSpriteSource()
absl::Status Load() override
ImGuiTextFilter catalog_filter_
void LoadSpriteGraphicsBuffer()
std::vector< std::string > custom_sprite_paths_
void SelectVanillaSprite(int sprite_id)
std::string tile_check_key_
int catalog_family_index_
absl::Status draw_export_status_
SpriteEditor(Rom *rom=nullptr)
gfx::Bitmap vanilla_preview_bitmap_
const zelda3::SpriteOamLayout * CurrentPreviewLayout() const
absl::Status SetSpriteGraphics(const std::array< uint8_t, 8 > &sheets, const std::array< project::SpritePaletteBinding, 8 > &rows)
absl::Status Redo()
Redo the top action. Returns error if stack is empty.
absl::Status Undo()
Undo the top action. Returns error if stack is empty.
Represents a bitmap image optimized for SNES ROM hacking.
Modern, robust canvas for drawing and manipulating graphics.
Which graphics sheets exist, which tables use them, and which 16x16 blocks are free.
constexpr ImGuiTableFlags kSpriteTableFlags
constexpr ImGuiTabItemFlags kSpriteTabFlags
constexpr ImGuiTabBarFlags kSpriteTabBarFlags
Which graphics sheets back sprite OAM tiles 0x000-0x1FF.
Unified dependency container for all editor types.
Snapshot of a custom ZSprite's editable state for undo/redo.
Represents a group of palettes.
Modern project structure with comprehensive settings consolidation.
Complete OAM layout for a vanilla sprite.