diff options
author | Eugene Sandulenko | 2013-05-15 09:19:34 -0700 |
---|---|---|
committer | Eugene Sandulenko | 2013-05-15 09:19:34 -0700 |
commit | 0638308ef13727b4b359d98d54bc09156752aaaa (patch) | |
tree | e6f6b131566c593f6731ffa058e396931afc2525 /engines/neverhood/module.cpp | |
parent | bf9db9e20d75cc18cb711f148814a5d3aae79483 (diff) | |
parent | 32c21754e20afd589556ea862876c6e304b3326b (diff) | |
download | scummvm-rg350-0638308ef13727b4b359d98d54bc09156752aaaa.tar.gz scummvm-rg350-0638308ef13727b4b359d98d54bc09156752aaaa.tar.bz2 scummvm-rg350-0638308ef13727b4b359d98d54bc09156752aaaa.zip |
Merge pull request #330 from johndoe123/neverhood
NEVERHOOD: Neverhood engine
Diffstat (limited to 'engines/neverhood/module.cpp')
-rw-r--r-- | engines/neverhood/module.cpp | 123 |
1 files changed, 123 insertions, 0 deletions
diff --git a/engines/neverhood/module.cpp b/engines/neverhood/module.cpp new file mode 100644 index 0000000000..e384b5a4d2 --- /dev/null +++ b/engines/neverhood/module.cpp @@ -0,0 +1,123 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#include "neverhood/module.h" +#include "neverhood/navigationscene.h" +#include "neverhood/smackerscene.h" +#include "neverhood/modules/module1000.h" +#include "neverhood/modules/module1500.h" + +namespace Neverhood { + +Module::Module(NeverhoodEngine *vm, Module *parentModule) + : Entity(vm, 0), _parentModule(parentModule), _childObject(NULL), + _done(false), _sceneType(kSceneTypeNormal) { + + SetMessageHandler(&Module::handleMessage); + +} + +Module::~Module() { + delete _childObject; +} + +void Module::draw() { + if (_childObject) + _childObject->draw(); +} + +uint32 Module::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) { + switch (messageNum) { + case 0x0008: + sendMessage(_parentModule, 8, 0); + return 0; + case 0x1009: + _moduleResult = param.asInteger(); + _done = true; + return 0; + case 0x100A: + case 0x1023: + case 0x1024: + // Unused resource preloading messages + return 0; + default: + if (_childObject && sender == _parentModule) + return sender->sendMessage(_childObject, messageNum, param); + } + return 0; +} + +NavigationScene *Module::navigationScene() { + return (NavigationScene*)_childObject; +} + +void Module::createNavigationScene(uint32 navigationListId, int navigationIndex, const byte *itemsTypes) { + _sceneType = kSceneTypeNavigation; + _childObject = new NavigationScene(_vm, this, navigationListId, navigationIndex, itemsTypes); +} + +void Module::createSmackerScene(uint32 fileHash, bool doubleSurface, bool canSkip, bool canAbort) { + _sceneType = kSceneTypeSmacker; + SmackerScene *smackerScene = new SmackerScene(_vm, this, doubleSurface, canSkip, canAbort); + smackerScene->setFileHash(fileHash); + smackerScene->nextVideo(); + _childObject = smackerScene; +} + +void Module::createSmackerScene(const uint32 *fileHashList, bool doubleSurface, bool canSkip, bool canAbort) { + _sceneType = kSceneTypeSmacker; + SmackerScene *smackerScene = new SmackerScene(_vm, this, doubleSurface, canSkip, canAbort); + smackerScene->setFileHashList(fileHashList); + smackerScene->nextVideo(); + _childObject = smackerScene; +} + +void Module::createStaticScene(uint32 backgroundFileHash, uint32 cursorFileHash) { + _childObject = new StaticScene(_vm, this, backgroundFileHash, cursorFileHash); +} + +void Module::createDemoScene() { + _childObject = new Scene1501(_vm, this, 0x0009B624, 0, 288, 0); +} + +bool Module::updateChild() { + if (_childObject) { + _childObject->handleUpdate(); + if (_done) { + _done = false; + // Save the last area type if it's a NavigationScene for further processing + if (_sceneType == kSceneTypeNavigation) + _navigationAreaType = navigationScene()->getNavigationAreaType(); + delete _childObject; + _childObject = NULL; + _sceneType = kSceneTypeNormal; + return false; + } + } + return true; +} + +void Module::leaveModule(uint32 result) { + sendMessage(_parentModule, 0x1009, result); +} + +} // End of namespace Neverhood |