diff --git a/src/app/editor/screen_editor.cc b/src/app/editor/screen_editor.cc index 7dfd72d0..f60428f6 100644 --- a/src/app/editor/screen_editor.cc +++ b/src/app/editor/screen_editor.cc @@ -2,6 +2,14 @@ #include +#include +#include +#include +#include +#include + +#include "absl/status/statusor.h" +#include "absl/strings/string_view.h" #include "app/core/common.h" #include "app/core/constants.h" #include "app/gfx/bitmap.h" @@ -12,10 +20,32 @@ namespace yaze { namespace app { namespace editor { +namespace { + +absl::StatusOr GenerateMosaicChangeAssembly( + MosaicArray mosaic_tiles) { + std::fstream file("assets/asm/mosaic_change.asm", + std::ios::out | std::ios::in); + if (!file.is_open()) { + return absl::InvalidArgumentError( + "Couldn't open mosaic change template file"); + } + std::stringstream assembly; + + assembly << absl::StrCat("org ", kDefaultMosaicHook); + assembly << file.rdbuf(); + + file.close(); + return assembly.str(); +} + +} // namespace + ScreenEditor::ScreenEditor() { screen_canvas_.SetCanvasSize(ImVec2(512, 512)); } void ScreenEditor::Update() { TAB_BAR("##TabBar") + DrawMosaicEditor(); DrawTitleScreenEditor(); DrawNamingScreenEditor(); DrawOverworldMapEditor(); @@ -25,6 +55,20 @@ void ScreenEditor::Update() { END_TAB_BAR() } +void ScreenEditor::DrawMosaicEditor() { + TAB_ITEM("Mosaic Transitions") + if (ImGui::Button("GenerateMosaicChangeAssembly")) { + auto mosaic = GenerateMosaicChangeAssembly(mosaic_tiles_); + if (!mosaic.ok()) { + std::cout << "Failed to generate mosaic change assembly"; + } else { + std::cout << "Successfully generated mosaic change assembly"; + std::cout << mosaic.value(); + } + } + END_TAB_ITEM() +} + void ScreenEditor::DrawTitleScreenEditor() { TAB_ITEM("Title Screen") END_TAB_ITEM() diff --git a/src/app/editor/screen_editor.h b/src/app/editor/screen_editor.h index 23a56c4b..c4f17545 100644 --- a/src/app/editor/screen_editor.h +++ b/src/app/editor/screen_editor.h @@ -12,12 +12,16 @@ namespace yaze { namespace app { namespace editor { +using MosaicArray = std::array; +constexpr char kDefaultMosaicHook[] = "$02AADB"; + class ScreenEditor { public: ScreenEditor(); void Update(); private: + void DrawMosaicEditor(); void DrawTitleScreenEditor(); void DrawNamingScreenEditor(); void DrawOverworldMapEditor(); @@ -28,6 +32,8 @@ class ScreenEditor { void DrawCanvas(); void DrawToolset(); + MosaicArray mosaic_tiles_; + zelda3::Screen current_screen_; gui::Canvas screen_canvas_; };