Fix Minimap Icon positions for new Minimap scale

This commit is contained in:
Sryder13 2017-12-19 03:11:51 +00:00
parent 36439da320
commit d0b4ad0ce7

View file

@ -4228,11 +4228,11 @@ void K_drawMinimap(void)
} }
else else
{ {
x = 312 - (AutomapPic->width/2); x = 310 - (AutomapPic->width/2);
y = 60; y = 50;
} }
V_DrawSmallScaledPatch(x, y, 0, AutomapPic); V_DrawSmallScaledPatch(x, y, V_TRANSLUCENT|V_SNAPTORIGHT, AutomapPic);
// Player's tiny icons on the Automap. // Player's tiny icons on the Automap.
if (lumpnum != -1) if (lumpnum != -1)
@ -4247,20 +4247,49 @@ void K_drawMinimap(void)
// am xpos & ypos are the icon's starting position. Withouht // am xpos & ypos are the icon's starting position. Withouht
// it, they wouldn't 'spawn' on the top-right side of the HUD. // it, they wouldn't 'spawn' on the top-right side of the HUD.
amnumxpos = (players[i].mo->x / 320) >> FRACBITS;
amnumypos = (-players[i].mo->y / 340) >> FRACBITS;
amxpos = (x + amnumxpos) - (iconprefix[players[i].skin]->width/4); node_t *bsp = &nodes[numnodes-1];
amypos = (y + amnumypos) - (iconprefix[players[i].skin]->height/4); fixed_t maxx, minx, maxy, miny;
maxx = maxy = INT32_MAX;
minx = miny = INT32_MIN;
minx = bsp->bbox[0][BOXLEFT];
maxx = bsp->bbox[0][BOXRIGHT];
miny = bsp->bbox[0][BOXBOTTOM];
maxy = bsp->bbox[0][BOXTOP];
if (bsp->bbox[1][BOXLEFT] < minx)
minx = bsp->bbox[1][BOXLEFT];
if (bsp->bbox[1][BOXRIGHT] > maxx)
maxx = bsp->bbox[1][BOXRIGHT];
if (bsp->bbox[1][BOXBOTTOM] < miny)
miny = bsp->bbox[1][BOXBOTTOM];
if (bsp->bbox[1][BOXTOP] > maxy)
miny = bsp->bbox[1][BOXTOP];
fixed_t mapwidth = maxx - minx;
fixed_t mapheight = maxy - miny;
fixed_t xoffset = minx + mapwidth/2;
fixed_t yoffset = miny + mapheight/2;
fixed_t xscale = FixedDiv((AutomapPic->width<<FRACBITS)/2, mapwidth);
fixed_t yscale = FixedDiv((AutomapPic->height<<FRACBITS)/2, mapheight);
fixed_t zoom = FixedMul(min(xscale, yscale), FRACUNIT-FRACUNIT/20);
amnumxpos = (FixedMul(players[i].mo->x, zoom) - FixedMul(xoffset, zoom));
amnumypos = -(FixedMul(players[i].mo->y, zoom) - FixedMul(yoffset, zoom));
amxpos = amnumxpos + ((x + AutomapPic->width/4 - (iconprefix[players[i].skin]->width/4))<<FRACBITS);
amypos = amnumypos + ((y + AutomapPic->height/4 - (iconprefix[players[i].skin]->height/4))<<FRACBITS);
if (!players[i].skincolor) // 'default' color if (!players[i].skincolor) // 'default' color
{ {
V_DrawSmallScaledPatch(amxpos, amypos, 0, iconprefix[players[i].skin]); V_DrawSciencePatch(amxpos, amypos, V_SNAPTORIGHT, iconprefix[players[i].skin], FRACUNIT/2);
} }
else else
{ {
UINT8 *colormap = R_GetTranslationColormap(players[i].skin, players[i].skincolor, 0); //transtables[players[i].skin] - 256 + (players[i].skincolor<<8); UINT8 *colormap = R_GetTranslationColormap(players[i].skin, players[i].skincolor, 0); //transtables[players[i].skin] - 256 + (players[i].skincolor<<8);
V_DrawSmallMappedPatch(amxpos, amypos, 0,iconprefix[players[i].skin], colormap); V_DrawFixedPatch(amxpos, amypos, FRACUNIT/2, V_SNAPTORIGHT, iconprefix[players[i].skin], colormap);
} }
} }
} }