void GfxPalette::kernelPalVaryChangeTicks(uint16 ticks) { _palVaryTicks = ticks; if (_palVaryStep - _palVaryStepStop) { palVaryRemoveTimer(); palVaryInstallTimer(); } }
GfxPalette::~GfxPalette() { if (_palVaryResourceId != -1) palVaryRemoveTimer(); delete[] _macClut; #ifdef ENABLE_SCI32 unloadClut(); #endif }
// Processes pal vary updates void GfxPalette::palVaryProcess(int signal, bool setPalette) { int16 stepChange = signal * _palVaryDirection; _palVaryStep += stepChange; if (stepChange > 0) { if (_palVaryStep > _palVaryStepStop) _palVaryStep = _palVaryStepStop; } else { if (_palVaryStep < _palVaryStepStop) { if (signal) _palVaryStep = _palVaryStepStop; } } // We don't need updates anymore, if we reached end-position if (_palVaryStep == _palVaryStepStop) palVaryRemoveTimer(); if (_palVaryStep == 0) _palVaryResourceId = -1; // Calculate inbetween palette Sci::Color inbetween; int16 color; for (int colorNr = 1; colorNr < 255; colorNr++) { inbetween.used = _sysPalette.colors[colorNr].used; color = _palVaryTargetPalette.colors[colorNr].r - _palVaryOriginPalette.colors[colorNr].r; inbetween.r = ((color * _palVaryStep) / 64) + _palVaryOriginPalette.colors[colorNr].r; color = _palVaryTargetPalette.colors[colorNr].g - _palVaryOriginPalette.colors[colorNr].g; inbetween.g = ((color * _palVaryStep) / 64) + _palVaryOriginPalette.colors[colorNr].g; color = _palVaryTargetPalette.colors[colorNr].b - _palVaryOriginPalette.colors[colorNr].b; inbetween.b = ((color * _palVaryStep) / 64) + _palVaryOriginPalette.colors[colorNr].b; if (memcmp(&inbetween, &_sysPalette.colors[colorNr], sizeof(Sci::Color))) { _sysPalette.colors[colorNr] = inbetween; _sysPaletteChanged = true; } } if ((_sysPaletteChanged) && (setPalette) && (_screen->_picNotValid == 0)) { setOnScreen(); _sysPaletteChanged = false; } }
GfxPalette::~GfxPalette() { if (_palVaryResourceId != -1) palVaryRemoveTimer(); delete[] _macClut; }
void GfxPalette::kernelPalVaryDeinit() { palVaryRemoveTimer(); _palVaryResourceId = -1; // invalidate the target palette }