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"
27#include "imgui/imgui.h"
41class MinecartTrackEditorPanel;
42class ObjectTileEditorPanel;
43class OverlayManagerPanel;
44class RoomTagEditorPanel;
92 for (
auto& room :
rooms_) {
110 for (
auto& room :
rooms_) {
116 [
game_data](
int, std::unique_ptr<DungeonCanvasViewer>& viewer) {
124 absl::Status
Load()
override;
125 absl::Status
Update()
override;
126 absl::Status
Undo()
override;
127 absl::Status
Redo()
override;
128 absl::Status
Cut()
override;
129 absl::Status
Copy()
override;
130 absl::Status
Paste()
override;
131 absl::Status
Find()
override {
return absl::UnimplementedError(
"Find"); }
132 absl::Status
Save()
override;
150 for (
auto& room :
rooms_) {
161 std::make_unique<emu::render::EmulatorRenderService>(
rom);
179 return "No ROM loaded";
181 return "ROM failed to load";
182 return absl::StrFormat(
"ROM loaded: %s",
rom_->
title());
213 const std::array<zelda3::Room, 0x128>&
rooms()
const {
return rooms_; }
336 std::unordered_map<int, std::shared_ptr<gui::PanelWindow>>
room_cards_;
386 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)
std::array< zelda3::Room, 0x128 > rooms_
void RestoreRoomObjects(int room_id, const std::vector< zelda3::RoomObject > &objects)
class CustomCollisionPanel * custom_collision_panel_
uint64_t current_palette_group_id_
void RestoreRoomWaterFill(int room_id, const WaterFillSnapshot &snap)
void add_room(int room_id)
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()
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::unique_ptr< ObjectEditorPanel > owned_object_editor_panel_
std::string GetRomStatus() const override
std::unique_ptr< zelda3::DungeonEditorSystem > dungeon_editor_system_
class DungeonWorkbenchPanel * workbench_panel_
void FinalizeWaterFillUndoAction(int room_id)
void SyncPanelsToRoom(int room_id)
absl::Status Copy() override
void Initialize() override
std::unordered_map< int, int > room_panel_slot_ids_
friend class DungeonEditorV2RomSafetyTest_UndoSnapshotLeakDetection_Test
bool IsWorkbenchWorkflowEnabled() const
friend class DungeonEditorV2RomSafetyTest_ViewerCacheLRUEviction_Test
void OnRoomSelected(int room_id, bool request_focus=true)
friend class DungeonEditorV2RomSafetyTest_ViewerCacheNeverEvictsActiveRooms_Test
std::vector< int > pinned_rooms_
~DungeonEditorV2() override
PendingCollisionUndo pending_collision_undo_
DungeonRoomGraphicsPanel * room_graphics_panel_
ObjectTileEditorPanel * object_tile_editor_panel_
OverlayManagerPanel * overlay_manager_panel_
ObjectEditorPanel * object_editor_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_
void ShowPanel(const std::string &card_id)
const std::deque< int > & GetRecentRooms() const
Get the list of recently visited room IDs.
absl::Status Paste() override
static bool IsValidRoomId(int room_id)
void SwapRoomInPanel(int old_room_id, int new_room_id)
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()
friend class DungeonEditorV2RomSafetyTest_ViewerCacheLRUAccessOrderUpdate_Test
PendingSwap pending_swap_
void FinalizeUndoAction(int room_id)
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
absl::Status Find() override
ImGuiWindowClass room_window_class_
void SelectObject(int obj_id)
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 * kRoomGraphicsId
void BeginUndoSnapshot(int room_id)
void QueueWorkbenchWorkflowMode(bool enabled, bool show_toast=true)
static constexpr const char * kRoomMatrixId
ObjectEditorPanel * object_editor_panel() const
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
const std::array< zelda3::Room, 0x128 > & rooms() const
int current_room_id() const
std::array< zelda3::Room, 0x128 > & rooms()
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_
EditorPanel for displaying room graphics blocks.
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
Interface for editor classes.
zelda3::GameData * game_data() const
EditorDependencies dependencies_
EditorPanel for placing and managing dungeon pot items.
Unified panel for dungeon object editing.
void SetGameData(zelda3::GameData *game_data)
Panel for editing the tile8 composition of dungeon objects.
bool ShowPanel(size_t session_id, const std::string &base_card_id)
EditorPanel showing all room tag slots and their usage across rooms.
EditorPanel for placing and managing dungeon sprites.
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
PanelManager * panel_manager
Represents a group of palettes.