yaze 0.3.2
Link to the Past ROM Editor
 
Loading...
Searching...
No Matches
dungeon_object_emulator_preview.h
Go to the documentation of this file.
1#ifndef YAZE_APP_GUI_WIDGETS_DUNGEON_OBJECT_EMULATOR_PREVIEW_H_
2#define YAZE_APP_GUI_WIDGETS_DUNGEON_OBJECT_EMULATOR_PREVIEW_H_
3
4#include "app/emu/snes.h"
7#include "rom/rom.h"
8#include "zelda3/game_data.h"
9
10namespace yaze {
11namespace gfx {
12class IRenderer;
13} // namespace gfx
14namespace zelda3 {
15class ObjectDrawer;
16} // namespace zelda3
17namespace emu {
18namespace render {
19class EmulatorRenderService;
20} // namespace render
21} // namespace emu
22} // namespace yaze
23
24namespace yaze {
25namespace gui {
26
28 public:
31
32 // Initialize with optional shared render service
33 // If render_service is nullptr, uses local SNES instance (legacy mode)
34 void Initialize(gfx::IRenderer* renderer, Rom* rom,
35 zelda3::GameData* game_data = nullptr,
36 emu::render::EmulatorRenderService* render_service = nullptr);
37 void Render();
38
39 // Visibility control for external toggling
40 void set_visible(bool visible) { show_window_ = visible; }
41 bool is_visible() const { return show_window_; }
42
43 // GameData accessor for post-initialization setting
44 void SetGameData(zelda3::GameData* game_data) { game_data_ = game_data; }
45
46 private:
47 void RenderControls();
49 void RenderStatusPanel();
51
52 // ObjectDrawer-based rendering (static, works reliably)
54
55 // Get object name from ID
56 const char* GetObjectName(int id) const;
57
58 // Get object type (1, 2, or 3) from ID
59 int GetObjectType(int id) const;
60
62 Rom* rom_ = nullptr;
64 emu::render::EmulatorRenderService* render_service_ = nullptr; // Shared service (optional)
65 std::unique_ptr<emu::Snes> snes_instance_; // Legacy local instance
66 void* object_texture_ = nullptr;
67
68 int object_id_ = 0;
69 int room_id_ = 0;
70 int object_x_ = 16;
71 int object_y_ = 16;
72 int object_size_ = 0; // Size parameter for rendering
73 bool show_window_ = true;
74 bool show_browser_ = false; // Toggle for object browser
75
76 // Debug info
78 std::string last_error_;
79
80 // Lazy initialization flag - defer heavy SNES init until actually needed
81 bool initialized_ = false;
82 void EnsureInitialized();
83
84 // Rendering mode selection
85 enum class RenderMode { kStatic, kEmulator };
86 RenderMode render_mode_ = RenderMode::kStatic; // Default to working mode
87
88 // Static rendering components (ObjectDrawer-based)
89 std::unique_ptr<zelda3::ObjectDrawer> object_drawer_;
93 bool static_render_dirty_ = true; // Need to re-render
94
95 // Quick select presets
96 struct ObjectPreset {
97 int id;
98 const char* name;
99 };
100 static constexpr ObjectPreset kQuickPresets[] = {
101 {0x00, "Ceiling"},
102 {0x01, "Wall (top, north)"},
103 {0x60, "Wall (top, west)"},
104 {0x96, "Ceiling (large)"},
105 {0xF8, "Chest"},
106 {0xF0, "Door"},
107 {0xEE, "Pot"},
108 {0x80, "Floor 1"},
109 };
110};
111
112} // namespace gui
113} // namespace yaze
114
115#endif // YAZE_APP_GUI_WIDGETS_DUNGEON_OBJECT_EMULATOR_PREVIEW_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:24
Represents a bitmap image optimized for SNES ROM hacking.
Definition bitmap.h:67
Defines an abstract interface for all rendering operations.
Definition irenderer.h:40
std::unique_ptr< zelda3::ObjectDrawer > object_drawer_
emu::render::EmulatorRenderService * render_service_
void Initialize(gfx::IRenderer *renderer, Rom *rom, zelda3::GameData *game_data=nullptr, emu::render::EmulatorRenderService *render_service=nullptr)