- Fixed: DHUDMessageTypeOnFadeOut::Tick() did not skip over color escapes.

SVN r3566 (trunk)
This commit is contained in:
Randy Heit 2012-04-15 03:13:07 +00:00
parent 5bf3b7113e
commit aa227b1df4

View file

@ -658,21 +658,45 @@ bool DHUDMessageTypeOnFadeOut::Tick ()
{
if (State == 3)
{
LineVisible = (int)(Tics / TypeOnTime);
while (LineVisible > LineLen && State == 3)
int step = Tics == 0 ? 0 : int(Tics / TypeOnTime) - int((Tics - 1) / TypeOnTime);
int linevis = LineVisible;
int linedrawcount = linevis;
FString text = Lines[CurrLine].Text;
// Advance LineVisible by 'step' *visible* characters
while (step > 0 && State == 3)
{
LineVisible -= LineLen;
Tics = (int)(LineVisible * TypeOnTime);
CurrLine++;
if (CurrLine >= NumLines)
if (linevis > LineLen)
{
State = 1;
linevis = 0;
linedrawcount = 0;
CurrLine++;
if (CurrLine >= NumLines)
{
State = 1;
}
else
{
text = Lines[CurrLine].Text;
LineLen = (int)text.Len();
}
}
else
if (State == 3 && --step >= 0)
{
LineLen = (int)Lines[CurrLine].Text.Len();
linedrawcount++;
if (text[linevis++] == TEXTCOLOR_ESCAPE)
{
if (text[linevis] == '[')
{ // named color
while (text[linevis] != ']' && text[linevis] != '\0')
{
linevis++;
}
}
linevis += 2;
}
}
}
LineVisible = linevis;
}
return false;
}