17using ImGui::BeginTable;
20using ImGui::Selectable;
21using ImGui::Separator;
22using ImGui::TableHeadersRow;
23using ImGui::TableNextColumn;
24using ImGui::TableNextRow;
25using ImGui::TableSetupColumn;
32 card_registry->
RegisterCard({.card_id =
"sprite.vanilla_editor", .display_name =
"Vanilla Sprites",
34 .shortcut_hint =
"Alt+Shift+1", .priority = 10});
35 card_registry->RegisterCard({.card_id =
"sprite.custom_editor", .display_name =
"Custom Sprites",
37 .shortcut_hint =
"Alt+Shift+2", .priority = 20});
40 card_registry->ShowCard(
"sprite.vanilla_editor");
45 return absl::OkStatus();
63 bool* vanilla_visible = card_registry->GetVisibilityFlag(
"sprite.vanilla_editor");
64 if (vanilla_visible && *vanilla_visible) {
65 if (vanilla_card.
Begin(vanilla_visible)) {
72 bool* custom_visible = card_registry->GetVisibilityFlag(
"sprite.custom_editor");
73 if (custom_visible && *custom_visible) {
74 if (custom_card.
Begin(custom_visible)) {
90 if (ImGui::BeginTable(
"##SpriteCanvasTable", 3, ImGuiTableFlags_Resizable,
92 TableSetupColumn(
"Sprites List", ImGuiTableColumnFlags_WidthFixed, 256);
93 TableSetupColumn(
"Canvas", ImGuiTableColumnFlags_WidthStretch,
94 ImGui::GetContentRegionAvail().x);
95 TableSetupColumn(
"Tile Selector", ImGuiTableColumnFlags_WidthFixed, 256);
103 static int next_tab_id = 0;
124 if (ImGui::BeginTabItem(
126 ImGuiTabItemFlags_None)) {
149 static bool flip_x =
false;
150 static bool flip_y =
false;
151 if (ImGui::BeginChild(
gui::GetID(
"##SpriteCanvas"),
152 ImGui::GetContentRegionAvail(),
true)) {
160 if (ImGui::BeginTable(
"##OAMTable", 7, ImGuiTableFlags_Resizable,
162 TableSetupColumn(
"X", ImGuiTableColumnFlags_WidthStretch);
163 TableSetupColumn(
"Y", ImGuiTableColumnFlags_WidthStretch);
164 TableSetupColumn(
"Tile", ImGuiTableColumnFlags_WidthStretch);
165 TableSetupColumn(
"Palette", ImGuiTableColumnFlags_WidthStretch);
166 TableSetupColumn(
"Priority", ImGuiTableColumnFlags_WidthStretch);
167 TableSetupColumn(
"Flip X", ImGuiTableColumnFlags_WidthStretch);
168 TableSetupColumn(
"Flip Y", ImGuiTableColumnFlags_WidthStretch);
188 if (ImGui::Checkbox(
"##XFlip", &flip_x)) {
193 if (ImGui::Checkbox(
"##YFlip", &flip_y)) {
209 if (ImGui::BeginChild(
gui::GetID(
"sheet_label"),
210 ImVec2(ImGui::GetContentRegionAvail().x, 0),
true,
211 ImGuiWindowFlags_NoDecoration)) {
212 for (
int i = 0; i < 8; i++) {
213 std::string sheet_label = absl::StrFormat(
"Sheet %d", i);
215 if (i % 2 == 0) ImGui::SameLine();
221 for (
int i = 0; i < 8; i++) {
233 if (ImGui::BeginChild(
gui::GetID(
"##SpritesList"),
234 ImVec2(ImGui::GetContentRegionAvail().x, 0),
true,
235 ImGuiWindowFlags_NoDecoration)) {
237 for (
const auto each_sprite_name : zelda3::kSpriteDefaultNames) {
240 zelda3::kSpriteDefaultNames[i].data());
241 if (ImGui::IsItemClicked()) {
254 if (ImGui::Button(
"Add Frame")) {
257 if (ImGui::Button(
"Remove Frame")) {
263 if (BeginTable(
"##CustomSpritesTable", 3,
264 ImGuiTableFlags_Resizable | ImGuiTableFlags_Borders |
265 ImGuiTableFlags_Reorderable | ImGuiTableFlags_Hideable,
267 TableSetupColumn(
"Metadata", ImGuiTableColumnFlags_WidthFixed, 256);
268 TableSetupColumn(
"Canvas", ImGuiTableColumnFlags_WidthFixed, 256);
269 TableSetupColumn(
"TIlesheets", ImGuiTableColumnFlags_WidthFixed, 256);
290 if (ImGui::Button(
"Open ZSprite")) {
293 if (!file_path.empty()) {
303 Selectable(
"%s", custom_sprite.sprName.c_str());
304 if (ImGui::IsItemClicked()) {
315 Text(
"Sprite ID: %s", custom_sprite.property_sprid.Text.c_str());
316 Text(
"Sprite Name: %s", custom_sprite.property_sprname.Text.c_str());
317 Text(
"Sprite Palette: %s", custom_sprite.property_palette.Text.c_str());
project::ResourceLabelManager * resource_label()
void RegisterCard(size_t session_id, const CardInfo &base_info)
Register a card for a specific session.
EditorDependencies dependencies_
ImVector< int > active_sprites_
void DrawAnimationFrames()
Draws the animation frames manager.
void DrawCurrentSheets()
Draws the current sheets.
void DrawSpriteCanvas()
Draws the sprite canvas.
absl::Status Update() override
void DrawSpritesList()
Draws the sprites list.
void Initialize() override
void DrawVanillaSpriteEditor()
uint8_t current_sheets_[8]
gui::Canvas graphics_sheet_canvas_
std::vector< zsprite::ZSprite > custom_sprites_
void DrawCustomSpritesMetadata()
gui::Canvas sprite_canvas_
absl::Status Load() override
RAII timer for automatic timing management.
void DrawBitmap(Bitmap &bitmap, int border_offset, float scale)
bool DrawTileSelector(int size, int size_y=0)
void DrawBackground(ImVec2 canvas_size=ImVec2(0, 0))
void DrawGrid(float grid_step=64.0f, int tile_id_offset=8)
Draggable, dockable card for editor sub-windows.
bool Begin(bool *p_open=nullptr)
void SetDefaultSize(float width, float height)
static std::string ShowOpenFileDialog()
ShowOpenFileDialog opens a file dialog and returns the selected filepath. Uses global feature flag to...
#define ICON_MD_ADD_CIRCLE
#define ICON_MD_SMART_TOY
constexpr ImGuiTabBarFlags kSpriteTabBarFlags
bool InputHexWord(const char *label, uint16_t *data, float input_width, bool no_step)
ImGuiID GetID(const std::string &id)
bool InputHexByte(const char *label, uint8_t *data, float input_width, bool no_step)
std::string HexByte(uint8_t byte, HexStringParams params)
Main namespace for the application.
EditorCardRegistry * card_registry
absl::Status Load(const std::string &filename)
void SelectableLabelWithNameEdit(bool selected, const std::string &type, const std::string &key, const std::string &defaultValue)