yaze 0.3.2
Link to the Past ROM Editor
 
Loading...
Searching...
No Matches
scratch_workspace.h
Go to the documentation of this file.
1#ifndef YAZE_APP_EDITOR_OVERWORLD_SCRATCH_WORKSPACE_H_
2#define YAZE_APP_EDITOR_OVERWORLD_SCRATCH_WORKSPACE_H_
3
4#include <array>
5#include <cstdint>
6#include <filesystem>
7#include <optional>
8#include <string>
9#include <vector>
10
11#include "absl/status/status.h"
12#include "absl/status/statusor.h"
13#include "absl/strings/string_view.h"
15
16namespace yaze::editor {
17
18// Detached layouts contain Tile16 references, never world-map mutations.
20 uint64_t id = 1;
21 std::string name = "Scratch Space";
22 int width = 16;
23 int height = 16;
24 bool in_use = false;
25 int source_map = -1;
26 std::array<std::array<int, 32>, 32> tile_data{}; // [x][y]
27
28 bool operator==(const ScratchPage& other) const;
29 TileBrush AsBrush() const;
30};
31
33 std::vector<ScratchPage> pages = {ScratchPage{}};
34 uint64_t selected_id = 1;
35 uint64_t next_id = 2;
36
37 bool operator==(const ScratchWorkspaceState& other) const;
38};
39
41 public:
42 static constexpr size_t kMaxPages = 32;
43
44 const ScratchWorkspaceState& state() const { return state_; }
47 const ScratchPage& current() const;
48 bool Select(uint64_t id);
49 absl::Status AddPage(bool duplicate = false);
50 absl::Status DeletePage();
51 absl::Status Rename(absl::string_view name);
52 absl::Status Resize(int width, int height);
53 absl::Status Stamp(const TileBrush& brush, int x, int y);
54 absl::Status Capture(const TileBrush& brush, int source_map);
55 void Clear();
56
57 // V1 is the original single ScratchPad.dat. Invalid input never mutates state.
58 absl::Status Parse(absl::string_view contents);
59 std::string Serialize() const;
60 absl::Status Load(const std::filesystem::path& path);
61 // Reject another session's changes instead of silently overwriting its pages.
62 absl::Status Save(const std::filesystem::path& path);
63
64 private:
66 std::optional<std::string> saved_contents_;
67 bool file_loaded_ = false;
68};
69
70} // namespace yaze::editor
71
72#endif // YAZE_APP_EDITOR_OVERWORLD_SCRATCH_WORKSPACE_H_
absl::Status Capture(const TileBrush &brush, int source_map)
absl::Status Load(const std::filesystem::path &path)
absl::Status Resize(int width, int height)
const ScratchWorkspaceState & state() const
absl::Status Stamp(const TileBrush &brush, int x, int y)
std::optional< std::string > saved_contents_
static constexpr size_t kMaxPages
void Restore(const ScratchWorkspaceState &state)
absl::Status Parse(absl::string_view contents)
absl::Status Rename(absl::string_view name)
absl::Status AddPage(bool duplicate=false)
absl::Status Save(const std::filesystem::path &path)
Editors are the view controllers for the application.
std::array< std::array< int, 32 >, 32 > tile_data
bool operator==(const ScratchPage &other) const
bool operator==(const ScratchWorkspaceState &other) const
std::vector< ScratchPage > pages