feat(editor): project management UI in File menu

- File > Project submenu: New/Save/Load project, add zones
- "Add Current Zone to Project" captures loaded map/tile info
- Project path editable in the menu
- Zone count shown for quick reference
- Foundation for multi-zone custom expansion workflow:
  create project → add zones → edit each → export all as WCP
This commit is contained in:
Kelsi 2026-05-05 09:39:01 -07:00
parent 1d2f25f169
commit 18939af73d
2 changed files with 38 additions and 0 deletions

View file

@ -129,6 +129,39 @@ void EditorUI::processActions(EditorApp& app) {
void EditorUI::renderMenuBar(EditorApp& app) {
if (ImGui::BeginMainMenuBar()) {
if (ImGui::BeginMenu("File")) {
if (ImGui::BeginMenu("Project")) {
static char projPathBuf[256] = "projects/MyExpansion/project.json";
if (ImGui::MenuItem("New Project...")) {
app.getProject().name = "MyExpansion";
app.getProject().author = "Kelsi Davis";
app.getProject().zones.clear();
app.showToast("New project created");
}
if (ImGui::MenuItem("Save Project")) {
app.getProject().save(projPathBuf);
app.showToast("Project saved");
}
if (ImGui::MenuItem("Load Project")) {
if (app.getProject().load(projPathBuf))
app.showToast("Project loaded: " + app.getProject().name);
else
app.showToast("Failed to load project");
}
if (ImGui::MenuItem("Add Current Zone to Project") && app.hasTerrainLoaded()) {
ProjectZone pz;
pz.mapName = app.getLoadedMap();
pz.tileX = app.getLoadedTileX();
pz.tileY = app.getLoadedTileY();
app.getProject().zones.push_back(pz);
app.showToast("Zone added to project (" +
std::to_string(app.getProject().zones.size()) + " zones)");
}
ImGui::Separator();
ImGui::InputText("Path##proj", projPathBuf, sizeof(projPathBuf));
ImGui::Text("Zones: %zu", app.getProject().zones.size());
ImGui::EndMenu();
}
ImGui::Separator();
if (ImGui::MenuItem("New Terrain...", "Ctrl+N")) showNewDialog_ = true;
if (ImGui::MenuItem("Load ADT...", "Ctrl+O")) showLoadDialog_ = true;
if (ImGui::BeginMenu("Import Heightmap", app.hasTerrainLoaded())) {