yaze 0.3.2
Link to the Past ROM Editor
 
Loading...
Searching...
No Matches
object_selector_content.h
Go to the documentation of this file.
1#ifndef YAZE_APP_EDITOR_DUNGEON_SELECTORS_OBJECT_SELECTOR_CONTENT_H_
2#define YAZE_APP_EDITOR_DUNGEON_SELECTORS_OBJECT_SELECTOR_CONTENT_H_
3
4#include <functional>
5#include <memory>
6#include <string>
7
10#include "app/editor/editor.h"
15#include "app/gui/core/icons.h"
16#include "rom/rom.h"
22#include "zelda3/game_data.h"
23
24namespace yaze {
25namespace editor {
26
46 public:
48 gfx::IRenderer* renderer, Rom* rom, DungeonCanvasViewer* canvas_viewer,
49 std::shared_ptr<zelda3::DungeonObjectEditor> object_editor = nullptr);
50
51 // ==========================================================================
52 // WindowContent Identity
53 // ==========================================================================
54
55 std::string GetId() const override { return "dungeon.object_selector"; }
56 std::string GetDisplayName() const override { return "Object Selector"; }
57 std::string GetIcon() const override { return ICON_MD_CONSTRUCTION; }
58 std::string GetEditorCategory() const override { return "Dungeon"; }
59 int GetPriority() const override { return 60; }
60 float GetPreferredWidth() const override { return 560.0f; }
61
62 // ==========================================================================
63 // WindowContent Drawing
64 // ==========================================================================
65
66 void Draw(bool* p_open) override;
67 void OnOpen() override {}
68 void OnClose() override {}
69
70 // ==========================================================================
71 // Component Accessors
72 // ==========================================================================
73
75 // ==========================================================================
76 // Context Management
77 // ==========================================================================
78
79 void SetCurrentRoom(int room_id) {
80 current_room_id_ = room_id;
82 }
84 std::function<DungeonCanvasViewer*()> provider) {
85 canvas_viewer_provider_ = std::move(provider);
86 }
88
91 rom_ = ctx.rom;
92 }
93
94 void SetGameData(zelda3::GameData* game_data) {
96 }
97
99
103
104 // ==========================================================================
105 // Programmatic Controls (for agents/automation)
106 // ==========================================================================
107
108 void SelectObject(int obj_id);
109 void SetAgentOptimizedLayout(bool enabled);
110
111 // Object operations
112 void CancelPlacement(); // Cancel current object placement
113
114 // Show a red error message near the object controls for ~2 seconds.
115 // Called from DungeonEditorV2::HandleObjectPlaced on placement failure.
116 void SetPlacementError(const std::string& message);
117
118 void SetOpenObjectEditorCallback(std::function<void()> callback) {
119 open_object_editor_callback_ = std::move(callback);
120 }
121
122 // ==========================================================================
123 // Static Object Editor (double-click to open)
124 // ==========================================================================
125
126 void OpenStaticObjectEditor(int object_id);
130
131 // Tile editor callback: invoked when user clicks "Edit Tiles"
132 using TileEditorCallback = std::function<void(int16_t object_id)>;
134 tile_editor_callback_ = std::move(callback);
135 }
136
137 private:
139
140 // Drawing methods
141 void DrawObjectSelector();
145
146 // ==========================================================================
147 // Member Variables
148 // ==========================================================================
149
150 Rom* rom_ = nullptr;
154
155 // Components
157 // UI state
158
159 // Selected object for placement
163 std::shared_ptr<zelda3::DungeonObjectEditor> object_editor_;
164
165 // Static object editor state (opened via double-click)
169 gui::Canvas static_preview_canvas_{"##StaticObjectPreview", ImVec2(128, 128)};
171 std::unique_ptr<zelda3::ObjectParser> object_parser_;
174
175 // Placement error feedback: shown in red for kPlacementErrorDuration seconds.
176 static constexpr double kPlacementErrorDuration = 2.0;
178 double placement_error_time_ = -1.0; // ImGui::GetTime() when error was set
179
180 // Tile editor callback
182 std::function<void()> open_object_editor_callback_;
183};
184
185} // namespace editor
186} // namespace yaze
187
188#endif // YAZE_APP_EDITOR_DUNGEON_SELECTORS_OBJECT_SELECTOR_CONTENT_H_
The Rom class is used to load, save, and modify Rom data. This is a generic SNES ROM container and do...
Definition rom.h:28
Handles object selection, preview, and editing UI.
void SetGameData(zelda3::GameData *game_data)
void set_rooms(DungeonRoomStore *rooms)
void SetCurrentPaletteGroup(const gfx::PaletteGroup &palette_group)
Browse and place dungeon objects.
float GetPreferredWidth() const override
Get preferred width for this panel (optional)
std::string GetIcon() const override
Material Design icon for this panel.
void SetPlacementError(const std::string &message)
void SetOpenObjectEditorCallback(std::function< void()> callback)
void SetCanvasViewer(DungeonCanvasViewer *viewer)
std::function< DungeonCanvasViewer *()> canvas_viewer_provider_
std::string GetDisplayName() const override
Human-readable name shown in menus and title bars.
void SetRooms(DungeonRoomStore *rooms)
void SetCanvasViewerProvider(std::function< DungeonCanvasViewer *()> provider)
void SetGameData(zelda3::GameData *game_data)
std::shared_ptr< zelda3::DungeonObjectEditor > object_editor_
void SetCurrentPaletteGroup(const gfx::PaletteGroup &group)
std::string GetId() const override
Unique identifier for this panel.
void OnOpen() override
Called when panel becomes visible.
void OnClose() override
Called when panel is hidden.
std::string GetEditorCategory() const override
Editor category this panel belongs to.
ObjectSelectorContent(gfx::IRenderer *renderer, Rom *rom, DungeonCanvasViewer *canvas_viewer, std::shared_ptr< zelda3::DungeonObjectEditor > object_editor=nullptr)
int GetPriority() const override
Get display priority for menu ordering.
void Draw(bool *p_open) override
Draw the panel content.
std::function< void(int16_t object_id)> TileEditorCallback
std::unique_ptr< zelda3::ObjectParser > object_parser_
void set_tile_editor_callback(TileEditorCallback callback)
Base interface for all logical window content components.
Represents a bitmap image optimized for SNES ROM hacking.
Definition bitmap.h:67
Defines an abstract interface for all rendering operations.
Definition irenderer.h:60
Modern, robust canvas for drawing and manipulating graphics.
Definition canvas.h:150
#define ICON_MD_CONSTRUCTION
Definition icons.h:458
Lightweight view into the essential runtime context (Rom + GameData)
Definition editor.h:71
Represents a group of palettes.
Draw routine information for object rendering.