- Fixed: hud_scale is supposed use strictly integral scaling factors.
SVN r3776 (trunk)
This commit is contained in:
parent
f96f665e63
commit
6760a3bfe9
5 changed files with 68 additions and 72 deletions
|
|
@ -149,6 +149,8 @@ class SBarInfoCommand
|
|||
virtual void Reset() {}
|
||||
virtual void Tick(const SBarInfoMainBlock *block, const DSBarInfo *statusBar, bool hudChanged) {}
|
||||
|
||||
SBarInfo *GetScript() { return script; }
|
||||
|
||||
protected:
|
||||
void GetCoordinates(FScanner &sc, bool fullScreenOffsets, SBarInfoCoordinate &x, SBarInfoCoordinate &y)
|
||||
{
|
||||
|
|
@ -798,6 +800,8 @@ void SBarInfo::Init()
|
|||
spacingAlignment = ALIGN_CENTER;
|
||||
resW = 320;
|
||||
resH = 200;
|
||||
cleanX = -1;
|
||||
cleanY = -1;
|
||||
|
||||
for(unsigned int i = 0;i < NUMHUDS;i++)
|
||||
huds[i] = new SBarInfoMainBlock(this);
|
||||
|
|
@ -987,9 +991,18 @@ public:
|
|||
Images.Uninit();
|
||||
}
|
||||
|
||||
void ScreenSizeChanged()
|
||||
{
|
||||
V_CalcCleanFacs(script->resW, script->resH, SCREENWIDTH, SCREENHEIGHT, &script->cleanX, &script->cleanY);
|
||||
}
|
||||
|
||||
void Draw (EHudState state)
|
||||
{
|
||||
DBaseStatusBar::Draw(state);
|
||||
if (script->cleanX <= 0)
|
||||
{ // Calculate cleanX and cleanY
|
||||
ScreenSizeChanged();
|
||||
}
|
||||
int hud = STBAR_NORMAL;
|
||||
if(state == HUD_StatusBar)
|
||||
{
|
||||
|
|
@ -1245,8 +1258,8 @@ public:
|
|||
{
|
||||
double rx, ry, rcx=0, rcy=0, rcr=INT_MAX, rcb=INT_MAX;
|
||||
|
||||
double xScale = !hud_scale ? 1.0 : (double) CleanXfac*320.0/(double) script->resW;//(double) SCREENWIDTH/(double) script->resW;
|
||||
double yScale = !hud_scale ? 1.0 : (double) CleanYfac*200.0/(double) script->resH;//(double) SCREENHEIGHT/(double) script->resH;
|
||||
double xScale = !hud_scale ? 1 : script->cleanX;
|
||||
double yScale = !hud_scale ? 1 : script->cleanY;
|
||||
|
||||
adjustRelCenter(x.RelCenter(), y.RelCenter(), dx, dy, rx, ry, xScale, yScale);
|
||||
|
||||
|
|
@ -1278,34 +1291,6 @@ public:
|
|||
rcy = cy == 0 ? 0 : ry+(((double) cy/FRACUNIT)*yScale);
|
||||
rcr = cr == 0 ? INT_MAX : rx+w-(((double) cr/FRACUNIT)*xScale);
|
||||
rcb = cb == 0 ? INT_MAX : ry+h-(((double) cb/FRACUNIT)*yScale);
|
||||
|
||||
// Fix the clipping for fullscreenoffsets.
|
||||
/*if(ry < 0)
|
||||
{
|
||||
if(rcy != 0)
|
||||
rcy = hud_scale ? SCREENHEIGHT + (int) (rcy*CleanYfac*200.0/script->resH) : SCREENHEIGHT + rcy;
|
||||
if(rcb != INT_MAX)
|
||||
rcb = hud_scale ? SCREENHEIGHT + (int) (rcb*CleanYfac*200.0/script->resH) : SCREENHEIGHT + rcb;
|
||||
}
|
||||
else if(hud_scale)
|
||||
{
|
||||
rcy *= (int) (CleanYfac*200.0/script->resH);
|
||||
if(rcb != INT_MAX)
|
||||
rcb *= (int) (CleanYfac*200.0/script->resH);
|
||||
}
|
||||
if(rx < 0)
|
||||
{
|
||||
if(rcx != 0)
|
||||
rcx = hud_scale ? SCREENWIDTH + (int) (rcx*CleanXfac*320.0/script->resW) : SCREENWIDTH + rcx;
|
||||
if(rcr != INT_MAX)
|
||||
rcr = hud_scale ? SCREENWIDTH + (int) (rcr*CleanXfac*320.0/script->resW) : SCREENWIDTH + rcr;
|
||||
}
|
||||
else if(hud_scale)
|
||||
{
|
||||
rcx *= (int) (CleanXfac*320.0/script->resW);
|
||||
if(rcr != INT_MAX)
|
||||
rcr *= (int) (CleanXfac*320.0/script->resW);
|
||||
}*/
|
||||
}
|
||||
|
||||
if(clearDontDraw)
|
||||
|
|
@ -1365,8 +1350,8 @@ public:
|
|||
{
|
||||
if(hud_scale)
|
||||
{
|
||||
xScale = (double) CleanXfac*320.0/(double) script->resW;//(double) SCREENWIDTH/(double) script->resW;
|
||||
yScale = (double) CleanYfac*200.0/(double) script->resH;//(double) SCREENWIDTH/(double) script->resW;
|
||||
xScale = script->cleanX;
|
||||
yScale = script->cleanY;
|
||||
}
|
||||
adjustRelCenter(x.RelCenter(), y.RelCenter(), *x, *y, ax, ay, xScale, yScale);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue