1#ifndef YAZE_APP_EDITOR_DUNGEON_EDITOR_V2_H
2#define YAZE_APP_EDITOR_DUNGEON_EDITOR_V2_H
6#include <unordered_map>
9#include "absl/status/status.h"
10#include "absl/strings/str_format.h"
21#include "imgui/imgui.h"
33class MinecartTrackEditorPanel;
81 for (
auto& room :
rooms_) {
99 for (
auto& room :
rooms_) {
105 if (viewer) viewer->SetGameData(
game_data);
113 absl::Status
Update()
override;
114 absl::Status
Undo()
override;
115 absl::Status
Redo()
override;
116 absl::Status
Cut()
override;
117 absl::Status
Copy()
override;
118 absl::Status
Paste()
override;
119 absl::Status
Find()
override {
return absl::UnimplementedError(
"Find"); }
120 absl::Status
Save()
override;
130 for (
auto& room :
rooms_) {
141 std::make_unique<emu::render::EmulatorRenderService>(
rom);
158 if (!
rom_)
return "No ROM loaded";
160 return absl::StrFormat(
"ROM loaded: %s",
rom_->
title());
262 std::unordered_map<int, std::shared_ptr<gui::PanelWindow>>
room_cards_;
265 std::unordered_map<int, std::vector<std::vector<zelda3::RoomObject>>>
267 std::unordered_map<int, std::vector<std::vector<zelda3::RoomObject>>>
280 std::vector<zelda3::RoomObject> snapshot);
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.
class MinecartTrackEditorPanel * minecart_track_editor_panel_
static constexpr const char * kControlPanelId
void SetAgentMode(bool enabled)
std::array< zelda3::Room, 0x128 > rooms_
uint64_t current_palette_group_id_
void add_room(int room_id)
class ItemEditorPanel * item_editor_panel_
std::unordered_map< int, std::vector< std::vector< zelda3::RoomObject > > > undo_history_
std::array< zelda3::RoomEntrance, 0x8C > entrances_
gfx::PaletteGroup current_palette_group_
void OnEntranceSelected(int entrance_id)
static constexpr const char * kEntranceListId
absl::Status Save() override
gfx::IRenderer * renderer_
class SpriteEditorPanel * sprite_editor_panel_
void FocusRoom(int room_id)
void HandleObjectPlaced(const zelda3::RoomObject &obj)
std::unique_ptr< ObjectEditorPanel > owned_object_editor_panel_
std::string GetRomStatus() const override
std::unique_ptr< zelda3::DungeonEditorSystem > dungeon_editor_system_
void PushUndoSnapshot(int room_id)
absl::Status Copy() override
void Initialize() override
void OnRoomSelected(int room_id, bool request_focus=true)
~DungeonEditorV2() override
DungeonRoomGraphicsPanel * room_graphics_panel_
ObjectEditorPanel * object_editor_panel_
void ProcessDeferredTextures()
gfx::SnesPalette current_palette_
ImVector< int > active_rooms_
absl::Status Cut() override
std::map< int, std::unique_ptr< DungeonCanvasViewer > > room_viewers_
bool IsRomLoaded() const override
gui::PaletteEditorWidget palette_editor_
void ShowPanel(const std::string &card_id)
absl::Status Paste() override
void SwapRoomInPanel(int old_room_id, int new_room_id)
void DrawRoomTab(int room_id)
void ProcessPendingSwap()
absl::Status RestoreFromSnapshot(int room_id, std::vector< zelda3::RoomObject > snapshot)
PendingSwap pending_swap_
static constexpr const char * kObjectToolsId
DungeonCanvasViewer * GetViewerForRoom(int room_id)
absl::Status Update() override
absl::Status Undo() override
absl::Status Find() override
ImGuiWindowClass room_window_class_
void SelectObject(int obj_id)
std::unique_ptr< emu::render::EmulatorRenderService > render_service_
DungeonRoomLoader room_loader_
std::unordered_map< int, std::vector< std::vector< zelda3::RoomObject > > > redo_history_
std::unordered_map< int, std::shared_ptr< gui::PanelWindow > > room_cards_
absl::Status Redo() override
void SetGameData(zelda3::GameData *game_data) override
static constexpr const char * kRoomGraphicsId
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_
int current_room_id() const
bool control_panel_minimized_
static constexpr const char * kPaletteEditorId
DungeonEditorV2(Rom *rom=nullptr)
void ClearRedo(int room_id)
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)
bool ShowPanel(size_t session_id, const std::string &base_card_id)
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).
std::unique_ptr< DungeonEditorSystem > CreateDungeonEditorSystem(Rom *rom, GameData *game_data)
Factory function to create dungeon editor system.
zelda3::GameData * game_data
PanelManager * panel_manager
Represents a group of palettes.