mirror of
https://github.com/jmarshall23/Hellfire.git
synced 2026-08-12 07:50:53 +02:00
143 lines
4.7 KiB
C++
143 lines
4.7 KiB
C++
//****************************************************************************
|
|
// fade.cpp
|
|
// created 10.28.96
|
|
//****************************************************************************
|
|
|
|
|
|
#include "pch.h"
|
|
|
|
|
|
//****************************************************************************
|
|
//****************************************************************************
|
|
#define FADE_TIMER_ID 16
|
|
#define FADE_TIMER_DELAY 50
|
|
|
|
|
|
//****************************************************************************
|
|
//****************************************************************************
|
|
static int sgFadeStep;
|
|
static BOOL sgFading;
|
|
static PALETTEENTRY sgFadePal[PALETTE_REGISTERS];
|
|
|
|
|
|
//****************************************************************************
|
|
//****************************************************************************
|
|
static void RestoreWindowsColors(void) {
|
|
HPALETTE hPal;
|
|
|
|
// Get Windows Default colors from the system
|
|
hPal = (HPALETTE)GetStockObject(DEFAULT_PALETTE);
|
|
|
|
GetPaletteEntries(hPal, 0, 10, &sgFadePal[0]);
|
|
GetPaletteEntries(hPal, 10, 10, &sgFadePal[PALETTE_REGISTERS-10]);
|
|
SDrawUpdatePalette(0, PALETTE_REGISTERS, &sgFadePal[0], TRUE);
|
|
}
|
|
|
|
|
|
//****************************************************************************
|
|
// an async fade function
|
|
//****************************************************************************
|
|
void UiVidFade(int max, int curr) {
|
|
PALETTEENTRY * PalEntry = UiPaletteEntry(0);
|
|
|
|
if (max == curr) {
|
|
memcpy(sgFadePal, PalEntry, (PALETTE_REGISTERS * sizeof(PALETTEENTRY)));
|
|
}
|
|
else if (curr == 0) {
|
|
memcpy(sgFadePal, PalEntry, (PALETTE_REGISTERS * sizeof(PALETTEENTRY)));
|
|
UiClearPalette(sgFadePal);
|
|
}
|
|
else {
|
|
for (int palreg = 0; palreg < PALETTE_REGISTERS; palreg++, PalEntry++) {
|
|
sgFadePal[palreg].peRed = (PalEntry->peRed * curr) / max;
|
|
sgFadePal[palreg].peGreen = (PalEntry->peGreen * curr) / max;
|
|
sgFadePal[palreg].peBlue = (PalEntry->peBlue * curr) / max;
|
|
}
|
|
}
|
|
SDrawUpdatePalette(0, PALETTE_REGISTERS, sgFadePal, TRUE);
|
|
}
|
|
|
|
|
|
//****************************************************************************
|
|
//****************************************************************************
|
|
void UiVidFadeOut(int steps) {
|
|
PALETTEENTRY * PalEntry = UiPaletteEntry(0);
|
|
|
|
memcpy(sgFadePal, PalEntry, (PALETTE_REGISTERS * sizeof(PALETTEENTRY)));
|
|
for (int index = 0; index < steps; index++) {
|
|
PalEntry = UiPaletteEntry(0);
|
|
for (int palreg = 0; palreg < PALETTE_REGISTERS; palreg++, PalEntry++) {
|
|
sgFadePal[palreg].peRed -= (PalEntry->peRed / steps);
|
|
sgFadePal[palreg].peGreen -= (PalEntry->peGreen / steps);
|
|
sgFadePal[palreg].peBlue -= (PalEntry->peBlue / steps);
|
|
}
|
|
SDrawUpdatePalette(0, PALETTE_REGISTERS, sgFadePal, TRUE);
|
|
}
|
|
|
|
UiClearPalette(sgFadePal);
|
|
SDrawUpdatePalette(0, PALETTE_REGISTERS, sgFadePal, TRUE);
|
|
UiClearCursor();
|
|
SDrawClearSurface(SDRAW_SURFACE_FRONT);
|
|
RestoreWindowsColors();
|
|
}
|
|
|
|
|
|
//****************************************************************************
|
|
//****************************************************************************
|
|
static void CALLBACK UiFadeTimerProc(HWND window,
|
|
UINT message,
|
|
UINT timerid,
|
|
DWORD systime) {
|
|
if (sgFadeStep <= DEFAULT_FADE_STEPS) {
|
|
UiVidFade(DEFAULT_FADE_STEPS, sgFadeStep);
|
|
sgFadeStep++;
|
|
}
|
|
else {
|
|
SDlgKillTimer(window, FADE_TIMER_ID);
|
|
}
|
|
}
|
|
|
|
|
|
//****************************************************************************
|
|
//****************************************************************************
|
|
BOOL UiIsFading() {
|
|
return sgFading && (sgFadeStep <= DEFAULT_FADE_STEPS);
|
|
}
|
|
|
|
|
|
//****************************************************************************
|
|
//****************************************************************************
|
|
void UiFadeAbort(HWND window) {
|
|
if (! UiIsFading()) return;
|
|
sgFading = FALSE;
|
|
}
|
|
|
|
|
|
//****************************************************************************
|
|
//****************************************************************************
|
|
void UiFadeInit(HWND window, BOOL turnoncursor) {
|
|
UiFlushIOMessages(GetParent(window));
|
|
if (turnoncursor)
|
|
UiSetCursor();
|
|
sgFading = FALSE;
|
|
sgFadeStep = 0;
|
|
}
|
|
|
|
|
|
//****************************************************************************
|
|
// use this for screens that fade out but don't fade in
|
|
//****************************************************************************
|
|
void UiAltFadeInit(HWND window) {
|
|
UiFlushIOMessages(GetParent(window));
|
|
}
|
|
|
|
|
|
//****************************************************************************
|
|
//****************************************************************************
|
|
void UiFadeStart(HWND window) {
|
|
if (! sgFading) {
|
|
BOOL result = SDlgSetTimer(window, FADE_TIMER_ID, FADE_TIMER_DELAY, UiFadeTimerProc);
|
|
sgFading = TRUE;
|
|
}
|
|
}
|