(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:
Christoph Oelckers 2008-08-06 07:38:21 +00:00
commit 3908c71510
6 changed files with 236 additions and 114 deletions

View file

@ -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;
}