diff options
author | johndoe123 | 2016-03-26 21:36:27 +0100 |
---|---|---|
committer | Eugene Sandulenko | 2018-07-20 06:43:33 +0000 |
commit | 2bd13865285058d72e13150ab64462dbbe23163c (patch) | |
tree | d22f04f4985d51ec8554004b9f9d789db80ebadb /engines/illusions/duckman | |
parent | 9447d42fd71ce092d70fad416caf2babacf00dcd (diff) | |
download | scummvm-rg350-2bd13865285058d72e13150ab64462dbbe23163c.tar.gz scummvm-rg350-2bd13865285058d72e13150ab64462dbbe23163c.tar.bz2 scummvm-rg350-2bd13865285058d72e13150ab64462dbbe23163c.zip |
ILLUSIONS: Move palette code from Screen to new ScreenPalette class
Diffstat (limited to 'engines/illusions/duckman')
-rw-r--r-- | engines/illusions/duckman/illusions_duckman.cpp | 39 | ||||
-rw-r--r-- | engines/illusions/duckman/illusions_duckman.h | 5 |
2 files changed, 41 insertions, 3 deletions
diff --git a/engines/illusions/duckman/illusions_duckman.cpp b/engines/illusions/duckman/illusions_duckman.cpp index 8f28a99c56..a9f6b6e2af 100644 --- a/engines/illusions/duckman/illusions_duckman.cpp +++ b/engines/illusions/duckman/illusions_duckman.cpp @@ -104,6 +104,7 @@ Common::Error IllusionsEngine_Duckman::run() { _resSys->addResourceLoader(0x00190000, new GenericResourceLoader(this)); _screen = new Screen(this, 320, 200, 8); + _screenPalette = new ScreenPalette(this); _screenText = new ScreenText(this); _input = new Input(); _actorInstances = new ActorInstanceList(this); @@ -221,6 +222,7 @@ Common::Error IllusionsEngine_Duckman::run() { delete _actorInstances; delete _input; delete _screenText; + delete _screenPalette; delete _screen; delete _resSys; delete _resReader; @@ -283,7 +285,7 @@ void IllusionsEngine_Duckman::initUpdateFunctions() { int IllusionsEngine_Duckman::updateScript(uint flags) { // TODO Some more stuff - if (_screen->isDisplayOn() && !_screen->isFaderActive() && _pauseCtr == 0) { + if (_screen->isDisplayOn() && !_screenPalette->isFaderActive() && _pauseCtr == 0) { if (_input->pollEvent(kEventAbort)) { startScriptThread(0x00020342, 0); } else if (_input->pollEvent(kEventF1)) { @@ -362,6 +364,39 @@ void IllusionsEngine_Duckman::startFader(int duration, int minValue, int maxValu _fader->_notifyThreadId = threadId; } +void IllusionsEngine_Duckman::updateFader() { + if (_fader && !_fader->_paused && _fader->_active) { + int32 currTime = getCurrentTime(); + int32 currDuration = currTime - _fader->_startTime; + if (currDuration) { + int newValue; + if (currDuration >= _fader->_duration) { + newValue = _fader->_maxValue; + } else { + newValue = (currDuration * (_fader->_maxValue - _fader->_minValue) / _fader->_duration) + _fader->_minValue; + } + if (_fader->_currValue != newValue) { + _fader->_currValue = newValue; + _screenPalette->setFader(newValue, _fader->_firstIndex, _fader->_lastIndex); + } + if (_fader->_currValue == _fader->_maxValue) { + _fader->_active = false; + notifyThreadId(_fader->_notifyThreadId); + } + } + } +} + +void IllusionsEngine_Duckman::pauseFader() { + _fader->_paused = true; + _fader->_startTime = getCurrentTime() - _fader->_startTime; +} + +void IllusionsEngine_Duckman::unpauseFader() { + _fader->_startTime = getCurrentTime() - _fader->_startTime; + _fader->_paused = false; +} + void IllusionsEngine_Duckman::setDefaultTextCoords() { WidthHeight dimensions; dimensions._width = 300; @@ -1145,7 +1180,7 @@ bool IllusionsEngine_Duckman::loadSavegameFromScript(int16 slotNum, uint32 calli bool IllusionsEngine_Duckman::saveSavegameFromScript(int16 slotNum, uint32 callingThreadId) { // TODO - const char *fileName = getSavegameFilename(slotNum); + // const char *fileName = getSavegameFilename(slotNum); bool success = false;//savegame(fileName, _savegameDescription.c_str()); return success; } diff --git a/engines/illusions/duckman/illusions_duckman.h b/engines/illusions/duckman/illusions_duckman.h index f19a659ac3..daa1b06c0c 100644 --- a/engines/illusions/duckman/illusions_duckman.h +++ b/engines/illusions/duckman/illusions_duckman.h @@ -81,7 +81,7 @@ public: protected: virtual Common::Error run(); virtual bool hasFeature(EngineFeature f) const; -public: +public: // TODO ActiveScenes _activeScenes; uint32 _prevSceneId; @@ -112,6 +112,9 @@ public: int updateScreenShaker(uint flags); void startFader(int duration, int minValue, int maxValue, int firstIndex, int lastIndex, uint32 threadId); + void updateFader(); + void pauseFader(); + void unpauseFader(); void setDefaultTextCoords(); |