yaze 0.3.2
Link to the Past ROM Editor
 
Loading...
Searching...
No Matches
sprite_undo_actions.h
Go to the documentation of this file.
1#ifndef YAZE_APP_EDITOR_SPRITE_SPRITE_UNDO_ACTIONS_H_
2#define YAZE_APP_EDITOR_SPRITE_SPRITE_UNDO_ACTIONS_H_
3
4#include <cstddef>
5#include <functional>
6#include <string>
7#include <utility>
8
9#include "absl/status/status.h"
10#include "absl/strings/str_format.h"
13#include "core/sprite_asset.h"
14
15namespace yaze {
16namespace editor {
17
32
43 public:
44 using RestoreFn = std::function<void(const SpriteSnapshot&)>;
45
47 RestoreFn restore)
48 : before_(std::move(before)),
49 after_(std::move(after)),
50 restore_(std::move(restore)) {}
51
52 absl::Status Undo() override {
53 if (!restore_) {
54 return absl::InternalError("SpriteEditAction: no restore callback");
55 }
57 return absl::OkStatus();
58 }
59
60 absl::Status Redo() override {
61 if (!restore_) {
62 return absl::InternalError("SpriteEditAction: no restore callback");
63 }
65 return absl::OkStatus();
66 }
67
68 std::string Description() const override {
69 if (before_.sprite_data.sprName.empty()) {
70 return absl::StrFormat("Edit sprite #%d", before_.sprite_index);
71 }
72 return absl::StrFormat("Edit sprite '%s'", before_.sprite_data.sprName);
73 }
74
75 size_t MemoryUsage() const override {
76 // Rough estimate based on frame/tile/routine data
77 size_t before_size = 0;
78 for (const auto& frame : before_.sprite_data.editor.Frames) {
79 before_size += frame.Tiles.size() * sizeof(zsprite::OamTile);
80 }
81 size_t after_size = 0;
82 for (const auto& frame : after_.sprite_data.editor.Frames) {
83 after_size += frame.Tiles.size() * sizeof(zsprite::OamTile);
84 }
85 return before_size + after_size + sizeof(SpriteSnapshot) * 2;
86 }
87
88 bool CanMergeWith(const UndoAction& /*prev*/) const override { return false; }
89
90 private:
94};
95
96} // namespace editor
97} // namespace yaze
98
99#endif // YAZE_APP_EDITOR_SPRITE_SPRITE_UNDO_ACTIONS_H_
Undoable action for edits to a custom ZSprite.
bool CanMergeWith(const UndoAction &) const override
std::string Description() const override
Human-readable description (e.g., "Paint 12 tiles on map 5")
size_t MemoryUsage() const override
Approximate memory footprint for budget enforcement.
std::function< void(const SpriteSnapshot &)> RestoreFn
SpriteEditAction(SpriteSnapshot before, SpriteSnapshot after, RestoreFn restore)
Abstract base for all undoable actions (Command pattern)
Definition undo_action.h:20
Snapshot of a custom ZSprite's editable state for undo/redo.
project::SpriteAssetBinding binding
std::vector< Frame > Frames
Definition zsprite.h:125