diff options
| author | ilotterytea <iltsu@alright.party> | 2025-02-02 23:07:04 +0500 |
|---|---|---|
| committer | ilotterytea <iltsu@alright.party> | 2025-02-02 23:07:04 +0500 |
| commit | b345c36cafa8cddbc27d03c01ee851b0e0947db1 (patch) | |
| tree | 0947066310c2d6d48696b00e1852c0c6ed2061cf /src/editor.cpp | |
| parent | 58fdbd8edfbb85a06c6c4bc0edafa46faf0709ef (diff) | |
feat: "create a new package" window
Diffstat (limited to 'src/editor.cpp')
| -rw-r--r-- | src/editor.cpp | 50 |
1 files changed, 48 insertions, 2 deletions
diff --git a/src/editor.cpp b/src/editor.cpp index 985167a..5417a59 100644 --- a/src/editor.cpp +++ b/src/editor.cpp @@ -193,6 +193,39 @@ namespace silly::editor { ImGui::End(); } + void Editor::createNewPackage(const sf::RenderWindow &window) { + if (!this->newPackageState.has_value()) { + this->newPackageState = std::make_optional((NewPackageState){}); + } + + sf::Vector2u windowSize = window.getSize(); + + NewPackageState &state = this->newPackageState.value(); + + ImGui::SetNextWindowPos( + ImVec2(windowSize.x / 2.0f - 100, windowSize.y / 2.0f - 40)); + ImGui::SetNextWindowSize(ImVec2(200, 80)); + ImGui::Begin("New package", NULL, + ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoResize); + + ImGui::InputText("Name", state.name, sizeof(state.name)); + std::string name(state.name); + utils::trim(name); + + if (ImGui::Button("Create") && !name.empty()) { + this->package.clear(); + this->package.set_name(name); + ImGui::SetWindowCollapsed(true); + } + + if (ImGui::IsWindowCollapsed()) { + ImGui::SetWindowCollapsed(false); + this->newPackageState = std::nullopt; + } + + ImGui::End(); + } + void Editor::createNewFloor(const sf::RenderWindow &window) { if (!this->newFloorState.has_value()) { this->newFloorState = std::make_optional((NewFloorState){}); @@ -246,9 +279,11 @@ namespace silly::editor { ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoResize); ImGui::InputText("Name", state.name, sizeof(state.name)); + std::string name(state.name); + utils::trim(name); - if (ImGui::Button("Create")) { - TileLevel level(state.name); + if (ImGui::Button("Create") && !name.empty()) { + TileLevel level(name); this->package.add_level(level); this->package.move_to_level_index(this->package.get_levels().size() - 1); ImGui::SetWindowCollapsed(true); @@ -267,6 +302,12 @@ namespace silly::editor { if (ImGui::BeginMainMenuBar()) { if (ImGui::BeginMenu("File")) { + if (ImGui::MenuItem("New package")) { + createNewPackage(window); + } + + ImGui::Separator(); + if (!pkg.get_levels().empty() && !pkg.get_current_level().get_floors().empty()) { if (ImGui::MenuItem("Export")) { @@ -512,6 +553,11 @@ namespace silly::editor { ImGui::End(); + if (package.get_name().empty() || this->newPackageState.has_value()) { + this->createNewPackage(window); + return; + } + if (package.get_levels().empty() || this->newLevelState.has_value()) { this->createNewLevel(window); return; |
