1#ifndef YAZE_APP_EDITOR_DUNGEON_EDITOR_V2_H
2#define YAZE_APP_EDITOR_DUNGEON_EDITOR_V2_H
10#include <unordered_map>
14#include "absl/status/status.h"
15#include "absl/strings/str_format.h"
28#include "imgui/imgui.h"
44class MinecartTrackEditorPanel;
45class ObjectTileEditorPanel;
46class OverlayManagerPanel;
47class RoomTagEditorPanel;
114 [
game_data](
int, std::unique_ptr<DungeonCanvasViewer>& viewer) {
122 absl::Status
Load()
override;
123 absl::Status
Update()
override;
124 absl::Status
Undo()
override;
125 absl::Status
Redo()
override;
126 absl::Status
Cut()
override;
127 absl::Status
Copy()
override;
128 absl::Status
Paste()
override;
129 absl::Status
Find()
override {
return absl::UnimplementedError(
"Find"); }
130 absl::Status
Save()
override;
169 return "No ROM loaded";
171 return "ROM failed to load";
172 return absl::StrFormat(
"ROM loaded: %s",
rom_->
title());
342 std::unordered_map<int, std::shared_ptr<gui::PanelWindow>>
room_cards_;
392 const std::vector<zelda3::RoomObject>& objects);
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.
void BeginCollisionUndoSnapshot(int room_id)
class MinecartTrackEditorPanel * minecart_track_editor_panel_
int GetOrCreateRoomPanelSlotId(int room_id)
std::deque< int > recent_rooms_
absl::Status SaveRoom(int room_id)
void SetAgentMode(bool enabled)
void RestoreRoomObjects(int room_id, const std::vector< zelda3::RoomObject > &objects)
class CustomCollisionPanel * custom_collision_panel_
uint64_t current_palette_group_id_
void ToggleWorkbenchWorkflowMode(bool show_toast=true)
void RestoreRoomWaterFill(int room_id, const WaterFillSnapshot &snap)
void add_room(int room_id)
void ContributeStatus(StatusBar *status_bar) override
void OpenGraphicsEditorForObject(int room_id, const zelda3::RoomObject &object)
class ItemEditorPanel * item_editor_panel_
PendingUndo pending_undo_
absl::Status SaveRoomData(int room_id)
void ShowRoomPanel(int room_id)
int next_room_panel_slot_id_
std::array< zelda3::RoomEntrance, 0x8C > entrances_
int * mutable_current_room_id()
ObjectSelectorContent * object_selector_panel() const
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
gfx::IRenderer * renderer_
void TouchViewerLru(int room_id)
class SpriteEditorPanel * sprite_editor_panel_
void FocusRoom(int room_id)
void HandleObjectPlaced(const zelda3::RoomObject &obj)
class DungeonSettingsPanel * dungeon_settings_panel_
std::string GetRomStatus() const override
DoorEditorContent * door_editor_panel() const
std::unique_ptr< zelda3::DungeonEditorSystem > dungeon_editor_system_
void OpenWindow(const std::string &window_id)
void FinalizeWaterFillUndoAction(int room_id)
void SyncPanelsToRoom(int room_id)
DoorEditorContent * door_editor_panel_
absl::Status Copy() override
void Initialize() override
std::unordered_map< int, int > room_panel_slot_ids_
friend class DungeonEditorV2RomSafetyTest_UndoSnapshotLeakDetection_Test
class DungeonWorkbenchContent * workbench_panel_
bool IsWorkbenchWorkflowEnabled() const
friend class DungeonEditorV2RomSafetyTest_ViewerCacheLRUEviction_Test
void OnRoomSelected(int room_id, bool request_focus=true)
friend class DungeonEditorV2RomSafetyTest_ViewerCacheNeverEvictsActiveRooms_Test
ObjectEditorContent * object_editor_content() const
std::vector< int > pinned_rooms_
~DungeonEditorV2() override
PendingCollisionUndo pending_collision_undo_
ObjectTileEditorPanel * object_tile_editor_panel_
ObjectSelectorContent * object_selector_panel_
OverlayManagerPanel * overlay_manager_panel_
void ProcessDeferredTextures()
gfx::SnesPalette current_palette_
gfx::IRenderer * renderer() const
ImVector< int > active_rooms_
std::unique_ptr< DungeonCanvasViewer > workbench_compare_viewer_
PendingWaterFillUndo pending_water_fill_undo_
absl::Status Cut() override
bool IsRomLoaded() const override
gui::PaletteEditorWidget palette_editor_
std::unique_ptr< ObjectEditorContent > owned_object_editor_content_
std::unique_ptr< DoorEditorContent > owned_door_editor_panel_
const std::deque< int > & GetRecentRooms() const
Get the list of recently visited room IDs.
absl::Status Paste() override
static constexpr const char * kObjectEditorId
static bool IsValidRoomId(int room_id)
void SwapRoomInPanel(int old_room_id, int new_room_id)
RoomGraphicsContent * room_graphics_panel_
const DungeonRoomStore & rooms() const
static constexpr int kMaxCachedViewers
static constexpr size_t kMaxRecentRooms
void DrawRoomTab(int room_id)
void SetWorkbenchWorkflowMode(bool enabled, bool show_toast=true)
class RoomTagEditorPanel * room_tag_editor_panel_
void ProcessPendingSwap()
std::unique_ptr< ObjectSelectorContent > owned_object_selector_panel_
friend class DungeonEditorV2RomSafetyTest_ViewerCacheLRUAccessOrderUpdate_Test
PendingSwap pending_swap_
void FinalizeUndoAction(int room_id)
static constexpr const char * kDoorEditorId
void ProcessPendingWorkflowMode()
static constexpr const char * kObjectToolsId
DungeonCanvasViewer * GetViewerForRoom(int room_id)
absl::Status Update() override
class WaterFillPanel * water_fill_panel_
void BeginWaterFillUndoSnapshot(int room_id)
absl::Status Undo() override
int LoadedRoomCount() const
DungeonRoomStore & rooms()
absl::Status Find() override
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_
DungeonCanvasViewer * GetWorkbenchViewer()
std::unordered_map< int, std::shared_ptr< gui::PanelWindow > > room_cards_
absl::Status Redo() override
void SetGameData(zelda3::GameData *game_data) override
void RemoveViewerFromLru(int room_id)
static constexpr const char * kObjectSelectorId
static constexpr const char * kRoomGraphicsId
void BeginUndoSnapshot(int room_id)
void QueueWorkbenchWorkflowMode(bool enabled, bool show_toast=true)
ObjectEditorContent * object_editor_content_
static constexpr const char * kRoomMatrixId
static constexpr const char * kRoomSelectorId
DungeonRoomSelector room_selector_
const ImVector< int > & active_rooms() const
zelda3::GameData * game_data_
std::unique_ptr< DungeonCanvasViewer > workbench_viewer_
void RestoreRoomCustomCollision(int room_id, const zelda3::CustomCollisionMap &map)
void ReleaseRoomPanelSlotId(int room_id)
absl::Status Load() override
int current_room_id() const
std::vector< std::pair< uint32_t, uint32_t > > CollectWriteRanges() const
int TotalRoomCount() const
void FinalizeCollisionUndoAction(int room_id)
static constexpr const char * kPaletteEditorId
DungeonEditorV2(Rom *rom=nullptr)
PendingWorkflowMode pending_workflow_mode_
DungeonCanvasViewer * GetWorkbenchCompareViewer()
uint64_t current_palette_id_
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 SetGameData(zelda3::GameData *game_data)
Interface for editor classes.
zelda3::GameData * game_data() const
EditorDependencies dependencies_
WindowContent for placing and managing dungeon pot items.
Browse and place dungeon objects.
void SetGameData(zelda3::GameData *game_data)
Panel for editing the tile8 composition of dungeon objects.
WindowContent for displaying room graphics blocks.
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).
RoomSelectionIntent
Intent for room selection in the dungeon editor.
constexpr int kNumberOfRooms
std::unique_ptr< DungeonEditorSystem > CreateDungeonEditorSystem(Rom *rom, GameData *game_data)
Factory function to create dungeon editor system.
zelda3::CustomCollisionMap before
std::vector< zelda3::RoomObject > before_objects
zelda3::GameData * game_data
WorkspaceWindowManager * window_manager
Represents a group of palettes.