refactor: add 4 color constants, replace 31 more inline literals

Add kDarkRed, kSoftRed, kHostileRed, kMediumGray to ui_colors.hpp and
replace 31 inline ImVec4 literals across game_screen, character_screen,
inventory_screen, and performance_hud. Also replace local color aliases
in performance_hud with shared constants.
This commit is contained in:
Kelsi 2026-03-27 10:20:45 -07:00
parent dec23423d8
commit e3c999d844
5 changed files with 40 additions and 34 deletions

View file

@ -3372,7 +3372,7 @@ void GameScreen::renderPlayerFrame(game::GameHandler& gameHandler) {
ImGui::TextDisabled("Lv %u", playerLevel);
if (isDead) {
ImGui::SameLine();
ImGui::TextColored(ImVec4(0.9f, 0.2f, 0.2f, 1.0f), "DEAD");
ImGui::TextColored(colors::kDarkRed, "DEAD");
}
// Group leader crown on self frame when you lead the party/raid
if (gameHandler.isInGroup() &&
@ -3472,7 +3472,7 @@ void GameScreen::renderPlayerFrame(game::GameHandler& gameHandler) {
}
break;
}
case 1: powerColor = ImVec4(0.9f, 0.2f, 0.2f, 1.0f); break; // Rage (red)
case 1: powerColor = colors::kDarkRed; break; // Rage (red)
case 2: powerColor = ImVec4(0.9f, 0.6f, 0.1f, 1.0f); break; // Focus (orange)
case 3: powerColor = ImVec4(0.9f, 0.9f, 0.2f, 1.0f); break; // Energy (yellow)
case 4: powerColor = ImVec4(0.5f, 0.9f, 0.3f, 1.0f); break; // Happiness (green)
@ -3808,7 +3808,7 @@ void GameScreen::renderPetFrame(game::GameHandler& gameHandler) {
ImVec4 powerColor;
switch (powerType) {
case 0: powerColor = colors::kManaBlue; break; // Mana
case 1: powerColor = ImVec4(0.9f, 0.2f, 0.2f, 1.0f); break; // Rage
case 1: powerColor = colors::kDarkRed; break; // Rage
case 2: powerColor = ImVec4(0.9f, 0.6f, 0.1f, 1.0f); break; // Focus (hunter pets)
case 3: powerColor = ImVec4(0.9f, 0.9f, 0.2f, 1.0f); break; // Energy
default: powerColor = colors::kManaBlue; break;
@ -3860,7 +3860,7 @@ void GameScreen::renderPetFrame(game::GameHandler& gameHandler) {
static const ImVec4 kReactColors[] = {
colors::kLightBlue, // passive — blue
ImVec4(0.3f, 0.85f, 0.3f, 1.0f), // defensive — green
ImVec4(1.0f, 0.35f, 0.35f, 1.0f),// aggressive — red
colors::kHostileRed,// aggressive — red
};
static const ImVec4 kReactDimColors[] = {
ImVec4(0.15f, 0.2f, 0.4f, 0.8f),
@ -4490,7 +4490,7 @@ void GameScreen::renderTargetFrame(game::GameHandler& gameHandler) {
ImVec4 targetPowerColor;
switch (targetPowerType) {
case 0: targetPowerColor = colors::kManaBlue; break; // Mana (blue)
case 1: targetPowerColor = ImVec4(0.9f, 0.2f, 0.2f, 1.0f); break; // Rage (red)
case 1: targetPowerColor = colors::kDarkRed; break; // Rage (red)
case 2: targetPowerColor = ImVec4(0.9f, 0.6f, 0.1f, 1.0f); break; // Focus (orange)
case 3: targetPowerColor = ImVec4(0.9f, 0.9f, 0.2f, 1.0f); break; // Energy (yellow)
case 4: targetPowerColor = ImVec4(0.5f, 0.9f, 0.3f, 1.0f); break; // Happiness (green)
@ -5364,7 +5364,7 @@ void GameScreen::renderFocusFrame(game::GameHandler& gameHandler) {
ImVec4 pwrColor;
switch (pType) {
case 0: pwrColor = colors::kManaBlue; break;
case 1: pwrColor = ImVec4(0.9f, 0.2f, 0.2f, 1.0f); break;
case 1: pwrColor = colors::kDarkRed; break;
case 3: pwrColor = ImVec4(0.9f, 0.9f, 0.2f, 1.0f); break;
case 6: pwrColor = ImVec4(0.8f, 0.1f, 0.2f, 1.0f); break;
default: pwrColor = colors::kManaBlue; break;
@ -9332,7 +9332,7 @@ void GameScreen::renderActionBar(game::GameHandler& gameHandler) {
}
}
if (outOfRange) {
ImGui::TextColored(ImVec4(1.0f, 0.35f, 0.35f, 1.0f), "Out of range");
ImGui::TextColored(colors::kHostileRed, "Out of range");
}
if (insufficientPower) {
ImGui::TextColored(ImVec4(0.75f, 0.55f, 1.0f, 1.0f), "Not enough power");
@ -12632,7 +12632,7 @@ void GameScreen::renderPartyFrames(game::GameHandler& gameHandler) {
ImVec4 powerColor;
switch (member.powerType) {
case 0: powerColor = colors::kManaBlue; break; // Mana (blue)
case 1: powerColor = ImVec4(0.9f, 0.2f, 0.2f, 1.0f); break; // Rage (red)
case 1: powerColor = colors::kDarkRed; break; // Rage (red)
case 2: powerColor = ImVec4(0.9f, 0.6f, 0.1f, 1.0f); break; // Focus (orange)
case 3: powerColor = ImVec4(0.9f, 0.9f, 0.2f, 1.0f); break; // Energy (yellow)
case 4: powerColor = ImVec4(0.5f, 0.9f, 0.3f, 1.0f); break; // Happiness (green)
@ -13319,7 +13319,7 @@ void GameScreen::renderBossFrames(game::GameHandler& gameHandler) {
ImVec4 bpColor;
switch (bossPowerType) {
case 0: bpColor = ImVec4(0.2f, 0.3f, 0.9f, 1.0f); break; // Mana: blue
case 1: bpColor = ImVec4(0.9f, 0.2f, 0.2f, 1.0f); break; // Rage: red
case 1: bpColor = colors::kDarkRed; break; // Rage: red
case 2: bpColor = ImVec4(0.9f, 0.6f, 0.1f, 1.0f); break; // Focus: orange
case 3: bpColor = ImVec4(0.9f, 0.9f, 0.1f, 1.0f); break; // Energy: yellow
default: bpColor = ImVec4(0.4f, 0.8f, 0.4f, 1.0f); break;
@ -14180,7 +14180,7 @@ void GameScreen::renderBgInvitePopup(game::GameHandler& gameHandler) {
frac = std::clamp(frac, 0.0f, 1.0f);
ImVec4 barColor = frac > 0.5f ? ImVec4(0.2f, 0.8f, 0.2f, 1.0f)
: frac > 0.25f ? ImVec4(0.9f, 0.7f, 0.1f, 1.0f)
: ImVec4(0.9f, 0.2f, 0.2f, 1.0f);
: colors::kDarkRed;
ImGui::PushStyleColor(ImGuiCol_PlotHistogram, barColor);
char countdownLabel[32];
snprintf(countdownLabel, sizeof(countdownLabel), "%ds", static_cast<int>(remaining));
@ -16033,7 +16033,7 @@ void GameScreen::renderGossipWindow(game::GameHandler& gameHandler) {
switch (quest.questIcon) {
case 5: // INCOMPLETE — in progress but not done
statusIcon = "?";
statusColor = ImVec4(0.65f, 0.65f, 0.65f, 1.0f); // gray
statusColor = colors::kMediumGray; // gray
break;
case 6: // REWARD_REP — repeatable, ready to turn in
case 10: // REWARD — ready to turn in
@ -16042,7 +16042,7 @@ void GameScreen::renderGossipWindow(game::GameHandler& gameHandler) {
break;
case 7: // AVAILABLE_LOW — available but gray (low-level)
statusIcon = "!";
statusColor = ImVec4(0.65f, 0.65f, 0.65f, 1.0f); // gray
statusColor = colors::kMediumGray; // gray
break;
default: // AVAILABLE (8) and any others
statusIcon = "!";
@ -17877,7 +17877,7 @@ void GameScreen::renderDeathScreen(game::GameHandler& gameHandler) {
snprintf(timerBuf, sizeof(timerBuf), "Auto-release in %d:%02d", mins, secs);
float tw = ImGui::CalcTextSize(timerBuf).x;
ImGui::SetCursorPosX((dlgW - tw) / 2);
ImGui::TextColored(ImVec4(0.65f, 0.65f, 0.65f, 1.0f), "%s", timerBuf);
ImGui::TextColored(colors::kMediumGray, "%s", timerBuf);
}
ImGui::Spacing();
@ -20302,7 +20302,7 @@ void GameScreen::renderMinimapMarkers(game::GameHandler& gameHandler) {
glm::vec3 hoverRender(playerRender.x + hoverDx, playerRender.y + hoverDy, playerRender.z);
glm::vec3 hoverCanon = core::coords::renderToCanonical(hoverRender);
ImGui::TextColored(ImVec4(0.9f, 0.85f, 0.5f, 1.0f), "%.1f, %.1f", hoverCanon.x, hoverCanon.y);
ImGui::TextColored(ImVec4(0.65f, 0.65f, 0.65f, 1.0f), "Ctrl+click to ping");
ImGui::TextColored(colors::kMediumGray, "Ctrl+click to ping");
ImGui::EndTooltip();
if (ImGui::IsMouseClicked(ImGuiMouseButton_Right)) {
@ -23879,7 +23879,7 @@ void GameScreen::renderDungeonFinderWindow(game::GameHandler& gameHandler) {
}
if (!rolesOk) {
ImGui::EndDisabled();
ImGui::TextColored(ImVec4(1.0f, 0.4f, 0.4f, 1.0f), "Select at least one role.");
ImGui::TextColored(colors::kSoftRed, "Select at least one role.");
}
}
@ -23978,7 +23978,7 @@ void GameScreen::renderInstanceLockouts(game::GameHandler& gameHandler) {
if (lo.extended) {
ImGui::TextColored(ImVec4(0.3f, 0.7f, 1.0f, 1.0f), "Ext");
} else if (lo.locked) {
ImGui::TextColored(ImVec4(1.0f, 0.4f, 0.4f, 1.0f), "Locked");
ImGui::TextColored(colors::kSoftRed, "Locked");
} else {
ImGui::TextColored(ImVec4(0.5f, 0.9f, 0.5f, 1.0f), "Open");
}
@ -24103,7 +24103,7 @@ void GameScreen::renderBattlegroundScore(game::GameHandler& gameHandler) {
snprintf(hBuf, sizeof(hBuf), "\xF0\x9F\x94\xB4 %u / %u", hordeScore, maxScore);
else
snprintf(hBuf, sizeof(hBuf), "\xF0\x9F\x94\xB4 %u", hordeScore);
ImGui::TextColored(ImVec4(1.0f, 0.35f, 0.35f, 1.0f), "%s", hBuf);
ImGui::TextColored(colors::kHostileRed, "%s", hBuf);
}
ImGui::EndGroup();
}
@ -24312,7 +24312,7 @@ void GameScreen::renderCombatLog(game::GameHandler& gameHandler) {
switch (e.type) {
case T::MELEE_DAMAGE:
snprintf(desc, sizeof(desc), "%s hits %s for %d", src, tgt, e.amount);
color = e.isPlayerSource ? ImVec4(1.0f, 0.9f, 0.3f, 1.0f) : ImVec4(1.0f, 0.4f, 0.4f, 1.0f);
color = e.isPlayerSource ? ImVec4(1.0f, 0.9f, 0.3f, 1.0f) : colors::kSoftRed;
break;
case T::CRIT_DAMAGE:
snprintf(desc, sizeof(desc), "%s crits %s for %d!", src, tgt, e.amount);
@ -24323,7 +24323,7 @@ void GameScreen::renderCombatLog(game::GameHandler& gameHandler) {
snprintf(desc, sizeof(desc), "%s's %s hits %s for %d", src, spell, tgt, e.amount);
else
snprintf(desc, sizeof(desc), "%s's spell hits %s for %d", src, tgt, e.amount);
color = e.isPlayerSource ? ImVec4(1.0f, 0.9f, 0.3f, 1.0f) : ImVec4(1.0f, 0.4f, 0.4f, 1.0f);
color = e.isPlayerSource ? ImVec4(1.0f, 0.9f, 0.3f, 1.0f) : colors::kSoftRed;
break;
case T::PERIODIC_DAMAGE:
if (spell)
@ -24358,21 +24358,21 @@ void GameScreen::renderCombatLog(game::GameHandler& gameHandler) {
snprintf(desc, sizeof(desc), "%s's %s misses %s", src, spell, tgt);
else
snprintf(desc, sizeof(desc), "%s misses %s", src, tgt);
color = ImVec4(0.65f, 0.65f, 0.65f, 1.0f);
color = colors::kMediumGray;
break;
case T::DODGE:
if (spell)
snprintf(desc, sizeof(desc), "%s dodges %s's %s", tgt, src, spell);
else
snprintf(desc, sizeof(desc), "%s dodges %s's attack", tgt, src);
color = ImVec4(0.65f, 0.65f, 0.65f, 1.0f);
color = colors::kMediumGray;
break;
case T::PARRY:
if (spell)
snprintf(desc, sizeof(desc), "%s parries %s's %s", tgt, src, spell);
else
snprintf(desc, sizeof(desc), "%s parries %s's attack", tgt, src);
color = ImVec4(0.65f, 0.65f, 0.65f, 1.0f);
color = colors::kMediumGray;
break;
case T::BLOCK:
if (spell)
@ -24386,7 +24386,7 @@ void GameScreen::renderCombatLog(game::GameHandler& gameHandler) {
snprintf(desc, sizeof(desc), "%s evades %s's %s", tgt, src, spell);
else
snprintf(desc, sizeof(desc), "%s evades %s's attack", tgt, src);
color = ImVec4(0.65f, 0.65f, 0.65f, 1.0f);
color = colors::kMediumGray;
break;
case T::IMMUNE:
if (spell)
@ -24799,7 +24799,7 @@ void GameScreen::renderGmTicketWindow(game::GameHandler& gameHandler) {
// Show GM support availability
if (!gameHandler.isGmSupportAvailable()) {
ImGui::TextColored(ImVec4(1.0f, 0.4f, 0.4f, 1.0f), "GM support is currently unavailable.");
ImGui::TextColored(colors::kSoftRed, "GM support is currently unavailable.");
ImGui::Spacing();
}
@ -24980,7 +24980,7 @@ void GameScreen::renderBgScoreboard(game::GameHandler& gameHandler) {
const auto& at = data->arenaTeams[t];
if (at.teamName.empty()) continue;
int32_t ratingDelta = static_cast<int32_t>(at.ratingChange);
ImVec4 teamCol = (t == 0) ? ImVec4(1.0f, 0.35f, 0.35f, 1.0f) // team 0: red
ImVec4 teamCol = (t == 0) ? colors::kHostileRed // team 0: red
: colors::kLightBlue; // team 1: blue
ImGui::TextColored(teamCol, "%s", at.teamName.c_str());
ImGui::SameLine();
@ -25002,12 +25002,12 @@ void GameScreen::renderBgScoreboard(game::GameHandler& gameHandler) {
// For arenas, winner byte 0/1 refers to team index in arenaTeams[]
const auto& winTeam = data->arenaTeams[data->winner & 1];
winnerStr = winTeam.teamName.empty() ? "Team 1" : winTeam.teamName.c_str();
winnerColor = (data->winner == 0) ? ImVec4(1.0f, 0.35f, 0.35f, 1.0f)
winnerColor = (data->winner == 0) ? colors::kHostileRed
: colors::kLightBlue;
} else {
winnerStr = (data->winner == 1) ? "Alliance" : "Horde";
winnerColor = (data->winner == 1) ? colors::kLightBlue
: ImVec4(1.0f, 0.35f, 0.35f, 1.0f);
: colors::kHostileRed;
}
float textW = ImGui::CalcTextSize(winnerStr).x + ImGui::CalcTextSize(" Victory!").x;
ImGui::SetCursorPosX((ImGui::GetContentRegionAvail().x - textW) * 0.5f);
@ -25081,7 +25081,7 @@ void GameScreen::renderBgScoreboard(game::GameHandler& gameHandler) {
if (ps->team == 1)
ImGui::TextColored(colors::kLightBlue, "Alliance");
else
ImGui::TextColored(ImVec4(1.0f, 0.35f, 0.35f, 1.0f), "Horde");
ImGui::TextColored(colors::kHostileRed, "Horde");
// Name (highlight player's own row)
ImGui::TableNextColumn();
@ -25262,7 +25262,7 @@ void GameScreen::renderInspectWindow(game::GameHandler& gameHandler) {
ImGui::TextDisabled(" %u talent pts", result->totalTalents);
if (result->unspentTalents > 0) {
ImGui::SameLine();
ImGui::TextColored(ImVec4(1.0f, 0.4f, 0.4f, 1.0f), "(%u unspent)", result->unspentTalents);
ImGui::TextColored(colors::kSoftRed, "(%u unspent)", result->unspentTalents);
}
if (result->talentGroups > 1) {
ImGui::SameLine();