(SBARINfO update)
- Added: fullscreenoffsets flag for status bars. This changes the coordinate system to be relative to the top left corner of the screen. This is useful for full screen status bars. - Changed: drawinventorybar will use the width of artibox or invcurs (strife) to determine the spacing. Let me know if this breaks any released mods. - Fixed: If a status bar height of 0 was specified in SBarInfo the wrong bar would be shown. - Fixed: If a static inventory bar was used the user still had to press invuse in order to get rid of the "overlay". - Fixed: forcescaled would not work if the height of the bar was 0. - Added: keyslot to drawswitchableimage. - Fixed: The transition effects for the log and keys popups were switched. SVN r1116 (trunk)
This commit is contained in:
parent
3700fda0e8
commit
3908c71510
6 changed files with 236 additions and 114 deletions
|
|
@ -264,6 +264,10 @@ void SBarInfo::ParseSBarInfo(int lump)
|
|||
{
|
||||
this->huds[barNum].forceScaled = true;
|
||||
}
|
||||
else if(sc.Compare("fullscreenoffsets"))
|
||||
{
|
||||
this->huds[barNum].fullScreenOffsets = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
sc.ScriptError("Unkown flag '%s'.", sc.String);
|
||||
|
|
@ -318,9 +322,9 @@ void SBarInfo::ParseSBarInfo(int lump)
|
|||
{
|
||||
int pop = 0;
|
||||
sc.MustGetToken(TK_Identifier);
|
||||
if(sc.Compare("keys"))
|
||||
if(sc.Compare("log"))
|
||||
pop = 0;
|
||||
else if(sc.Compare("log"))
|
||||
else if(sc.Compare("keys"))
|
||||
pop = 1;
|
||||
else if(sc.Compare("status"))
|
||||
pop = 2;
|
||||
|
|
@ -385,6 +389,12 @@ void SBarInfo::ParseSBarInfoBlock(FScanner &sc, SBarInfoBlock &block)
|
|||
{
|
||||
cmd.flags = DRAWIMAGE_INVULNERABILITY;
|
||||
}
|
||||
else if(sc.Compare("keyslot"))
|
||||
{
|
||||
cmd.flags = DRAWIMAGE_KEYSLOT;
|
||||
sc.MustGetToken(TK_IntConst);
|
||||
cmd.value = sc.Number;
|
||||
}
|
||||
else
|
||||
{
|
||||
cmd.setString(sc, sc.String, 0);
|
||||
|
|
@ -397,12 +407,20 @@ void SBarInfo::ParseSBarInfoBlock(FScanner &sc, SBarInfoBlock &block)
|
|||
if(sc.CheckToken(TK_AndAnd))
|
||||
{
|
||||
cmd.flags |= DRAWIMAGE_SWITCHABLE_AND;
|
||||
sc.MustGetToken(TK_Identifier);
|
||||
cmd.setString(sc, sc.String, 1);
|
||||
const PClass* item = PClass::FindClass(sc.String);
|
||||
if(item == NULL || !PClass::FindClass("Inventory")->IsAncestorOf(item)) //must be a kind of Inventory
|
||||
if(cmd.flags & DRAWIMAGE_KEYSLOT)
|
||||
{
|
||||
sc.ScriptError("'%s' is not a type of inventory item.", sc.String);
|
||||
sc.MustGetToken(TK_IntConst);
|
||||
cmd.special4 = sc.Number;
|
||||
}
|
||||
else
|
||||
{
|
||||
sc.MustGetToken(TK_Identifier);
|
||||
cmd.setString(sc, sc.String, 1);
|
||||
const PClass* item = PClass::FindClass(sc.String);
|
||||
if(item == NULL || !PClass::FindClass("Inventory")->IsAncestorOf(item)) //must be a kind of Inventory
|
||||
{
|
||||
sc.ScriptError("'%s' is not a type of inventory item.", sc.String);
|
||||
}
|
||||
}
|
||||
sc.MustGetToken(',');
|
||||
sc.MustGetToken(TK_StringConst);
|
||||
|
|
@ -465,7 +483,7 @@ void SBarInfo::ParseSBarInfoBlock(FScanner &sc, SBarInfoBlock &block)
|
|||
cmd.sprite_index.SetInvalid();
|
||||
}
|
||||
sc.MustGetToken(',');
|
||||
this->getCoordinates(sc, cmd);
|
||||
this->getCoordinates(sc, cmd, block.fullScreenOffsets);
|
||||
if(sc.CheckToken(','))
|
||||
{
|
||||
sc.MustGetToken(TK_Identifier);
|
||||
|
|
@ -594,7 +612,7 @@ void SBarInfo::ParseSBarInfoBlock(FScanner &sc, SBarInfoBlock &block)
|
|||
if(!sc.CheckToken('|'))
|
||||
sc.MustGetToken(',');
|
||||
}
|
||||
this->getCoordinates(sc, cmd);
|
||||
this->getCoordinates(sc, cmd, block.fullScreenOffsets);
|
||||
if(sc.CheckToken(','))
|
||||
{
|
||||
bool needsComma = false;
|
||||
|
|
@ -644,7 +662,7 @@ void SBarInfo::ParseSBarInfoBlock(FScanner &sc, SBarInfoBlock &block)
|
|||
if(!sc.CheckToken('|'))
|
||||
sc.MustGetToken(',');
|
||||
}
|
||||
this->getCoordinates(sc, cmd);
|
||||
this->getCoordinates(sc, cmd, block.fullScreenOffsets);
|
||||
sc.MustGetToken(';');
|
||||
break;
|
||||
case SBARINFO_DRAWSELECTEDINVENTORY:
|
||||
|
|
@ -706,6 +724,7 @@ void SBarInfo::ParseSBarInfoBlock(FScanner &sc, SBarInfoBlock &block)
|
|||
if(alternateonempty)
|
||||
{
|
||||
sc.MustGetToken('{');
|
||||
cmd.subBlock.fullScreenOffsets = block.fullScreenOffsets;
|
||||
this->ParseSBarInfoBlock(sc, cmd.subBlock);
|
||||
}
|
||||
else
|
||||
|
|
@ -762,7 +781,7 @@ void SBarInfo::ParseSBarInfoBlock(FScanner &sc, SBarInfoBlock &block)
|
|||
sc.ScriptError("Unknown font '%s'.", sc.String);
|
||||
|
||||
sc.MustGetToken(',');
|
||||
this->getCoordinates(sc, cmd);
|
||||
this->getCoordinates(sc, cmd, block.fullScreenOffsets);
|
||||
cmd.special2 = cmd.x + 26;
|
||||
cmd.special3 = cmd.y + 22;
|
||||
cmd.translation = CR_GOLD;
|
||||
|
|
@ -885,7 +904,7 @@ void SBarInfo::ParseSBarInfoBlock(FScanner &sc, SBarInfoBlock &block)
|
|||
if(!sc.CheckToken('|'))
|
||||
sc.MustGetToken(',');
|
||||
}
|
||||
this->getCoordinates(sc, cmd);
|
||||
this->getCoordinates(sc, cmd, block.fullScreenOffsets);
|
||||
if(sc.CheckToken(',')) //border
|
||||
{
|
||||
sc.MustGetToken(TK_IntConst);
|
||||
|
|
@ -925,7 +944,7 @@ void SBarInfo::ParseSBarInfoBlock(FScanner &sc, SBarInfoBlock &block)
|
|||
sc.ScriptError("Chain size must be a positive number.");
|
||||
cmd.special4 = sc.Number;
|
||||
sc.MustGetToken(',');
|
||||
this->getCoordinates(sc, cmd);
|
||||
this->getCoordinates(sc, cmd, block.fullScreenOffsets);
|
||||
sc.MustGetToken(';');
|
||||
break;
|
||||
case SBARINFO_DRAWSHADER:
|
||||
|
|
@ -954,7 +973,7 @@ void SBarInfo::ParseSBarInfoBlock(FScanner &sc, SBarInfoBlock &block)
|
|||
cmd.flags |= DRAWSHADER_REVERSE;
|
||||
sc.MustGetToken(',');
|
||||
}
|
||||
this->getCoordinates(sc, cmd);
|
||||
this->getCoordinates(sc, cmd, block.fullScreenOffsets);
|
||||
sc.MustGetToken(';');
|
||||
break;
|
||||
case SBARINFO_DRAWSTRING:
|
||||
|
|
@ -969,7 +988,7 @@ void SBarInfo::ParseSBarInfoBlock(FScanner &sc, SBarInfoBlock &block)
|
|||
sc.MustGetToken(TK_StringConst);
|
||||
cmd.setString(sc, sc.String, 0, -1, false);
|
||||
sc.MustGetToken(',');
|
||||
this->getCoordinates(sc, cmd);
|
||||
this->getCoordinates(sc, cmd, block.fullScreenOffsets);
|
||||
if(sc.CheckToken(',')) //spacing
|
||||
{
|
||||
sc.MustGetToken(TK_IntConst);
|
||||
|
|
@ -990,7 +1009,7 @@ void SBarInfo::ParseSBarInfoBlock(FScanner &sc, SBarInfoBlock &block)
|
|||
sc.MustGetToken(TK_IntConst);
|
||||
cmd.special = sc.Number;
|
||||
sc.MustGetToken(',');
|
||||
this->getCoordinates(sc, cmd);
|
||||
this->getCoordinates(sc, cmd, block.fullScreenOffsets);
|
||||
sc.MustGetToken(';');
|
||||
break;
|
||||
case SBARINFO_GAMEMODE:
|
||||
|
|
@ -1010,6 +1029,7 @@ void SBarInfo::ParseSBarInfoBlock(FScanner &sc, SBarInfoBlock &block)
|
|||
break;
|
||||
sc.MustGetToken(',');
|
||||
}
|
||||
cmd.subBlock.fullScreenOffsets = block.fullScreenOffsets;
|
||||
this->ParseSBarInfoBlock(sc, cmd.subBlock);
|
||||
break;
|
||||
case SBARINFO_PLAYERCLASS:
|
||||
|
|
@ -1038,6 +1058,7 @@ void SBarInfo::ParseSBarInfoBlock(FScanner &sc, SBarInfoBlock &block)
|
|||
sc.MustGetToken(',');
|
||||
}
|
||||
FinishPlayerClass:
|
||||
cmd.subBlock.fullScreenOffsets = block.fullScreenOffsets;
|
||||
this->ParseSBarInfoBlock(sc, cmd.subBlock);
|
||||
break;
|
||||
case SBARINFO_ASPECTRATIO:
|
||||
|
|
@ -1053,6 +1074,7 @@ void SBarInfo::ParseSBarInfoBlock(FScanner &sc, SBarInfoBlock &block)
|
|||
else
|
||||
sc.ScriptError("Unkown aspect ratio: %s", sc.String);
|
||||
sc.MustGetToken('{');
|
||||
cmd.subBlock.fullScreenOffsets = block.fullScreenOffsets;
|
||||
this->ParseSBarInfoBlock(sc, cmd.subBlock);
|
||||
break;
|
||||
case SBARINFO_ISSELECTED:
|
||||
|
|
@ -1080,6 +1102,7 @@ void SBarInfo::ParseSBarInfoBlock(FScanner &sc, SBarInfoBlock &block)
|
|||
break;
|
||||
}
|
||||
sc.MustGetToken('{');
|
||||
cmd.subBlock.fullScreenOffsets = block.fullScreenOffsets;
|
||||
this->ParseSBarInfoBlock(sc, cmd.subBlock);
|
||||
break;
|
||||
case SBARINFO_USESSECONDARYAMMO:
|
||||
|
|
@ -1091,6 +1114,7 @@ void SBarInfo::ParseSBarInfoBlock(FScanner &sc, SBarInfoBlock &block)
|
|||
sc.ScriptError("Exspected 'not' got '%s' instead.", sc.String);
|
||||
}
|
||||
sc.MustGetToken('{');
|
||||
cmd.subBlock.fullScreenOffsets = block.fullScreenOffsets;
|
||||
this->ParseSBarInfoBlock(sc, cmd.subBlock);
|
||||
break;
|
||||
case SBARINFO_HASWEAPONPIECE:
|
||||
|
|
@ -1106,6 +1130,7 @@ void SBarInfo::ParseSBarInfoBlock(FScanner &sc, SBarInfoBlock &block)
|
|||
sc.ScriptError("Weapon piece number can not be less than 1.");
|
||||
cmd.value = sc.Number;
|
||||
sc.MustGetToken('{');
|
||||
cmd.subBlock.fullScreenOffsets = block.fullScreenOffsets;
|
||||
this->ParseSBarInfoBlock(sc, cmd.subBlock);
|
||||
break;
|
||||
}
|
||||
|
|
@ -1138,6 +1163,7 @@ void SBarInfo::ParseSBarInfoBlock(FScanner &sc, SBarInfoBlock &block)
|
|||
break;
|
||||
}
|
||||
sc.MustGetToken('{');
|
||||
cmd.subBlock.fullScreenOffsets = block.fullScreenOffsets;
|
||||
this->ParseSBarInfoBlock(sc, cmd.subBlock);
|
||||
break;
|
||||
case SBARINFO_ININVENTORY:
|
||||
|
|
@ -1169,6 +1195,7 @@ void SBarInfo::ParseSBarInfoBlock(FScanner &sc, SBarInfoBlock &block)
|
|||
break;
|
||||
}
|
||||
sc.MustGetToken('{');
|
||||
cmd.subBlock.fullScreenOffsets = block.fullScreenOffsets;
|
||||
this->ParseSBarInfoBlock(sc, cmd.subBlock);
|
||||
break;
|
||||
}
|
||||
|
|
@ -1202,7 +1229,7 @@ void SBarInfo::ParseMugShotBlock(FScanner &sc, FMugShotState &state)
|
|||
}
|
||||
}
|
||||
|
||||
void SBarInfo::getCoordinates(FScanner &sc, SBarInfoCommand &cmd)
|
||||
void SBarInfo::getCoordinates(FScanner &sc, SBarInfoCommand &cmd, bool fullScreenOffsets)
|
||||
{
|
||||
bool negative = false;
|
||||
negative = sc.CheckToken('-');
|
||||
|
|
@ -1211,7 +1238,10 @@ void SBarInfo::getCoordinates(FScanner &sc, SBarInfoCommand &cmd)
|
|||
sc.MustGetToken(',');
|
||||
negative = sc.CheckToken('-');
|
||||
sc.MustGetToken(TK_IntConst);
|
||||
cmd.y = (negative ? -sc.Number : sc.Number) - (200 - this->height);
|
||||
if(!fullScreenOffsets)
|
||||
cmd.y = (negative ? -sc.Number : sc.Number) - (200 - this->height);
|
||||
else
|
||||
cmd.y = negative ? -sc.Number : sc.Number;
|
||||
}
|
||||
|
||||
int SBarInfo::getSignedInteger(FScanner &sc)
|
||||
|
|
@ -1338,6 +1368,7 @@ SBarInfoCommand::~SBarInfoCommand()
|
|||
SBarInfoBlock::SBarInfoBlock()
|
||||
{
|
||||
forceScaled = false;
|
||||
fullScreenOffsets = false;
|
||||
alpha = FRACUNIT;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue