1#ifndef YAZE_APP_EDITOR_DUNGEON_EDITOR_V2_H
2#define YAZE_APP_EDITOR_DUNGEON_EDITOR_V2_H
12#include <unordered_map>
16#include "absl/status/status.h"
17#include "absl/status/statusor.h"
18#include "absl/strings/str_format.h"
33#include "imgui/imgui.h"
51class CustomCollisionPanel;
52class DungeonEntrancesPanel;
53class DungeonEditorPaletteRefreshTestPeer;
54class DungeonEditorV2MinecartTrackTestPeer;
55class DungeonEditorV2ObjectTileEditorTestPeer;
56class DungeonEditorV2EntranceCameraTestPeer;
57class DungeonEditorEntrancePropertiesTestPeer;
58class DungeonEditorV2RegularEntranceTestPeer;
59class DungeonEditorV2ReloadTestPeer;
60class DungeonEditorV2ShortcutTestPeer;
61class DungeonEditorV2SpawnPointTestPeer;
62class DungeonEditorV2SpawnRejectionTestPeer;
63class MinecartTrackEditorPanel;
64struct MinecartCollisionStamp;
66class ObjectCoveragePanel;
67class ObjectTileEditorPanel;
68class OverlayManagerPanel;
69class PaletteEditorContent;
70class RoomTagEditorPanel;
71class RoomMatrixContent;
128 const std::function<
void(
int,
zelda3::Room&,
const std::string&,
bool,
146 [
game_data](
int, std::unique_ptr<DungeonCanvasViewer>& viewer) {
161 absl::Status
Load()
override;
162 absl::Status
Update()
override;
163 absl::Status
Undo()
override;
164 absl::Status
Redo()
override;
165 absl::Status
Cut()
override;
166 absl::Status
Copy()
override;
167 absl::Status
Paste()
override;
168 absl::Status
Find()
override {
return absl::UnimplementedError(
"Find"); }
174 absl::Status
Save()
override;
178 bool room_data_only =
false)
const;
191 int target_room_id,
int source_room_id,
const std::string& json,
206 const std::vector<RoomMetadataRequest>& requests);
207 absl::Status
EditChest(
int room_id,
size_t index, uint8_t item_id,
209 absl::Status
DeleteChest(
int room_id,
size_t index);
230 const bool rom_changed =
rom_ !=
rom;
273 return "No ROM loaded";
275 return "ROM failed to load";
276 return absl::StrFormat(
"ROM loaded: %s",
rom_->
title());
313 "dungeon.minecart_tracks";
412 std::vector<DungeonRenderEntranceCandidate>
419 int slot_index)
const;
428 std::shared_ptr<const int> gesture);
432 std::shared_ptr<const int> gesture);
466 bool rebind_project =
false);
474 absl::Status
SaveRoomImpl(
int room_id,
bool room_data_only);
476 const std::function<absl::Status()>& operation);
482 std::array<zelda3::RoomEntrance, zelda3::kNumDungeonEntranceSlots>
entrances_;
483 std::array<zelda3::DungeonSpawnPoint, zelda3::kNumDungeonSpawnPoints>
486 mutable std::future<absl::StatusOr<zelda3::RoomCensus>>
497 std::vector<std::pair<int, zelda3::Room::SaveDirtySnapshot>>
room_states;
589 std::unordered_map<int, std::shared_ptr<gui::PanelWindow>>
room_cards_;
611 std::optional<DungeonSelectionEditPlan>
plan;
644 if (pending.room_id >= 0) {
687 int room_id,
const std::vector<zelda3::RoomObject>& objects,
688 const std::vector<size_t>& selected_indices,
689 const std::vector<chest_data>& chests);
691 int room_id,
const std::vector<zelda3::RoomObject>& objects,
692 const std::vector<chest_data>& chests,
bool check_streams =
true);
696 int room_id,
const std::vector<zelda3::Sprite>& sprites);
698 int room_id,
const std::vector<zelda3::PotItem>& items);
699 absl::StatusOr<std::vector<std::pair<uint32_t, uint32_t>>>
701 const std::vector<DungeonSelectionEditPlan>& candidates)
const;
703 int room_id,
const std::vector<zelda3::Room::Door>& doors);
705 int room_id,
const std::vector<zelda3::RoomObject>& objects,
706 const std::vector<chest_data>& chests,
707 const std::vector<size_t>& selection);
713 const std::vector<DungeonSelectionEditPlan>& plans,
bool after);
723 std::string description);
727 const std::vector<std::pair<int, zelda3::Room::MetadataSnapshot>>&
746 const std::vector<zelda3::TrackCollisionResult>& preview,
749 const std::vector<DungeonCustomCollisionSnapshot>& snapshots);
The Rom class is used to load, save, and modify Rom data. This is a generic SNES ROM container and do...
DungeonEditorV2 - Simplified dungeon editor using component delegation.
friend class DungeonEditorEntityUndoTestPeer
void BeginCollisionUndoSnapshot(int room_id)
class MinecartTrackEditorPanel * minecart_track_editor_panel_
int GetOrCreateRoomPanelSlotId(int room_id)
void ConfigureMinecartProjectCallbacks()
std::deque< int > recent_rooms_
friend class DungeonEditorPaletteRefreshTestPeer
absl::Status SaveRoom(int room_id)
absl::Status RepairEntranceCamera(int slot_index)
void SetAgentMode(bool enabled)
EditorContextSnapshot BuildContextSnapshot() const override
std::optional< zelda3::RoomCensus > dungeon_render_context_census_
DungeonRenderContext ResolveDungeonRenderContextForRoom(int room_id) const
absl::Status EditRoomGraphicsSheet(int room_id, int slot, int sheet_id)
absl::Status RestoreEntranceCameraState(int slot_index, const DungeonEntranceCameraState &state)
bool dungeon_render_context_census_attempted_
void CommitSaveTransaction() override
friend class DungeonEditorV2SpawnRejectionTestPeer
friend class DungeonEditorEntrancePropertiesTestPeer
std::unique_ptr< CustomCollisionPanel > owned_custom_collision_panel_
friend class DungeonSelectionEditsTestPeer
friend class DungeonEditorV2MinecartTrackTestPeer
class CustomCollisionPanel * custom_collision_panel_
void ConfigureViewerUndoHooks(DungeonCanvasViewer *viewer)
bool CanHandleDungeonNavigationShortcut() const
std::function< const zelda3::Overworld *()> room_graphics_overworld_provider_
std::optional< int > room_canvas_delete_shortcut_frame_
friend class DungeonEditorV2RegularEntranceTestPeer
bool HasPendingRoomChanges() const
friend class DungeonEditorV2RomSafetyTest_SaveAllRoomsRollsBackEarlierWritesOnLateFailure_Test
bool observed_custom_objects_enabled_
bool CanUndo() const override
void RefreshEntranceDirtyState(int slot_index)
friend class DungeonEditorPaletteRefreshTest_CachedRoomRefreshesThroughViewerCompositePreparation_Test
absl::Status PreflightObjectMutation(int room_id, const std::vector< zelda3::RoomObject > &objects, const std::vector< chest_data > &chests, bool check_streams=true)
void RefreshViewerRuntimeContext(DungeonCanvasViewer *viewer, int room_id, bool rebind_project=false)
uint64_t current_palette_group_id_
absl::Status PreflightRoomTransfer(const DungeonRoomTransferPlan &plan)
void ToggleWorkbenchWorkflowMode(bool show_toast=true)
friend class DungeonEditorPaletteRefreshTest_SharedHudEditRefreshesRoomUsingDifferentDungeonPalette_Test
void RestoreRoomWaterFill(int room_id, const WaterFillSnapshot &snap)
absl::Status RestoreRoomEntities(int room_id, MutationDomain domain, const DungeonEntitySnapshot &snapshot)
void add_room(int room_id)
void ContributeStatus(StatusBar *status_bar) override
void OpenGraphicsEditorForObject(int room_id, const zelda3::RoomObject &object)
bool CycleRoomSelection(int direction)
uint64_t entrance_property_save_generation_
absl::Status OpenObjectTileEditorForObject(int room_id, const zelda3::RoomObject &object)
absl::Status EnsureMinecartTrackEditorPanel()
class ItemEditorPanel * item_editor_panel_
PendingUndo pending_undo_
std::unique_ptr< RoomTagEditorPanel > owned_room_tag_editor_panel_
class ObjectCoveragePanel * object_coverage_panel_
absl::Status SaveRoomData(int room_id)
void FinalizeSelectionUndoAction()
void ShowRoomPanel(int room_id)
std::unique_ptr< ObjectCoveragePanel > CreateObjectCoveragePanel()
int next_room_panel_slot_id_
absl::StatusOr< zelda3::RoomsetUsageReport > GetRoomGraphicsUsage(int roomset) const
void SetDependencies(const EditorDependencies &deps) override
friend class DungeonPotPlacementTestPeer
int * mutable_current_room_id()
void BeginEntityUndoSnapshot(int room_id, MutationDomain domain)
std::unique_ptr< ObjectCoveragePanel > owned_object_coverage_panel_
ObjectSelectorContent * object_selector_panel() const
absl::Status ApplyRoomTransfer(const DungeonRoomTransferPlan &plan)
util::LruCache< int, std::unique_ptr< DungeonCanvasViewer > > room_viewers_
gfx::PaletteGroup current_palette_group_
void OnEntranceSelected(int entrance_id)
static constexpr const char * kEntranceListId
absl::Status Save() override
DungeonEntitySnapshot CaptureRoomEntities(int room_id, MutationDomain domain)
absl::Status CommitSelectionEdit(const DungeonSelectionEditPlan &plan, bool continuous)
gfx::IRenderer * renderer_
void TouchViewerLru(int room_id)
friend class DungeonEditorV2EntranceCameraTestPeer
PendingStandaloneToolWindow pending_standalone_tool_window_
class SpriteEditorPanel * sprite_editor_panel_
void FocusRoom(int room_id)
void HandleObjectPlaced(const zelda3::RoomObject &obj)
std::string GetRomStatus() const override
DoorEditorContent * door_editor_panel() const
std::unique_ptr< zelda3::DungeonEditorSystem > dungeon_editor_system_
std::array< zelda3::RoomEntrance, zelda3::kNumDungeonEntranceSlots > entrances_
friend class DungeonEditorV2ReloadTestPeer
void OpenWindow(const std::string &window_id)
absl::Status PreflightPotItemPlacement(int room_id, const std::vector< zelda3::PotItem > &items)
friend class DungeonEditorV2ObjectTileEditorTestPeer
void FinalizeWaterFillUndoAction(int room_id)
void SyncPanelsToRoom(int room_id)
DoorEditorContent * door_editor_panel_
absl::Status ApplyDoorConnection(const DungeonConnectionPlan &plan)
absl::Status Copy() override
void Initialize() override
std::unordered_map< int, int > room_panel_slot_ids_
friend class DungeonEditorV2RomSafetyTest_UndoSnapshotLeakDetection_Test
absl::Status EditRoomMetadataBatch(const std::vector< RoomMetadataRequest > &requests)
class DungeonWorkbenchContent * workbench_panel_
friend class DungeonRoomTransferTestPeer
bool automatic_entrance_preview_
int ResolveEntranceRoomId(int entrance_id) const
void SynchronizeCustomObjectAssets()
bool IsWorkbenchWorkflowEnabled() const
absl::Status ValidateSaveScope(int only_room=-1, bool room_data_only=false) const
friend class DungeonEditorV2RomSafetyTest_ViewerCacheLRUEviction_Test
void OnRoomSelected(int room_id, bool request_focus=true)
void RefreshSelectionEditViews(int room_id, const DungeonSelectionEditState *selection)
void FinalizePendingUndoActions()
absl::Status ApplyMinecartCollisionStamp(int room_id, const zelda3::CustomCollisionMap &expected, const MinecartCollisionStamp &stamp)
absl::StatusOr< std::vector< std::pair< uint32_t, uint32_t > > > PlanPendingRoomStreamRanges(const std::vector< DungeonSelectionEditPlan > &candidates) const
friend class DungeonEditorV2RomSafetyTest_ViewerCacheNeverEvictsActiveRooms_Test
std::optional< DungeonEntranceCameraState > GetEntranceCameraState(int slot_index) const
std::vector< int > pinned_rooms_
~DungeonEditorV2() override
absl::Status RestoreEntranceProperties(int slot_index, const zelda3::RoomEntrance &entrance)
void FinalizeEntityUndoAction(int room_id, MutationDomain domain)
PendingCollisionUndo pending_collision_undo_
void FocusObjectCoverage(int room_id, const zelda3::RoomObject &object)
void ConfigureEntrancePropertyEditCallbacks(DungeonEntrancesPanel *panel)
void RefreshEntranceCameraOverlays()
ObjectTileEditorPanel * object_tile_editor_panel_
absl::Status PreflightDoorMutation(int room_id, const std::vector< zelda3::Room::Door > &doors)
ObjectSelectorContent * object_selector_panel_
OverlayManagerPanel * overlay_manager_panel_
absl::Status PrepareProjectSave()
void ProcessDeferredTextures()
void RollbackSaveTransaction() override
absl::Status RestoreRoomObjects(int room_id, const std::vector< zelda3::RoomObject > &objects, const std::vector< size_t > &selected_indices, const std::vector< chest_data > &chests)
uint8_t ResolveSelectedEntranceBlocksetForRoom(int room_id) const
absl::Status PreflightSpriteMutation(int room_id, const std::vector< zelda3::Sprite > &sprites)
DungeonCanvasViewer * GetWorkbenchCompareViewer(int room_id)
friend class DungeonRoomEditsTestPeer
bool CycleObjectSelection(int direction)
void WireViewerPanelCallbacks(DungeonCanvasViewer *viewer)
gfx::SnesPalette current_palette_
absl::Status RestoreSelectionEditBatch(const std::vector< DungeonSelectionEditPlan > &plans, bool after)
absl::Status EditRoomMetadata(int room_id, const RoomMetadataEdit &edit)
absl::Status EnsureRoomTransferLoaded(int room_id)
gfx::IRenderer * renderer() const
ImVector< int > active_rooms_
std::vector< DungeonRenderEntranceCandidate > BuildDungeonRenderEntranceCandidates() const
friend class DungeonPaletteSourceTestPeer
std::unique_ptr< DungeonCanvasViewer > workbench_compare_viewer_
PendingWaterFillUndo pending_water_fill_undo_
RoomMatrixContent * room_matrix_panel_
std::unique_ptr< MinecartTrackEditorPanel > owned_minecart_track_editor_panel_
uint64_t observed_custom_object_generation_
absl::Status Cut() override
std::string dungeon_render_context_census_error_
absl::Status ApplyMinecartTrackEdit(const MinecartTrack &before, const MinecartTrack &after, bool move_cart)
void SetGraphicsPreviewEntrance(int entrance_id)
absl::Status BeginSaveTransaction() override
std::array< PendingEntityUndo, 3 > pending_entity_undo_
bool IsRomLoaded() const override
gui::PaletteEditorWidget palette_editor_
std::unique_ptr< DoorEditorContent > owned_door_editor_panel_
const std::deque< int > & GetRecentRooms() const
Get the list of recently visited room IDs.
int PendingRoomCount() const
absl::Status Paste() override
bool ConsumeRoomCanvasDeleteShortcut(DungeonCanvasViewer &viewer)
static bool IsValidRoomId(int room_id)
friend class DungeonEditorV2SpawnPointTestPeer
void VisitGraphicsUsageRooms(const std::function< void(int, zelda3::Room &, const std::string &, bool, int)> &visitor)
void SwapRoomInPanel(int old_room_id, int new_room_id)
void RecordEntrancePropertyEdit(int slot_index, const zelda3::RoomEntrance &before, const zelda3::RoomEntrance &after, std::shared_ptr< const int > gesture)
RoomGraphicsContent * room_graphics_panel_
bool HasPendingUndoSnapshot() const
absl::Status RunWithSaveTransaction(const std::function< absl::Status()> &operation)
const DungeonRoomStore & rooms() const
void ExpireStaleRoomCanvasDeleteShortcut()
static constexpr int kMaxCachedViewers
static constexpr size_t kMaxRecentRooms
void RegisterPaletteListener()
friend class DungeonEditorV2ShortcutTestPeer
void DrawRoomTab(int room_id)
std::array< zelda3::DungeonSpawnPoint, zelda3::kNumDungeonSpawnPoints > spawn_points_
void SetWorkbenchWorkflowMode(bool enabled, bool show_toast=true)
const zelda3::RoomCensus * GetDungeonRenderContextCensus() const
class RoomTagEditorPanel * room_tag_editor_panel_
void ProcessPendingSwap()
std::optional< SaveTransactionSnapshot > save_transaction_snapshot_
std::unique_ptr< ObjectSelectorContent > owned_object_selector_panel_
friend class DungeonEditorV2RomSafetyTest_ViewerCacheLRUAccessOrderUpdate_Test
void RefreshRoomMetadataViews(int room_id)
PendingSwap pending_swap_
void FinalizeUndoAction(int room_id)
friend class DungeonEditorPaletteRefreshTest_CompareViewerScopesEntranceContextToRequestedRoom_Test
static constexpr const char * kDoorEditorId
friend class DungeonEditorV2RomSafetyTest_LateCoordinatorRollbackRestoresEntranceDirtyState_Test
void ProcessPendingWorkflowMode()
static constexpr const char * kObjectToolsId
DungeonCanvasViewer * GetViewerForRoom(int room_id)
PendingSelectionUndo pending_selection_undo_
void SetRoomGraphicsOverworldProvider(std::function< const zelda3::Overworld *()> provider)
absl::StatusOr< std::string > ExportRoomDocument(int room_id)
absl::Status Update() override
class WaterFillPanel * water_fill_panel_
friend class DungeonConnectionEditsTestPeer
void BeginWaterFillUndoSnapshot(int room_id)
std::future< absl::StatusOr< zelda3::RoomCensus > > dungeon_render_context_census_pending_
absl::Status Undo() override
void InvalidateDungeonRenderContextCensus()
int LoadedRoomCount() const
absl::Status RestoreRoomCustomCollisionBatch(const std::vector< DungeonCustomCollisionSnapshot > &snapshots)
DungeonRoomStore & rooms()
absl::Status EnsureConnectionRoomLoaded(int room_id)
absl::Status Find() override
bool NavigateToAdjacentRoom(DungeonRoomNavigationDirection direction)
void ReloadWaterFillZones()
friend class DungeonEditorPaletteRefreshTest_DungeonMainEditRefreshesResolvedAliasesOnly_Test
ImGuiWindowClass room_window_class_
void SelectObject(int obj_id)
ObjectSelectorContent * object_editor_panel() const
std::unique_ptr< emu::render::EmulatorRenderService > render_service_
DungeonRoomLoader room_loader_
void FinalizePendingEntityUndoActions()
DungeonCanvasViewer * GetWorkbenchViewer()
std::unordered_map< int, std::shared_ptr< gui::PanelWindow > > room_cards_
absl::Status DeleteChest(int room_id, size_t index)
absl::Status Redo() override
bool dungeon_render_context_census_shutdown_
void ApplyEntranceRenderContext(int room_id)
bool HasPendingProjectDraftChanges() const
void SetGameData(zelda3::GameData *game_data) override
friend class DungeonEditorV2RomSafetyTest_ObjectStreamUndoRedoRestoresSelectionIdentity_Test
absl::Status RestoreRoomMetadataBatch(const std::vector< std::pair< int, zelda3::Room::MetadataSnapshot > > &states)
friend class AuthoringSaveWorkflowTestPeer
void RemoveViewerFromLru(int room_id)
uint64_t dungeon_render_context_pending_generation_
friend class DungeonCanvasViewerTestPeer
static constexpr const char * kObjectSelectorId
absl::StatusOr< DungeonRoomTransferPlan > PreviewRoomTransfer(int target_room_id, int source_room_id, const std::string &json, const DungeonRoomTransferOptions &options)
void ConfigureViewerRenderContext(DungeonCanvasViewer *viewer, int room_id)
void PrepareForSessionTeardown() override
static constexpr const char * kRoomGraphicsId
void BeginUndoSnapshot(int room_id)
void QueueRoomCanvasDeleteShortcut()
void QueueWorkbenchWorkflowMode(bool enabled, bool show_toast=true)
static constexpr const char * kRoomMatrixId
void HandleDungeonPaletteChanged(gui::DungeonPaletteChange change)
static constexpr const char * kRoomSelectorId
DungeonRoomSelector room_selector_
uint64_t dungeon_render_context_census_generation_
const ImVector< int > & active_rooms() const
void ConfigureEditableViewer(DungeonCanvasViewer *viewer)
zelda3::GameData * game_data_
PaletteEditorContent * palette_editor_panel_
static constexpr const char * kMinecartTrackEditorId
DungeonSelectionClipboard selection_clipboard_
bool HasPendingDungeonChanges() const
std::unique_ptr< DungeonCanvasViewer > workbench_viewer_
void RestoreRoomCustomCollision(int room_id, const zelda3::CustomCollisionMap &map)
bool CurrentRoomHasPendingChanges() const
absl::Status RefreshRomBackedState()
bool undo_restore_triggered_ping_
absl::Status SaveRoomImpl(int room_id, bool room_data_only)
void RecordSpawnPropertyEdit(int slot_index, const zelda3::DungeonSpawnPoint &before, const zelda3::DungeonSpawnPoint &after, std::shared_ptr< const int > gesture)
util::StopSource dungeon_render_context_census_stop_
absl::Status PreflightStreamMutation(int room_id, const DungeonSelectionEditState &candidate, uint8_t domains)
void ReleaseRoomPanelSlotId(int room_id)
absl::Status RestoreChest(int room_id, size_t index, chest_data chest)
absl::Status Load() override
absl::Status EditChest(int room_id, size_t index, uint8_t item_id, bool big_chest)
absl::Status ApplyChestObjectEdit(int room_id, const std::vector< zelda3::RoomObject > &objects, const std::vector< chest_data > &chests, const std::vector< size_t > &selection)
DungeonCanvasViewer * GetStandaloneViewerForRoom(int room_id)
int current_room_id() const
absl::Status RestoreSpawnProperties(int slot_index, const zelda3::DungeonSpawnPoint &spawn)
std::vector< std::pair< uint32_t, uint32_t > > CollectWriteRanges() const
int TotalRoomCount() const
std::unique_ptr< WaterFillPanel > owned_water_fill_panel_
absl::Status ApplyMinecartCollisionBatch(const std::vector< zelda3::TrackCollisionResult > &preview, const zelda3::GeneratorOptions &options)
absl::Status RestoreRoomTransfer(int room_id, const DungeonRoomDocument &document)
DungeonEntrancesPanel * entrance_navigator_panel_
void ProcessPendingStandaloneToolWindow()
void FinalizeCollisionUndoAction(int room_id)
absl::StatusOr< DungeonConnectionPlan > PreviewDoorConnection(const DungeonConnectionRequest &request)
static constexpr const char * kPaletteEditorId
DungeonEditorV2(Rom *rom=nullptr)
void PushSelectionUndoBatch(std::vector< DungeonSelectionEditPlan > plans, std::string description)
void PushSelectionUndoAction(DungeonSelectionEditPlan plan)
PendingWorkflowMode pending_workflow_mode_
void InvalidateDungeonPaletteUsers(gui::DungeonPaletteChange change)
void HandleArenaPaletteChanged(const std::string &group_name, int palette_index)
uint64_t current_palette_id_
std::vector< std::string > workbench_suspended_navigation_window_ids_
bool HasUnpublishedMinecartTrackChanges() const
void NavigateToPlacedObject(int room_id, size_t object_index, int object_id)
WindowContent for displaying and editing dungeon entrances.
Manages loading and saving of dungeon room data.
void SetGameData(zelda3::GameData *game_data)
Handles room and entrance selection UI.
int current_room_id() const
const ImVector< int > & active_rooms() const
void set_current_entrance_id(int entrance_id)
void SetGameData(zelda3::GameData *game_data)
Interface for editor classes.
UndoManager undo_manager_
zelda3::GameData * game_data() const
EditorDependencies dependencies_
WindowContent for placing and managing dungeon pot items.
Checklist for proving each dungeon object draws like the game.
Browse and place dungeon objects.
void SetGameData(zelda3::GameData *game_data)
Panel for editing the tile8 composition of dungeon objects.
WindowContent wrapper for PaletteEditorWidget in dungeon context.
WindowContent for displaying room graphics blocks.
WindowContent for displaying a visual 16x19 grid of all dungeon rooms.
WindowContent showing all room tag slots and their usage across rooms.
WindowContent for placing and managing dungeon sprites.
A session-aware status bar displayed at the bottom of the application.
bool OpenWindow(size_t session_id, const std::string &base_window_id)
Defines an abstract interface for all rendering operations.
Represents a palette of colors for the Super Nintendo Entertainment System (SNES).
Dungeon Room Entrance or Spawn Point.
MutationDomain
Domain/type of mutation for undo + invalidation routing.
RoomSelectionIntent
Intent for room selection in the dungeon editor.
DungeonRoomNavigationDirection
constexpr NoStopStateTag kNoStopState
constexpr int kNumDungeonSpawnPoints
constexpr int kNumberOfRooms
Legacy chest data structure.
zelda3::CustomCollisionMap before
DungeonEntitySnapshot before
zelda3::Room::SaveDirtySnapshot dirty_before
std::optional< DungeonSelectionEditPlan > plan
std::vector< size_t > before_selection
std::vector< chest_data > before_chests
std::vector< zelda3::RoomObject > before_objects
bool has_palette_transaction
std::vector< std::pair< int, zelda3::Room::SaveDirtySnapshot > > room_states
std::array< bool, zelda3::kNumDungeonSpawnPoints > spawn_dirty_states
bool has_pit_damage_table
std::array< bool, zelda3::kNumDungeonEntranceSlots > entrance_dirty_states
Unified dependency container for all editor types.
zelda3::GameData * game_data
WorkspaceWindowManager * window_manager
Represents a group of palettes.