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
14namespace yaze {
15namespace editor {
16
30
41 public:
42 using RestoreFn = std::function<void(const SpriteSnapshot&)>;
43
45 RestoreFn restore)
46 : before_(std::move(before)),
47 after_(std::move(after)),
48 restore_(std::move(restore)) {}
49
50 absl::Status Undo() override {
51 if (!restore_) {
52 return absl::InternalError("SpriteEditAction: no restore callback");
53 }
55 return absl::OkStatus();
56 }
57
58 absl::Status Redo() override {
59 if (!restore_) {
60 return absl::InternalError("SpriteEditAction: no restore callback");
61 }
63 return absl::OkStatus();
64 }
65
66 std::string Description() const override {
67 if (before_.sprite_data.sprName.empty()) {
68 return absl::StrFormat("Edit sprite #%d", before_.sprite_index);
69 }
70 return absl::StrFormat("Edit sprite '%s'", before_.sprite_data.sprName);
71 }
72
73 size_t MemoryUsage() const override {
74 // Rough estimate based on frame/tile/routine data
75 size_t before_size = 0;
76 for (const auto& frame : before_.sprite_data.editor.Frames) {
77 before_size += frame.Tiles.size() * sizeof(zsprite::OamTile);
78 }
79 size_t after_size = 0;
80 for (const auto& frame : after_.sprite_data.editor.Frames) {
81 after_size += frame.Tiles.size() * sizeof(zsprite::OamTile);
82 }
83 return before_size + after_size + sizeof(SpriteSnapshot) * 2;
84 }
85
86 bool CanMergeWith(const UndoAction& /*prev*/) const override { return false; }
87
88 private:
92};
93
94} // namespace editor
95} // namespace yaze
96
97#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.
std::vector< Frame > Frames
Definition zsprite.h:120