From 15e25836d4097c0179f6ed18d91611e3a0250664 Mon Sep 17 00:00:00 2001 From: Stanislaw Halik Date: Wed, 26 Oct 2022 21:07:33 +0200 Subject: add quicksave and quickload! --- editor/app.hpp | 3 +++ editor/json.cpp | 57 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 60 insertions(+) create mode 100644 editor/json.cpp (limited to 'editor') diff --git a/editor/app.hpp b/editor/app.hpp index 1fe2fc16..17e648ef 100644 --- a/editor/app.hpp +++ b/editor/app.hpp @@ -78,6 +78,9 @@ private: void do_keys(); enum_bitset get_nonrepeat_keys(); + void do_quicksave(); + void do_quickload(); + void reset_camera_offset(); void update_cursor_tile(const std::optional& pixel); diff --git a/editor/json.cpp b/editor/json.cpp new file mode 100644 index 00000000..7a64b207 --- /dev/null +++ b/editor/json.cpp @@ -0,0 +1,57 @@ +#include "app.hpp" +#include "floormat/main.hpp" +#include "src/world.hpp" +#include "serialize/json-helper.hpp" +#include "serialize/tile-atlas.hpp" +#include "serialize/world.hpp" +#include + +namespace floormat { + +#define save_dir "../save" +#define quicksave_file save_dir "/" "quicksave.json" +#define quicksave_tmp quicksave_file ".tmp" + +namespace Path = Corrade::Utility::Path; +using std::filesystem::path; + +static bool ensure_save_directory() +{ + if (Path::make(save_dir)) + return true; + else + { + fm_warn("failed to create save directory '%s'", save_dir); + return false; + } +} + +void app::do_quicksave() +{ + if (!ensure_save_directory()) + return; + auto& world = M->world(); + world.collect(true); + if (Path::exists(quicksave_tmp)) + Path::remove(quicksave_tmp); + fputs("quicksave...", stderr); fflush(stderr); + json_helper::to_json(world, quicksave_tmp); + Path::move(quicksave_tmp, quicksave_file); + fputs(" done\n", stderr); fflush(stderr); +} + +void app::do_quickload() +{ + ensure_save_directory(); + if (!Path::exists(quicksave_file)) + { + fm_warn("no quicksave"); + return; + } + auto& world = M->world(); + fputs("quickload...", stderr); fflush(stderr); + world = json_helper::from_json(quicksave_file); + fputs(" done\n", stderr); fflush(stderr); +} + +} // namespace floormat -- cgit v1.2.3