1#ifndef YAZE_APP_EDITOR_DUNGEON_UNDO_ACTIONS_H_
2#define YAZE_APP_EDITOR_DUNGEON_UNDO_ACTIONS_H_
11#include "absl/status/status.h"
12#include "absl/strings/str_format.h"
32 std::function<void(
int room_id,
const std::vector<zelda3::RoomObject>&,
33 const std::vector<size_t>& selected_indices)>;
36 std::vector<size_t> before_selection,
37 std::vector<zelda3::RoomObject> after,
38 std::vector<size_t> after_selection,
RestoreFn restore)
46 absl::Status
Undo()
override {
48 return absl::InternalError(
"DungeonObjectsAction: no restore callback");
51 return absl::OkStatus();
54 absl::Status
Redo()
override {
56 return absl::InternalError(
"DungeonObjectsAction: no restore callback");
59 return absl::OkStatus();
63 return absl::StrFormat(
"Edit room %03X objects",
room_id_);
83 std::vector<zelda3::RoomObject>
after_;
108 return absl::InternalError(
109 "DungeonCustomCollisionAction: no restore callback");
112 return absl::OkStatus();
117 return absl::InternalError(
118 "DungeonCustomCollisionAction: no restore callback");
121 return absl::OkStatus();
125 return absl::StrFormat(
"Edit room %03X custom collision",
room_id_);
154 return absl::InternalError(
"DungeonWaterFillAction: no restore callback");
157 return absl::OkStatus();
162 return absl::InternalError(
"DungeonWaterFillAction: no restore callback");
165 return absl::OkStatus();
169 return absl::StrFormat(
"Edit room %03X water fill",
room_id_);
size_t MemoryUsage() const override
Approximate memory footprint for budget enforcement.
zelda3::CustomCollisionMap before_
std::string Description() const override
Human-readable description (e.g., "Paint 12 tiles on map 5")
absl::Status Undo() override
std::function< void(int room_id, const zelda3::CustomCollisionMap &)> RestoreFn
DungeonCustomCollisionAction(int room_id, zelda3::CustomCollisionMap before, zelda3::CustomCollisionMap after, RestoreFn restore)
absl::Status Redo() override
bool CanMergeWith(const UndoAction &) const override
zelda3::CustomCollisionMap after_
Undoable action for dungeon room object edits.
std::vector< zelda3::RoomObject > after_
std::vector< zelda3::RoomObject > before_
std::vector< size_t > before_selection_
std::function< void(int room_id, const std::vector< zelda3::RoomObject > &, const std::vector< size_t > &selected_indices)> RestoreFn
bool CanMergeWith(const UndoAction &) const override
size_t MemoryUsage() const override
Approximate memory footprint for budget enforcement.
std::vector< size_t > after_selection_
absl::Status Undo() override
std::string Description() const override
Human-readable description (e.g., "Paint 12 tiles on map 5")
DungeonObjectsAction(int room_id, std::vector< zelda3::RoomObject > before, std::vector< size_t > before_selection, std::vector< zelda3::RoomObject > after, std::vector< size_t > after_selection, RestoreFn restore)
absl::Status Redo() override
std::string Description() const override
Human-readable description (e.g., "Paint 12 tiles on map 5")
std::function< void(int room_id, const WaterFillSnapshot &)> RestoreFn
bool CanMergeWith(const UndoAction &) const override
absl::Status Undo() override
size_t MemoryUsage() const override
Approximate memory footprint for budget enforcement.
DungeonWaterFillAction(int room_id, WaterFillSnapshot before, WaterFillSnapshot after, RestoreFn restore)
WaterFillSnapshot before_
absl::Status Redo() override
Abstract base for all undoable actions (Command pattern)
std::vector< uint16_t > offsets