- added a 'protrusion' property to SBARINFO so that the map name display can properly be handled here as well. Until now it was only working for scripted status bars.

This commit is contained in:
Christoph Oelckers 2017-05-05 19:32:37 +02:00
parent 4fcea96a1c
commit bb12dabe2b
5 changed files with 43 additions and 0 deletions

View file

@ -386,6 +386,7 @@ enum //Key words
SBARINFO_STATUSBAR,
SBARINFO_MUGSHOT,
SBARINFO_CREATEPOPUP,
SBARINFO_PROTRUSION,
};
enum //Bar types
@ -414,6 +415,7 @@ static const char *SBarInfoTopLevel[] =
"statusbar",
"mugshot",
"createpopup",
"protrusion",
NULL
};
@ -743,6 +745,21 @@ void SBarInfo::ParseSBarInfo(int lump)
sc.MustGetToken(';');
break;
}
case SBARINFO_PROTRUSION:
{
double lastvalue = -DBL_EPSILON;
do
{
sc.MustGetToken(TK_FloatConst);
if (sc.Float <= lastvalue) sc.ScriptError("Protrusion factors must be in ascending order");
lastvalue = sc.Float;
sc.MustGetToken(',');
sc.MustGetToken(TK_IntConst);
protrusions.Push({ lastvalue, sc.Number });
} while (sc.CheckToken(','));
sc.MustGetToken(';');
break;
}
}
}
}
@ -1160,6 +1177,17 @@ public:
}
}
int _GetProtrusion(double scalefac)
{
int returnval = 0;
for (auto &prot : script->protrusions)
{
if (prot.first > scalefac) break;
returnval = prot.second;
}
return returnval;
}
//draws an image with the specified flags
void DrawGraphic(FTexture* texture, SBarInfoCoordinate x, SBarInfoCoordinate y, int xOffset, int yOffset, double Alpha, bool fullScreenOffsets, bool translate=false, bool dim=false, int offsetflags=0, bool alphaMap=false, int forceWidth=-1, int forceHeight=-1, const double *clip = nulclip, bool clearDontDraw=false) const
{
@ -1538,6 +1566,12 @@ DEFINE_ACTION_FUNCTION(DSBarInfo, ShowPop)
return 0;
}
DEFINE_ACTION_FUNCTION(DSBarInfo, GetProtrusion)
{
PARAM_SELF_STRUCT_PROLOGUE(DSBarInfo);
PARAM_FLOAT(scalefac);
ACTION_RETURN_INT(self->_GetProtrusion(scalefac));
}
DBaseStatusBar *CreateCustomStatusBar(int scriptno)
{

View file

@ -101,6 +101,7 @@ struct SBarInfo
bool completeBorder;
bool lowerHealthCap;
char spacingCharacter;
TArray<std::pair<double, int>> protrusions;
MonospaceAlignment spacingAlignment;
int interpolationSpeed;
int armorInterpolationSpeed;

View file

@ -10,6 +10,7 @@
******************************************************************************/
height 42;
protrusion 0.7, 8;
monospacefonts true, "0", center;
statusbar fullscreen, fullscreenoffsets

View file

@ -10,6 +10,7 @@
******************************************************************************/
height 38;
protrusion 0.0, 12, 0.85, 28;
monospacefonts true, "0", center;
statusbar fullscreen, fullscreenoffsets

View file

@ -8,6 +8,7 @@ struct SBarInfo native ui
native bool MustDrawLog(int state);
native void Tick();
native void ShowPop(int popnum);
native int GetProtrusion(double scalefac);
}
@ -62,5 +63,10 @@ class SBarInfoWrapper : BaseStatusBar
core.ShowPop(popnum);
}
override int GetProtrusion(double scaleratio) const
{
return core.GetProtrusion(scaleratio);
}
}