From 8844778ef4133f4d4180be8525d4c8acf43abcf8 Mon Sep 17 00:00:00 2001 From: Justin Scofield Date: Sun, 24 Jul 2022 01:33:48 -0400 Subject: [PATCH] Refactor OverworldEditor --- src/app/editor/overworld_editor.cc | 59 ++++++++++++------------------ src/app/editor/overworld_editor.h | 11 +++++- 2 files changed, 33 insertions(+), 37 deletions(-) diff --git a/src/app/editor/overworld_editor.cc b/src/app/editor/overworld_editor.cc index 2412362a..0a6c0d5c 100644 --- a/src/app/editor/overworld_editor.cc +++ b/src/app/editor/overworld_editor.cc @@ -6,11 +6,13 @@ #include #include "absl/container/flat_hash_map.h" +#include "absl/status/status.h" #include "absl/status/statusor.h" #include "app/gfx/bitmap.h" #include "app/gfx/snes_palette.h" #include "app/gfx/snes_tile.h" #include "app/zelda3/overworld.h" +#include "gui/canvas.h" #include "gui/icons.h" /** @@ -34,18 +36,20 @@ namespace editor { void OverworldEditor::SetupROM(ROM &rom) { rom_ = rom; } -void OverworldEditor::Update() { +absl::Status OverworldEditor::Update() { if (rom_.isLoaded() && !all_gfx_loaded_) { LoadGraphics(); all_gfx_loaded_ = true; } - DrawToolset(); + auto toolset_status = DrawToolset(); + if (!toolset_status.ok()) return toolset_status; + ImGui::Separator(); if (ImGui::BeginTable("#owEditTable", 2, ow_edit_flags, ImVec2(0, 0))) { - ImGui::TableSetupColumn(" Canvas", ImGuiTableColumnFlags_WidthStretch, + ImGui::TableSetupColumn("Canvas", ImGuiTableColumnFlags_WidthStretch, ImGui::GetContentRegionAvail().x); - ImGui::TableSetupColumn(" Tile Selector"); + ImGui::TableSetupColumn("Tile Selector"); ImGui::TableHeadersRow(); ImGui::TableNextRow(); ImGui::TableNextColumn(); @@ -54,72 +58,56 @@ void OverworldEditor::Update() { DrawTileSelector(); ImGui::EndTable(); } + + return absl::OkStatus(); } -void OverworldEditor::DrawToolset() { - if (ImGui::BeginTable("Toolset", 17, toolset_table_flags, ImVec2(0, 0))) { - ImGui::TableSetupColumn("#undoTool"); - ImGui::TableSetupColumn("#redoTool"); - ImGui::TableSetupColumn("#drawTool"); - ImGui::TableSetupColumn("#separator2"); - ImGui::TableSetupColumn("#zoomOutTool"); - ImGui::TableSetupColumn("#zoomInTool"); - ImGui::TableSetupColumn("#separator"); - ImGui::TableSetupColumn("#history"); - ImGui::TableSetupColumn("#entranceTool"); - ImGui::TableSetupColumn("#exitTool"); - ImGui::TableSetupColumn("#itemTool"); - ImGui::TableSetupColumn("#spriteTool"); - ImGui::TableSetupColumn("#transportTool"); - ImGui::TableSetupColumn("#musicTool"); - ImGui::TableSetupColumn("#separator3"); - ImGui::TableSetupColumn("#reloadTool"); +absl::Status OverworldEditor::DrawToolset() { + if (ImGui::BeginTable("OWToolset", 17, toolset_table_flags, ImVec2(0, 0))) { + for (const auto &name : kToolsetColumnNames) + ImGui::TableSetupColumn(name.data()); ImGui::TableNextColumn(); ImGui::Button(ICON_MD_UNDO); - ImGui::TableNextColumn(); ImGui::Button(ICON_MD_REDO); - ImGui::TableNextColumn(); ImGui::Text(ICON_MD_MORE_VERT); ImGui::TableNextColumn(); ImGui::Button(ICON_MD_ZOOM_OUT); - ImGui::TableNextColumn(); ImGui::Button(ICON_MD_ZOOM_IN); - ImGui::TableNextColumn(); ImGui::Text(ICON_MD_MORE_VERT); ImGui::TableNextColumn(); ImGui::Button(ICON_MD_DRAW); - + // Entrances ImGui::TableNextColumn(); ImGui::Button(ICON_MD_DOOR_FRONT); - + // Exits ImGui::TableNextColumn(); ImGui::Button(ICON_MD_DOOR_BACK); - + // Items ImGui::TableNextColumn(); ImGui::Button(ICON_MD_GRASS); - + // Sprites ImGui::TableNextColumn(); ImGui::Button(ICON_MD_PEST_CONTROL_RODENT); - + // Transports ImGui::TableNextColumn(); ImGui::Button(ICON_MD_ADD_LOCATION); - + // Music ImGui::TableNextColumn(); ImGui::Button(ICON_MD_MUSIC_NOTE); - ImGui::TableNextColumn(); ImGui::Text(ICON_MD_MORE_VERT); - + // Load Overworld ImGui::TableNextColumn(); if (ImGui::Button(ICON_MD_UPDATE)) { - overworld_.Load(rom_, tile16_blockset_bmp_.GetData()); + auto ow_status = overworld_.Load(rom_, tile16_blockset_bmp_.GetData()); + if (!ow_status.ok()) return ow_status; } ImGui::TableNextColumn(); @@ -138,6 +126,7 @@ void OverworldEditor::DrawToolset() { ImGui::EndTable(); } + return absl::OkStatus(); } void OverworldEditor::DrawOverworldMapSettings() { diff --git a/src/app/editor/overworld_editor.h b/src/app/editor/overworld_editor.h index 0b4eb8bb..1916d9c6 100644 --- a/src/app/editor/overworld_editor.h +++ b/src/app/editor/overworld_editor.h @@ -7,6 +7,7 @@ #include #include "absl/container/flat_hash_map.h" +#include "absl/status/status.h" #include "absl/status/statusor.h" #include "app/gfx/bitmap.h" #include "app/gfx/snes_palette.h" @@ -26,13 +27,19 @@ static constexpr unsigned int kNumSheetsToLoad = 223; static constexpr unsigned int kTile8DisplayHeight = 64; static constexpr float kInputFieldSize = 30.f; +static constexpr absl::string_view kToolsetColumnNames[] = { + "#undoTool", "#redoTool", "#drawTool", "#separator2", + "#zoomOutTool", "#zoomInTool", "#separator", "#history", + "#entranceTool", "#exitTool", "#itemTool", "#spriteTool", + "#transportTool", "#musicTool", "#separator3", "#reloadTool"}; + class OverworldEditor { public: void SetupROM(ROM &rom); - void Update(); + absl::Status Update(); private: - void DrawToolset(); + absl::Status DrawToolset(); void DrawOverworldMapSettings(); void DrawOverworldCanvas(); void DrawTileSelector();