nuclide/Source/gs-entbase/client/fade.cpp

94 lines
2 KiB
C++
Raw Normal View History

/***
*
2019-01-16 16:43:50 +00:00
* Copyright (c) 2016-2019 Marco 'eukara' Hladik. All rights reserved.
*
* See the file LICENSE attached with the sources for usage details.
*
****/
float g_flFadeDuration;
float g_flFadeHold;
float g_flFadeMaxAlpha;
float g_flFadeStyle;
float g_flFadeAlpha;
float g_flFadeTime;
vector g_vecFadeColor;
int g_iFadeActive;
/*enum
{
DRAWFLAG_NORMAL,
DRAWFLAG_ADDITIVE,
DRAWFLAG_MODULATE, // FTE doesn't support this
DRAWFLAG_2XMODULATE // FTE doesn't support this
};*/
enumflags
{
EVF_FADEDROM,
EVF_MODULATE,
EVF_ONLYUSER
};
void Fade_Init(void)
{
shaderforname("fade_modulate","{\n{\nmap $whiteimage\nrgbGen vertex\nblendFunc GL_DST_COLOR GL_ONE_MINUS_SRC_ALPHA\nalphaGen vertex\n}\n}\n");
}
void Fade_Update (int x, int y, int w, int h)
{
if (g_iFadeActive == FALSE) {
return;
}
if (g_flFadeStyle & EVF_FADEDROM) {
if (g_flFadeTime > g_flFadeHold) {
g_flFadeAlpha -= (frametime * (1.0f / g_flFadeDuration)) * g_flFadeMaxAlpha;
}
} else {
if (g_flFadeTime < g_flFadeDuration) {
g_flFadeAlpha += (frametime * (1.0f / g_flFadeDuration)) * g_flFadeMaxAlpha;
} else {
g_flFadeAlpha -= (frametime * (1.0f / g_flFadeHold)) * g_flFadeMaxAlpha;
}
}
if (g_flFadeAlpha > 1.0f) {
g_flFadeAlpha = 1.0f;
} else if (g_flFadeAlpha < 0.0f) {
g_flFadeAlpha = 0.0f;
}
if (g_flFadeAlpha <= 0) {
g_iFadeActive = FALSE;
return;
}
if (g_flFadeStyle & EVF_MODULATE) {
drawpic([x, y], "fade_modulate", [w, h], g_vecFadeColor, g_flFadeAlpha, 0);
} else {
drawfill([x, y], [w, h], g_vecFadeColor, g_flFadeAlpha, 0);
}
g_flFadeTime += frametime;
}
void Fade_Parse (void)
{
g_vecFadeColor[0] = readbyte() / 255;
g_vecFadeColor[1] = readbyte() / 255;
g_vecFadeColor[2] = readbyte() / 255;
g_flFadeMaxAlpha = readbyte() / 255;
g_flFadeDuration = readfloat();
g_flFadeHold = readfloat();
g_flFadeStyle = readbyte();
g_flFadeTime = 0.0f;
if (g_flFadeStyle & EVF_FADEDROM) {
g_flFadeAlpha = 1.0f;
} else {
g_flFadeAlpha = 0.0f;
}
g_iFadeActive = TRUE;
}