aboutsummaryrefslogtreecommitdiff
path: root/engines/illusions/duckman
diff options
context:
space:
mode:
authorjohndoe1232016-03-26 21:36:27 +0100
committerEugene Sandulenko2018-07-20 06:43:33 +0000
commit2bd13865285058d72e13150ab64462dbbe23163c (patch)
treed22f04f4985d51ec8554004b9f9d789db80ebadb /engines/illusions/duckman
parent9447d42fd71ce092d70fad416caf2babacf00dcd (diff)
downloadscummvm-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.cpp39
-rw-r--r--engines/illusions/duckman/illusions_duckman.h5
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();