fix(minimap): keep a single player direction indicator

This commit is contained in:
Kelsi 2026-03-14 06:48:14 -07:00
parent 5b195781ad
commit 76f54bbd2c
2 changed files with 16 additions and 23 deletions

View file

@ -44,8 +44,22 @@ void main() {
vec4 mapColor = texture(uComposite, mapUV);
// Player direction arrow is rendered by GameScreen minimap overlays.
// Keep shader output to map imagery only to avoid duplicate indicators.
// Single player direction indicator (center arrow) rendered in-shader.
vec2 local = center; // [-0.5, 0.5] around minimap center
float ac = cos(push.arrowRotation);
float as = sin(push.arrowRotation);
vec2 tip = vec2(0.0, 0.09);
vec2 left = vec2(-0.045, -0.02);
vec2 right = vec2( 0.045, -0.02);
mat2 rot = mat2(ac, -as, as, ac);
tip = rot * tip;
left = rot * left;
right = rot * right;
if (pointInTriangle(local, tip, left, right)) {
mapColor.rgb = vec3(1.0, 0.86, 0.05);
}
float centerDot = smoothstep(0.016, 0.0, length(local));
mapColor.rgb = mix(mapColor.rgb, vec3(1.0), centerDot * 0.95);
// Dark border ring
float border = smoothstep(0.48, 0.5, dist);

View file

@ -15881,27 +15881,6 @@ void GameScreen::renderMinimapMarkers(game::GameHandler& gameHandler) {
return true;
};
// Player position marker — always drawn at minimap center with a directional arrow.
{
// The player is always at centerX, centerY on the minimap.
// Draw a yellow arrow pointing in the player's facing direction.
glm::vec3 fwd = camera->getForward();
float facing = std::atan2(fwd.y, -fwd.x); // clockwise bearing from North
float cosF = std::cos(facing - bearing);
float sinF = std::sin(facing - bearing);
float arrowLen = 8.0f;
float arrowW = 4.0f;
ImVec2 tip(centerX + sinF * arrowLen, centerY - cosF * arrowLen);
ImVec2 left(centerX - cosF * arrowW - sinF * arrowLen * 0.3f,
centerY - sinF * arrowW + cosF * arrowLen * 0.3f);
ImVec2 right(centerX + cosF * arrowW - sinF * arrowLen * 0.3f,
centerY + sinF * arrowW + cosF * arrowLen * 0.3f);
drawList->AddTriangleFilled(tip, left, right, IM_COL32(255, 220, 0, 255));
drawList->AddTriangle(tip, left, right, IM_COL32(0, 0, 0, 180), 1.0f);
// White dot at player center
drawList->AddCircleFilled(ImVec2(centerX, centerY), 2.5f, IM_COL32(255, 255, 255, 220));
}
// Build sets of entries that are incomplete objectives for tracked quests.
// minimapQuestEntries: NPC creature entries (npcOrGoId > 0)
// minimapQuestGoEntries: game object entries (npcOrGoId < 0, stored as abs value)