1
0
Fork 0
mirror of https://github.com/TerryCavanagh/VVVVVV.git synced 2024-12-22 17:49:43 +01:00

Fade text box overlays with text box

Currently, it's a bit jarring that text box overlays (which are text box
images, e.g. Level Complete and Game Complete, and sprites, e.g. the
crewmates) will suddenly appear when their text box has fully faded in
and suddenly disappear once it starts fading out.

This makes it so that text box overlays will be faded in and out
smoothly along with the rest of the text box fading in and out.

Transparent text boxes are not affected, as they do not fade in and out
at all. Thus, text box overlays in transparent text boxes will still
suddenly appear and disappear as usual.
This commit is contained in:
Misa 2024-01-09 18:38:40 -08:00
parent ba92174c71
commit 2ed1aac67d

View file

@ -906,6 +906,7 @@ void Graphics::drawgui(void)
} }
const bool transparent = (textboxes[i].r | textboxes[i].g | textboxes[i].b) == 0; const bool transparent = (textboxes[i].r | textboxes[i].g | textboxes[i].b) == 0;
float opacity;
if (transparent) if (transparent)
{ {
@ -932,6 +933,8 @@ void Graphics::drawgui(void)
196, 196, 255 - help.glow 196, 196, 255 - help.glow
); );
} }
opacity = 1.0f;
} }
else else
{ {
@ -952,14 +955,8 @@ void Graphics::drawgui(void)
textboxes[i].r, textboxes[i].g, textboxes[i].b textboxes[i].r, textboxes[i].g, textboxes[i].b
); );
} }
}
const bool opaque = textboxes[i].tl >= 1.0; opacity = tl_lerp;
const bool draw_overlays = opaque || transparent;
if (!draw_overlays)
{
continue;
} }
if (textboxes[i].image == TEXTIMAGE_LEVELCOMPLETE) if (textboxes[i].image == TEXTIMAGE_LEVELCOMPLETE)
@ -985,17 +982,22 @@ void Graphics::drawgui(void)
y = 240 - y - 8 * sc; y = 240 - y - 8 * sc;
} }
SDL_Color color = TEXT_COLOUR("cyan"); SDL_Color color = TEXT_COLOUR("cyan");
font::print((sc == 2 ? PR_2X : PR_1X) | PR_CEN, -1, y, translation, color.r, color.g, color.b); const int alpha = opacity * 255;
font::print(
(sc == 2 ? PR_2X : PR_1X) | PR_CEN | PR_BRIGHTNESS(alpha),
-1, y, translation, color.r, color.g, color.b
);
} }
else else
{ {
const SDL_Color color = {255, 255, 255, (Uint8) (opacity * 255)};
if (flipmode) if (flipmode)
{ {
drawimage(IMAGE_FLIPLEVELCOMPLETE, 0, 180, true); drawimagecol(IMAGE_FLIPLEVELCOMPLETE, 0, 180, color, true);
} }
else else
{ {
drawimage(IMAGE_LEVELCOMPLETE, 0, 12, true); drawimagecol(IMAGE_LEVELCOMPLETE, 0, 12, color, true);
} }
} }
} }
@ -1021,17 +1023,22 @@ void Graphics::drawgui(void)
{ {
y = 240 - y - 8 * sc; y = 240 - y - 8 * sc;
} }
font::print((sc == 2 ? PR_2X : PR_1X) | PR_CEN, -1, y, translation, 196, 196, 243); const int alpha = opacity * 255;
font::print(
(sc == 2 ? PR_2X : PR_1X) | PR_CEN | PR_BRIGHTNESS(alpha),
-1, y, translation, 196, 196, 243
);
} }
else else
{ {
const SDL_Color color = {255, 255, 255, (Uint8) (opacity * 255)};
if (flipmode) if (flipmode)
{ {
drawimage(IMAGE_FLIPGAMECOMPLETE, 0, 180, true); drawimagecol(IMAGE_FLIPGAMECOMPLETE, 0, 180, color, true);
} }
else else
{ {
drawimage(IMAGE_GAMECOMPLETE, 0, 12, true); drawimagecol(IMAGE_GAMECOMPLETE, 0, 12, color, true);
} }
} }
} }
@ -1040,6 +1047,8 @@ void Graphics::drawgui(void)
{ {
TextboxSprite* sprite = &textboxes[i].sprites[index]; TextboxSprite* sprite = &textboxes[i].sprites[index];
int y = sprite->y + yp; int y = sprite->y + yp;
SDL_Color color = getcol(sprite->col);
color.a = opacity * 255;
if (flipmode) if (flipmode)
{ {
@ -1053,7 +1062,7 @@ void Graphics::drawgui(void)
y, y,
sprites_rect.w, sprites_rect.w,
sprites_rect.h, sprites_rect.h,
getcol(sprite->col), color,
1, 1,
(flipmode ? -1 : 1) (flipmode ? -1 : 1)
); );