22 : editor_manager_(editor_manager),
31 {
"Overworld",
ICON_MD_MAP,
"Edit overworld maps, entrances, and properties",
33 ImVec4(0.133f, 0.545f, 0.133f, 1.0f)},
34 {
"Dungeon",
ICON_MD_CASTLE,
"Design dungeon rooms, layouts, and mechanics",
36 ImVec4(0.502f, 0.0f, 0.502f, 1.0f)},
37 {
"Graphics",
ICON_MD_PALETTE,
"Modify tiles, palettes, and graphics sets",
39 ImVec4(1.0f, 0.843f, 0.0f, 1.0f)},
42 ImVec4(1.0f, 0.647f, 0.0f, 1.0f)},
45 ImVec4(0.196f, 0.6f, 0.8f, 1.0f)},
48 ImVec4(0.416f, 0.353f, 0.804f, 1.0f)},
51 ImVec4(0.863f, 0.078f, 0.235f, 1.0f)},
52 {
"Screens",
ICON_MD_TV,
"Edit title screen and ending screens",
54 ImVec4(0.4f, 0.8f, 1.0f, 1.0f)},
55 {
"Assembly",
ICON_MD_CODE,
"Write and edit assembly code",
57 ImVec4(0.8f, 0.8f, 0.8f, 1.0f)},
60 ImVec4(0.2f, 0.8f, 0.4f, 1.0f)},
63 ImVec4(0.2f, 0.6f, 1.0f, 1.0f)},
64 {
"AI Agent",
ICON_MD_SMART_TOY,
"Configure AI agent, collaboration, and automation",
66 ImVec4(0.8f, 0.4f, 1.0f, 1.0f)},
173 ImGui::PushID(index);
175 ImVec2 button_size(180, 120);
176 ImVec2 cursor_pos = ImGui::GetCursorScreenPos();
177 ImDrawList* draw_list = ImGui::GetWindowDrawList();
183 ImVec4 base_color = info.
color;
184 ImU32 color_top = ImGui::GetColorU32(ImVec4(
185 base_color.x * 0.4f, base_color.y * 0.4f, base_color.z * 0.4f, 0.8f));
186 ImU32 color_bottom = ImGui::GetColorU32(ImVec4(
187 base_color.x * 0.2f, base_color.y * 0.2f, base_color.z * 0.2f, 0.9f));
190 draw_list->AddRectFilledMultiColor(
192 ImVec2(cursor_pos.x + button_size.x, cursor_pos.y + button_size.y),
193 color_top, color_top, color_bottom, color_bottom);
198 ? ImGui::GetColorU32(
199 ImVec4(base_color.x, base_color.y, base_color.z, 1.0f))
200 : ImGui::GetColorU32(ImVec4(base_color.x * 0.6f, base_color.y * 0.6f,
201 base_color.z * 0.6f, 0.7f));
204 ImVec2(cursor_pos.x + button_size.x, cursor_pos.y + button_size.y),
205 border_color, 4.0f, 0, is_recent ? 3.0f : 2.0f);
209 ImVec2 badge_pos(cursor_pos.x + button_size.x - 25, cursor_pos.y + 5);
210 draw_list->AddCircleFilled(badge_pos, 12, ImGui::GetColorU32(base_color),
212 ImGui::SetCursorScreenPos(ImVec2(badge_pos.x - 6, badge_pos.y - 8));
217 ImGui::PushStyleColor(ImGuiCol_Button, ImVec4(0, 0, 0, 0));
218 ImGui::PushStyleColor(ImGuiCol_ButtonHovered,
219 ImVec4(base_color.x * 0.3f, base_color.y * 0.3f,
220 base_color.z * 0.3f, 0.5f));
221 ImGui::PushStyleColor(ImGuiCol_ButtonActive,
222 ImVec4(base_color.x * 0.5f, base_color.y * 0.5f,
223 base_color.z * 0.5f, 0.7f));
225 ImGui::SetCursorScreenPos(cursor_pos);
227 ImGui::Button(absl::StrCat(
"##", info.
name).c_str(), button_size);
228 bool is_hovered = ImGui::IsItemHovered();
230 ImGui::PopStyleColor(3);
233 ImVec2 icon_center(cursor_pos.x + button_size.x / 2, cursor_pos.y + 30);
234 ImU32 icon_bg = ImGui::GetColorU32(base_color);
235 draw_list->AddCircleFilled(icon_center, 22, icon_bg, 32);
238 ImGui::PushFont(ImGui::GetIO().Fonts->Fonts[2]);
239 ImVec2 icon_size = ImGui::CalcTextSize(info.
icon.c_str());
240 ImGui::SetCursorScreenPos(
241 ImVec2(icon_center.x - icon_size.x / 2, icon_center.y - icon_size.y / 2));
242 ImGui::TextColored(ImVec4(1, 1, 1, 1),
"%s", info.
icon.c_str());
246 ImGui::SetCursorScreenPos(ImVec2(cursor_pos.x + 10, cursor_pos.y + 65));
247 ImGui::PushTextWrapPos(cursor_pos.x + button_size.x - 10);
248 ImVec2 name_size = ImGui::CalcTextSize(info.
name.c_str());
249 ImGui::SetCursorScreenPos(ImVec2(
250 cursor_pos.x + (button_size.x - name_size.x) / 2, cursor_pos.y + 65));
251 ImGui::TextColored(base_color,
"%s", info.
name.c_str());
252 ImGui::PopTextWrapPos();
256 ImGui::SetCursorScreenPos(
257 ImVec2(cursor_pos.x + 10, cursor_pos.y + button_size.y - 20));
258 ImGui::TextColored(ImVec4(0.6f, 0.6f, 0.6f, 1.0f),
"%s", info.
shortcut.c_str());
263 ImU32 glow_color = ImGui::GetColorU32(
264 ImVec4(base_color.x, base_color.y, base_color.z, 0.2f));
265 draw_list->AddRectFilled(
267 ImVec2(cursor_pos.x + button_size.x, cursor_pos.y + button_size.y),
273 ImGui::SetNextWindowSize(ImVec2(300, 0), ImGuiCond_Always);
274 ImGui::BeginTooltip();
275 ImGui::PushFont(ImGui::GetIO().Fonts->Fonts[1]);
276 ImGui::TextColored(base_color,
"%s %s", info.
icon.c_str(), info.
name.c_str());
279 ImGui::PushTextWrapPos(ImGui::GetCursorPos().x + 280);
280 ImGui::TextWrapped(
"%s", info.
description.c_str());
281 ImGui::PopTextWrapPos();
288 ImGui::TextColored(ImVec4(1.0f, 0.843f, 0.0f, 1.0f),