146 float available_height = ImGui::GetContentRegionAvail().y;
148 float reserved_height = 120.0f;
150 float grid_height = std::max(150.0f, std::min(400.0f, available_height - reserved_height));
153 float panel_width = ImGui::GetContentRegionAvail().x;
154 float item_size = std::max(36.0f, std::min(48.0f, (panel_width - 40.0f) / 6.0f));
155 int items_per_row = std::max(1,
static_cast<int>(panel_width / (item_size + 8)));
157 ImGui::BeginChild(
"##ItemGrid", ImVec2(0, grid_height),
true,
158 ImGuiWindowFlags_HorizontalScrollbar);
164 ImGui::PushID(
static_cast<int>(i));
169 button_color.x = std::min(1.0f, button_color.x + 0.2f);
170 button_color.y = std::min(1.0f, button_color.y + 0.2f);
171 button_color.z = std::min(1.0f, button_color.z + 0.2f);
174 ImGui::PushStyleColor(ImGuiCol_Button, button_color);
175 ImGui::PushStyleColor(ImGuiCol_ButtonHovered,
176 ImVec4(std::min(1.0f, button_color.x + 0.1f),
177 std::min(1.0f, button_color.y + 0.1f),
178 std::min(1.0f, button_color.z + 0.1f), 1.0f));
179 ImGui::PushStyleColor(ImGuiCol_ButtonActive,
180 ImVec4(std::min(1.0f, button_color.x + 0.2f),
181 std::min(1.0f, button_color.y + 0.2f),
182 std::min(1.0f, button_color.z + 0.2f), 1.0f));
186 std::string label = absl::StrFormat(
"%s\n%02X", icon,
static_cast<int>(i));
187 if (ImGui::Button(label.c_str(), ImVec2(item_size, item_size))) {
192 static_cast<uint8_t
>(i));
196 ImGui::PopStyleColor(3);
198 if (ImGui::IsItemHovered()) {
199 ImGui::SetTooltip(
"%s (0x%02X)\nClick to select for placement",
205 ImVec2 min = ImGui::GetItemRectMin();
206 ImVec2 max = ImGui::GetItemRectMax();
207 ImU32 sel_color = ImGui::ColorConvertFloat4ToU32(theme.dungeon_selection_primary);
208 ImGui::GetWindowDrawList()->AddRect(min, max, sel_color, 0.0f, 0, 2.0f);
214 if (col < items_per_row) {
227 const auto& items = room.GetPotItems();
229 ImGui::Text(
ICON_MD_LIST " Room Items (%zu):", items.size());
232 ImGui::TextColored(theme.text_secondary_gray,
238 float list_height = std::max(120.0f, ImGui::GetContentRegionAvail().y - 10.0f);
239 ImGui::BeginChild(
"##ItemList", ImVec2(0, list_height),
true);
240 for (
size_t i = 0; i < items.size(); ++i) {
241 const auto& item = items[i];
243 ImGui::PushID(
static_cast<int>(i));
249 ImGui::Text(
"[%zu] %s (0x%02X)", i, item_name, item.item);
251 ImGui::TextColored(theme.text_secondary_gray,
252 "@ (%d,%d)", item.GetTileX(), item.GetTileY());
257 mutable_room.GetPotItems().erase(
258 mutable_room.GetPotItems().begin() +
static_cast<long>(i));