Add zeml layout to OverworldEditor
This commit is contained in:
19
assets/layouts/overworld.zeml
Normal file
19
assets/layouts/overworld.zeml
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
BeginTabBar title="##OwEditorTabBar" {
|
||||||
|
BeginTabItem title="Map Editor" {
|
||||||
|
Function id="owToolset",
|
||||||
|
|
||||||
|
Table id="##owEditTable" count="2" flags="Resizable|Reorderable|Hideable|BordersOuter|BordersV" {
|
||||||
|
TableSetupColumn title="Canvas" flags="WidthStretch",
|
||||||
|
TableSetupColumn title="Tile Selector" flags="WidthFixed" width="256",
|
||||||
|
TableHeadersRow
|
||||||
|
TableNextRow,
|
||||||
|
TableNextColumn,
|
||||||
|
Function id="OverworldCanvas",
|
||||||
|
TableNextColumn,
|
||||||
|
Function id="OverworldTileSelector",
|
||||||
|
}
|
||||||
|
}
|
||||||
|
BeginTabItem title="Usage Statistics" {
|
||||||
|
Function id="OwUsageStats"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -43,6 +43,25 @@ using ImGui::TableNextRow;
|
|||||||
using ImGui::TableSetupColumn;
|
using ImGui::TableSetupColumn;
|
||||||
using ImGui::Text;
|
using ImGui::Text;
|
||||||
|
|
||||||
|
void OverworldEditor::InitializeZeml() {
|
||||||
|
// Load zeml string from layouts/overworld.zeml
|
||||||
|
std::string layout = gui::zeml::LoadFile("overworld.zeml");
|
||||||
|
// Parse the zeml string into a Node object
|
||||||
|
layout_node_ = gui::zeml::Parse(layout);
|
||||||
|
|
||||||
|
gui::zeml::Bind(&*layout_node_.GetNode("OverworldCanvas"),
|
||||||
|
[this]() { DrawOverworldCanvas(); });
|
||||||
|
gui::zeml::Bind(&*layout_node_.GetNode("OverworldTileSelector"),
|
||||||
|
[this]() { status_ = DrawTileSelector(); });
|
||||||
|
gui::zeml::Bind(&*layout_node_.GetNode("OwUsageStats"), [this]() {
|
||||||
|
if (rom()->is_loaded()) {
|
||||||
|
status_ = UpdateUsageStats();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
gui::zeml::Bind(&*layout_node_.GetNode("owToolset"),
|
||||||
|
[this]() { status_ = DrawToolset(); });
|
||||||
|
}
|
||||||
|
|
||||||
absl::Status OverworldEditor::Update() {
|
absl::Status OverworldEditor::Update() {
|
||||||
if (rom()->is_loaded() && !all_gfx_loaded_) {
|
if (rom()->is_loaded() && !all_gfx_loaded_) {
|
||||||
tile16_editor_.InitBlockset(tile16_blockset_bmp_, current_gfx_bmp_,
|
tile16_editor_.InitBlockset(tile16_blockset_bmp_, current_gfx_bmp_,
|
||||||
@@ -57,38 +76,12 @@ absl::Status OverworldEditor::Update() {
|
|||||||
|
|
||||||
RETURN_IF_ERROR(UpdateFullscreenCanvas());
|
RETURN_IF_ERROR(UpdateFullscreenCanvas());
|
||||||
|
|
||||||
TAB_BAR("##OWEditorTabBar")
|
gui::zeml::Render(layout_node_);
|
||||||
TAB_ITEM("Map Editor")
|
|
||||||
status_ = UpdateOverworldEdit();
|
|
||||||
END_TAB_ITEM()
|
|
||||||
TAB_ITEM("Usage Statistics")
|
|
||||||
if (rom()->is_loaded()) {
|
|
||||||
status_ = UpdateUsageStats();
|
|
||||||
}
|
|
||||||
END_TAB_ITEM()
|
|
||||||
END_TAB_BAR()
|
|
||||||
|
|
||||||
CLEAR_AND_RETURN_STATUS(status_);
|
CLEAR_AND_RETURN_STATUS(status_);
|
||||||
return absl::OkStatus();
|
return absl::OkStatus();
|
||||||
}
|
}
|
||||||
|
|
||||||
absl::Status OverworldEditor::UpdateOverworldEdit() {
|
|
||||||
RETURN_IF_ERROR(DrawToolset())
|
|
||||||
if (BeginTable(kOWEditTable.data(), 2, kOWEditFlags, ImVec2(0, 0))) {
|
|
||||||
TableSetupColumn("Canvas", ImGuiTableColumnFlags_WidthStretch,
|
|
||||||
ImGui::GetContentRegionAvail().x);
|
|
||||||
TableSetupColumn("Tile Selector", ImGuiTableColumnFlags_WidthFixed, 256);
|
|
||||||
TableHeadersRow();
|
|
||||||
TableNextRow();
|
|
||||||
TableNextColumn();
|
|
||||||
DrawOverworldCanvas();
|
|
||||||
TableNextColumn();
|
|
||||||
RETURN_IF_ERROR(DrawTileSelector());
|
|
||||||
ImGui::EndTable();
|
|
||||||
}
|
|
||||||
return absl::OkStatus();
|
|
||||||
}
|
|
||||||
|
|
||||||
absl::Status OverworldEditor::UpdateFullscreenCanvas() {
|
absl::Status OverworldEditor::UpdateFullscreenCanvas() {
|
||||||
if (overworld_canvas_fullscreen_) {
|
if (overworld_canvas_fullscreen_) {
|
||||||
static bool use_work_area = true;
|
static bool use_work_area = true;
|
||||||
|
|||||||
@@ -24,6 +24,7 @@
|
|||||||
#include "app/gui/canvas.h"
|
#include "app/gui/canvas.h"
|
||||||
#include "app/gui/icons.h"
|
#include "app/gui/icons.h"
|
||||||
#include "app/gui/pipeline.h"
|
#include "app/gui/pipeline.h"
|
||||||
|
#include "app/gui/zeml.h"
|
||||||
#include "app/rom.h"
|
#include "app/rom.h"
|
||||||
#include "app/zelda3/overworld/overworld.h"
|
#include "app/zelda3/overworld/overworld.h"
|
||||||
|
|
||||||
@@ -84,6 +85,8 @@ class OverworldEditor : public Editor,
|
|||||||
public context::EntranceContext,
|
public context::EntranceContext,
|
||||||
public core::ExperimentFlags {
|
public core::ExperimentFlags {
|
||||||
public:
|
public:
|
||||||
|
void InitializeZeml();
|
||||||
|
|
||||||
absl::Status Update() final;
|
absl::Status Update() final;
|
||||||
absl::Status Undo() { return absl::UnimplementedError("Undo"); }
|
absl::Status Undo() { return absl::UnimplementedError("Undo"); }
|
||||||
absl::Status Redo() { return absl::UnimplementedError("Redo"); }
|
absl::Status Redo() { return absl::UnimplementedError("Redo"); }
|
||||||
@@ -128,7 +131,6 @@ class OverworldEditor : public Editor,
|
|||||||
absl::Status LoadGraphics();
|
absl::Status LoadGraphics();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
absl::Status UpdateOverworldEdit();
|
|
||||||
absl::Status UpdateFullscreenCanvas();
|
absl::Status UpdateFullscreenCanvas();
|
||||||
|
|
||||||
absl::Status DrawToolset();
|
absl::Status DrawToolset();
|
||||||
@@ -283,6 +285,7 @@ class OverworldEditor : public Editor,
|
|||||||
|
|
||||||
gfx::BitmapTable animated_maps_;
|
gfx::BitmapTable animated_maps_;
|
||||||
|
|
||||||
|
gui::zeml::Node layout_node_;
|
||||||
absl::Status status_;
|
absl::Status status_;
|
||||||
};
|
};
|
||||||
} // namespace editor
|
} // namespace editor
|
||||||
|
|||||||
Reference in New Issue
Block a user