yaze 0.3.2
Link to the Past ROM Editor
 
Loading...
Searching...
No Matches
dungeon_canvas_room_frame.cc
Go to the documentation of this file.
2#include "util/i18n/tr.h"
3
5#include "imgui/imgui.h"
6
7namespace yaze::editor {
8
9namespace {
10
11using namespace dungeon_ui; // NOLINT(google-build-using-namespace)
12
13} // namespace
14
16 if (room_id < 0 || room_id >= zelda3::kNumberOfRooms) {
17 ImGui::Text(tr("Invalid room ID: %d"), room_id);
18 return false;
19 }
20
21 if (!rom_ || !rom_->is_loaded()) {
22 ImGui::Text(tr("ROM not loaded"));
23 return false;
24 }
25
26 return true;
27}
28
30 const {
31 gui::CanvasFrameOptions frame_opts;
32 frame_opts.canvas_size = ImVec2(kDungeonRoomPixelSize, kDungeonRoomPixelSize);
33 frame_opts.draw_grid = show_grid_;
34 frame_opts.grid_step = static_cast<float>(custom_grid_size_);
35 frame_opts.draw_context_menu = true;
36 frame_opts.draw_overlay = true;
37 frame_opts.render_popups = true;
38 return frame_opts;
39}
40
42 auto canvas_config = canvas_.GetConfig();
43 canvas_config.enable_grid = show_grid_;
44 canvas_config.grid_step = static_cast<float>(custom_grid_size_);
45 // Main dungeon canvas is an editable scratchpad: users paint tiles into
46 // the room and manipulate object/sprite/door entities directly. Declaring
47 // the role lets future canvas surfaces default appropriately without each
48 // editor re-encoding the policy.
49 canvas_config.role = gui::CanvasRole::kEditableScratchpad;
50 canvas_.ApplyConfigSnapshot(canvas_config);
52}
53
55 const auto& config = canvas_.GetConfig();
56 show_grid_ = config.enable_grid;
57 set_custom_grid_size(static_cast<int>(config.grid_step));
58}
59
61 int room_id) {
62 if (prev_blockset_ != room.blockset() || prev_palette_ != room.palette() ||
63 prev_layout_ != room.layout_id() || prev_spriteset_ != room.spriteset()) {
64 if (room.rom() && room.rom()->is_loaded()) {
66 }
67
68 prev_blockset_ = room.blockset();
69 prev_palette_ = room.palette();
70 prev_layout_ = room.layout_id();
72 }
73
74 if (header_visible_) {
75 DrawRoomHeader(room, room_id);
76 }
77}
78
80 int room_id) {
81 if (!rooms_) {
82 return nullptr;
83 }
84
85 auto* room_ptr = rooms_->TryEnsureRoom(room_id);
86 if (!room_ptr) {
87 return nullptr;
88 }
89 auto& room = *room_ptr;
90 RefreshActiveRoomCanvasState(room, room_id);
91 return &room;
92}
93
94} // namespace yaze::editor
bool is_loaded() const
Definition rom.h:144
void RefreshActiveRoomCanvasState(zelda3::Room &room, int room_id)
zelda3::Room * PrepareActiveRoomForCanvasFrame(int room_id)
gui::CanvasFrameOptions BuildRoomCanvasFrameOptions() const
void DrawRoomHeader(zelda3::Room &room, int room_id)
zelda3::Room * TryEnsureRoom(int room_id)
void ApplyConfigSnapshot(const CanvasConfig &snapshot)
Definition canvas.cc:909
void SetShowBuiltinContextMenu(bool show)
Definition canvas.h:206
CanvasConfig & GetConfig()
Definition canvas.h:229
uint8_t blockset() const
Definition room.h:902
void ReloadGraphics(std::optional< uint8_t > entrance_blockset=std::nullopt)
Definition room.cc:839
uint8_t palette() const
Definition room.h:905
auto rom() const
Definition room.h:958
uint8_t spriteset() const
Definition room.h:904
uint8_t layout_id() const
Definition room.h:912
Editors are the view controllers for the application.
constexpr int kNumberOfRooms
std::optional< float > grid_step