summaryrefslogtreecommitdiff
path: root/src/editor.cpp
diff options
context:
space:
mode:
authorilotterytea <iltsu@alright.party>2025-02-02 23:07:04 +0500
committerilotterytea <iltsu@alright.party>2025-02-02 23:07:04 +0500
commitb345c36cafa8cddbc27d03c01ee851b0e0947db1 (patch)
tree0947066310c2d6d48696b00e1852c0c6ed2061cf /src/editor.cpp
parent58fdbd8edfbb85a06c6c4bc0edafa46faf0709ef (diff)
feat: "create a new package" window
Diffstat (limited to 'src/editor.cpp')
-rw-r--r--src/editor.cpp50
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;