feat: add instance difficulty indicator on minimap

Show Normal/Heroic/25-Man difficulty badge below zone name when inside
a dungeon or raid instance. Orange-highlighted for heroic modes.
This commit is contained in:
Kelsi 2026-03-18 12:21:41 -07:00
parent 801f29f043
commit aed8c94544
3 changed files with 33 additions and 0 deletions

View file

@ -16458,6 +16458,7 @@ void GameHandler::handleInstanceDifficulty(network::Packet& packet) {
} else {
instanceIsHeroic_ = (instanceDifficulty_ == 1);
}
inInstance_ = true;
LOG_INFO("Instance difficulty: ", instanceDifficulty_, " heroic=", instanceIsHeroic_);
// Announce difficulty change to the player (only when it actually changes)
@ -22386,6 +22387,7 @@ void GameHandler::handleNewWorld(network::Packet& packet) {
}
currentMapId_ = mapId;
inInstance_ = false; // cleared on map change; re-set if SMSG_INSTANCE_DIFFICULTY follows
if (socket) {
socket->tracePacketsFor(std::chrono::seconds(12), "new_world");
}

View file

@ -19650,6 +19650,31 @@ void GameScreen::renderMinimapMarkers(game::GameHandler& gameHandler) {
}
}
// Instance difficulty indicator — just below zone name, inside minimap top edge
if (gameHandler.isInInstance()) {
static const char* kDiffLabels[] = {"Normal", "Heroic", "25 Normal", "25 Heroic"};
uint32_t diff = gameHandler.getInstanceDifficulty();
const char* label = (diff < 4) ? kDiffLabels[diff] : "Unknown";
ImFont* font = ImGui::GetFont();
float fontSize = ImGui::GetFontSize() * 0.85f;
ImVec2 ts = font->CalcTextSizeA(fontSize, FLT_MAX, 0.0f, label);
float tx = centerX - ts.x * 0.5f;
// Position below zone name: top edge + zone font size + small gap
float ty = centerY - mapRadius + 4.0f + ImGui::GetFontSize() + 2.0f;
float pad = 2.0f;
// Color-code: heroic=orange, normal=light gray
ImU32 bgCol = gameHandler.isInstanceHeroic() ? IM_COL32(120, 60, 0, 180) : IM_COL32(0, 0, 0, 160);
ImU32 textCol = gameHandler.isInstanceHeroic() ? IM_COL32(255, 180, 50, 255) : IM_COL32(200, 200, 200, 220);
drawList->AddRectFilled(
ImVec2(tx - pad, ty - pad),
ImVec2(tx + ts.x + pad, ty + ts.y + pad),
bgCol, 2.0f);
drawList->AddText(font, fontSize, ImVec2(tx, ty), textCol, label);
}
// Hover tooltip and right-click context menu
{
ImVec2 mouse = ImGui::GetMousePos();