HOPKINS: Remove setParent() from SaveLoadManager and ScriptManager

This commit is contained in:
Strangerke 2013-03-20 08:06:10 +01:00
parent c5c7ced5ee
commit 848841772f
12 changed files with 45 additions and 48 deletions

View File

@ -242,9 +242,9 @@ void AnimationManager::playAnim2(const Common::String &filename, uint32 rate1, u
memcpy(_vm->_graphicsManager->_oldPalette, _vm->_graphicsManager->_palette, 769);
if (_vm->_graphicsManager->_lineNbr == SCREEN_WIDTH)
_vm->_saveLoadManager.saveFile("TEMP.SCR", _vm->_graphicsManager->_vesaScreen, 307200);
_vm->_saveLoadManager->saveFile("TEMP.SCR", _vm->_graphicsManager->_vesaScreen, 307200);
else if (_vm->_graphicsManager->_lineNbr == (SCREEN_WIDTH * 2))
_vm->_saveLoadManager.saveFile("TEMP.SCR", _vm->_graphicsManager->_vesaScreen, 614400);
_vm->_saveLoadManager->saveFile("TEMP.SCR", _vm->_graphicsManager->_vesaScreen, 614400);
if (!_vm->_graphicsManager->_lineNbr)
_vm->_graphicsManager->_scrollOffset = 0;
@ -388,7 +388,7 @@ void AnimationManager::playAnim2(const Common::String &filename, uint32 rate1, u
}
_vm->_graphicsManager->FADE_LINUX = 0;
_vm->_saveLoadManager.load("TEMP.SCR", _vm->_graphicsManager->_vesaScreen);
_vm->_saveLoadManager->load("TEMP.SCR", _vm->_graphicsManager->_vesaScreen);
g_system->getSavefileManager()->removeSavefile("TEMP.SCR");
memcpy(_vm->_graphicsManager->_palette, _vm->_graphicsManager->_oldPalette, 769);
@ -621,9 +621,9 @@ void AnimationManager::playSequence(const Common::String &file, uint32 rate1, ui
_vm->_eventsManager->refreshScreenAndEvents();
if (_vm->_graphicsManager->_lineNbr == SCREEN_WIDTH)
_vm->_saveLoadManager.saveFile("TEMP.SCR", _vm->_graphicsManager->_vesaScreen, 307200);
_vm->_saveLoadManager->saveFile("TEMP.SCR", _vm->_graphicsManager->_vesaScreen, 307200);
else if (_vm->_graphicsManager->_lineNbr == (SCREEN_WIDTH * 2))
_vm->_saveLoadManager.saveFile("TEMP.SCR", _vm->_graphicsManager->_vesaScreen, 614400);
_vm->_saveLoadManager->saveFile("TEMP.SCR", _vm->_graphicsManager->_vesaScreen, 614400);
if (!_vm->_graphicsManager->_lineNbr)
_vm->_graphicsManager->_scrollOffset = 0;
}
@ -771,7 +771,7 @@ void AnimationManager::playSequence(const Common::String &file, uint32 rate1, ui
f.close();
if (!NO_COUL) {
_vm->_saveLoadManager.load("TEMP.SCR", _vm->_graphicsManager->_vesaScreen);
_vm->_saveLoadManager->load("TEMP.SCR", _vm->_graphicsManager->_vesaScreen);
g_system->getSavefileManager()->removeSavefile("TEMP.SCR");
_vm->_eventsManager->_mouseFl = true;

View File

@ -582,7 +582,7 @@ void ComputerManager::displayGamesSubMenu() {
*/
void ComputerManager::loadHiscore() {
byte *ptr = _vm->_globals->allocMemory(100);
_vm->_saveLoadManager.load("HISCORE.DAT", ptr);
_vm->_saveLoadManager->load("HISCORE.DAT", ptr);
for (int scoreIndex = 0; scoreIndex < 6; ++scoreIndex) {
for (int i = 0; i < 5; ++i) {
@ -992,7 +992,7 @@ void ComputerManager::saveScore() {
ptr[curBufPtr + 15] = 0;
}
_vm->_saveLoadManager.saveFile("HISCORE.DAT", ptr, 100);
_vm->_saveLoadManager->saveFile("HISCORE.DAT", ptr, 100);
_vm->_globals->freeMemory(ptr);
}

View File

@ -411,12 +411,12 @@ void DialogsManager::showInventory() {
if (_vm->_eventsManager->_mouseCursorId == 8)
break;
_vm->_scriptManager._tempObjectFl = true;
_vm->_scriptManager->_tempObjectFl = true;
_vm->_globals->_saveData->_data[svLastObjectIndex] = _vm->_objectsManager->_curObjectIndex;
_vm->_globals->_saveData->_data[svLastInventoryItem] = _vm->_globals->_inventory[newInventoryItem];
_vm->_globals->_saveData->_data[svLastInvMouseCursor] = _vm->_eventsManager->_mouseCursorId;
_vm->_objectsManager->OPTI_OBJET();
_vm->_scriptManager._tempObjectFl = false;
_vm->_scriptManager->_tempObjectFl = false;
if (_vm->_soundManager._voiceOffFl) {
do
@ -581,7 +581,7 @@ void DialogsManager::showLoadGame() {
_vm->_objectsManager->_saveLoadY = 0;
if (slotNumber != 7) {
_vm->_saveLoadManager.loadGame(slotNumber);
_vm->_saveLoadManager->loadGame(slotNumber);
}
_vm->_objectsManager->changeObject(14);
@ -614,7 +614,7 @@ void DialogsManager::showSaveGame() {
Common::String saveName = Common::String::format("Save #%d", slotNumber);
// Save the game
_vm->_saveLoadManager.saveGame(slotNumber, saveName);
_vm->_saveLoadManager->saveGame(slotNumber, saveName);
}
}
@ -658,9 +658,9 @@ void DialogsManager::showSaveLoad(SaveLoadMode mode) {
for (int slotNumber = 1; slotNumber <= 6; ++slotNumber) {
hopkinsSavegameHeader header;
if (_vm->_saveLoadManager.readSavegameHeader(slotNumber, header)) {
if (_vm->_saveLoadManager->readSavegameHeader(slotNumber, header)) {
Graphics::Surface thumb8;
_vm->_saveLoadManager.convertThumb16To8(header._thumbnail, &thumb8);
_vm->_saveLoadManager->convertThumb16To8(header._thumbnail, &thumb8);
byte *thumb = (byte *)thumb8.pixels;

View File

@ -1762,14 +1762,14 @@ void GraphicsManager::initScreen(const Common::String &file, int mode, bool init
int dataOffset = 1;
do {
int dataVal1 = _vm->_scriptManager.handleOpcode(ptr + 20 * dataOffset);
int dataVal1 = _vm->_scriptManager->handleOpcode(ptr + 20 * dataOffset);
if (_vm->shouldQuit())
return;
if (dataVal1 == 2)
dataOffset = _vm->_scriptManager.handleGoto((ptr + 20 * dataOffset));
dataOffset = _vm->_scriptManager->handleGoto((ptr + 20 * dataOffset));
if (dataVal1 == 3)
dataOffset = _vm->_scriptManager.handleIf(ptr, dataOffset);
dataOffset = _vm->_scriptManager->handleIf(ptr, dataOffset);
if (dataOffset == -1)
error("Error, defective IFF");
if (dataVal1 == 1 || dataVal1 == 4)

View File

@ -52,14 +52,16 @@ HopkinsEngine::HopkinsEngine(OSystem *syst, const HopkinsGameDescription *gameDe
_linesManager = new LinesManager(this);
_menuManager = new MenuManager(this);
_objectsManager = new ObjectsManager(this);
_saveLoadManager = new SaveLoadManager(this);
_scriptManager = new ScriptManager(this);
_saveLoadManager.setParent(this);
_scriptManager.setParent(this);
_soundManager.setParent(this);
_talkManager.setParent(this);
}
HopkinsEngine::~HopkinsEngine() {
delete _scriptManager;
delete _saveLoadManager;
delete _objectsManager;
delete _menuManager;
delete _linesManager;
@ -96,18 +98,18 @@ bool HopkinsEngine::canSaveGameStateCurrently() {
* Load the savegame at the specified slot index
*/
Common::Error HopkinsEngine::loadGameState(int slot) {
return _saveLoadManager.loadGame(slot);
return _saveLoadManager->loadGame(slot);
}
/**
* Save the game to the given slot index, and with the given name
*/
Common::Error HopkinsEngine::saveGameState(int slot, const Common::String &desc) {
return _saveLoadManager.saveGame(slot, desc);
return _saveLoadManager->saveGame(slot, desc);
}
Common::Error HopkinsEngine::run() {
_saveLoadManager.initSaves();
_saveLoadManager->initSaves();
_globals->setConfig();
_fileManager->initCensorship();

View File

@ -154,9 +154,9 @@ public:
LinesManager *_linesManager;
MenuManager *_menuManager;
ObjectsManager *_objectsManager;
SaveLoadManager *_saveLoadManager;
ScriptManager *_scriptManager;
SaveLoadManager _saveLoadManager;
ScriptManager _scriptManager;
SoundManager _soundManager;
TalkManager _talkManager;

View File

@ -2540,14 +2540,14 @@ void ObjectsManager::OPTI_OBJET() {
error("File %s is not an INI file", file.c_str());
for (;;) {
int opcodeType = _vm->_scriptManager.handleOpcode(data + 20 * lastOpcodeResult);
int opcodeType = _vm->_scriptManager->handleOpcode(data + 20 * lastOpcodeResult);
if (_vm->shouldQuit())
return;
if (opcodeType == 2)
lastOpcodeResult = _vm->_scriptManager.handleGoto(data + 20 * lastOpcodeResult);
lastOpcodeResult = _vm->_scriptManager->handleGoto(data + 20 * lastOpcodeResult);
else if (opcodeType == 3)
lastOpcodeResult = _vm->_scriptManager.handleIf(data, lastOpcodeResult);
lastOpcodeResult = _vm->_scriptManager->handleIf(data, lastOpcodeResult);
if (lastOpcodeResult == -1)
error("defective IFF function");
@ -2580,7 +2580,7 @@ void ObjectsManager::handleSpecialGames() {
oldPalette = _vm->_globals->allocMemory(1000);
memcpy(oldPalette, _vm->_graphicsManager->_palette, 769);
_vm->_saveLoadManager.saveFile("TEMP1.SCR", _vm->_graphicsManager->_vesaScreen, 307200);
_vm->_saveLoadManager->saveFile("TEMP1.SCR", _vm->_graphicsManager->_vesaScreen, 307200);
if (!_vm->_graphicsManager->_lineNbr)
_vm->_graphicsManager->_scrollOffset = 0;
@ -2594,7 +2594,7 @@ void ObjectsManager::handleSpecialGames() {
_vm->_soundManager._specialSoundNum = 0;
_vm->_graphicsManager->NB_SCREEN(false);
_vm->_saveLoadManager.load("TEMP1.SCR", _vm->_graphicsManager->_vesaScreen);
_vm->_saveLoadManager->load("TEMP1.SCR", _vm->_graphicsManager->_vesaScreen);
g_system->getSavefileManager()->removeSavefile("TEMP1.SCR");
PERSO_ON = false;

View File

@ -38,7 +38,7 @@ namespace Hopkins {
const char *SAVEGAME_STR = "HOPKINS";
#define SAVEGAME_STR_SIZE 13
void SaveLoadManager::setParent(HopkinsEngine *vm) {
SaveLoadManager::SaveLoadManager(HopkinsEngine *vm) {
_vm = vm;
}

View File

@ -54,8 +54,7 @@ private:
void syncSavegameData(Common::Serializer &s, int version);
void syncCharacterLocation(Common::Serializer &s, CharacterLocation &item);
public:
SaveLoadManager() {}
void setParent(HopkinsEngine *vm);
SaveLoadManager(HopkinsEngine *vm);
void initSaves();
bool save(const Common::String &file, const void *buf, size_t n);

View File

@ -35,12 +35,9 @@
namespace Hopkins {
ScriptManager::ScriptManager() {
_tempObjectFl = false;
}
void ScriptManager::setParent(HopkinsEngine *vm) {
ScriptManager::ScriptManager(HopkinsEngine *vm) {
_vm = vm;
_tempObjectFl = false;
}
int ScriptManager::handleOpcode(byte *dataP) {

View File

@ -38,8 +38,7 @@ private:
public:
bool _tempObjectFl;
ScriptManager();
void setParent(HopkinsEngine *vm);
ScriptManager(HopkinsEngine *vm);
int handleOpcode(byte *dataP);
int handleIf(const byte *dataP, int offset);

View File

@ -87,9 +87,9 @@ void TalkManager::startAnimatedCharacterDialogue(const Common::String &filename)
}
if (_vm->_graphicsManager->_lineNbr == SCREEN_WIDTH)
_vm->_saveLoadManager.saveFile("TEMP.SCR", _vm->_graphicsManager->_vesaScreen, 307200);
_vm->_saveLoadManager->saveFile("TEMP.SCR", _vm->_graphicsManager->_vesaScreen, 307200);
else if (_vm->_graphicsManager->_lineNbr == (SCREEN_WIDTH * 2))
_vm->_saveLoadManager.saveFile("TEMP.SCR", _vm->_graphicsManager->_vesaScreen, 614400);
_vm->_saveLoadManager->saveFile("TEMP.SCR", _vm->_graphicsManager->_vesaScreen, 614400);
if (!_vm->_graphicsManager->_lineNbr)
_vm->_graphicsManager->_scrollOffset = 0;
@ -129,7 +129,7 @@ void TalkManager::startAnimatedCharacterDialogue(const Common::String &filename)
_characterSprite = _vm->_globals->freeMemory(_characterSprite);
_vm->_graphicsManager->NB_SCREEN(false);
_vm->_saveLoadManager.load("TEMP.SCR", _vm->_graphicsManager->_vesaScreen);
_vm->_saveLoadManager->load("TEMP.SCR", _vm->_graphicsManager->_vesaScreen);
g_system->getSavefileManager()->removeSavefile("TEMP.SCR");
_vm->_objectsManager->PERSO_ON = false;
@ -825,16 +825,16 @@ void TalkManager::REPONSE(int zone, int verb) {
innerLoopCond = false;
int lastOpcodeResult = 1;
do {
int opcodeType = _vm->_scriptManager.handleOpcode(ptr + 20 * lastOpcodeResult);
int opcodeType = _vm->_scriptManager->handleOpcode(ptr + 20 * lastOpcodeResult);
if (_vm->shouldQuit())
return;
if (opcodeType == 2)
// GOTO
lastOpcodeResult = _vm->_scriptManager.handleGoto(ptr + 20 * lastOpcodeResult);
lastOpcodeResult = _vm->_scriptManager->handleGoto(ptr + 20 * lastOpcodeResult);
else if (opcodeType == 3)
// IF
lastOpcodeResult = _vm->_scriptManager.handleIf(ptr, lastOpcodeResult);
lastOpcodeResult = _vm->_scriptManager->handleIf(ptr, lastOpcodeResult);
if (lastOpcodeResult == -1)
error("Invalid IFF function");
@ -1001,9 +1001,9 @@ void TalkManager::animateObject(const Common::String &filename) {
_characterSprite = _vm->_objectsManager->loadSprite("RES_SAN.RES");
if (_vm->_graphicsManager->_lineNbr == SCREEN_WIDTH)
_vm->_saveLoadManager.saveFile("TEMP.SCR", _vm->_graphicsManager->_vesaScreen, 307200);
_vm->_saveLoadManager->saveFile("TEMP.SCR", _vm->_graphicsManager->_vesaScreen, 307200);
else if (_vm->_graphicsManager->_lineNbr == (SCREEN_WIDTH * 2))
_vm->_saveLoadManager.saveFile("TEMP.SCR", _vm->_graphicsManager->_vesaScreen, 614400);
_vm->_saveLoadManager->saveFile("TEMP.SCR", _vm->_graphicsManager->_vesaScreen, 614400);
if (!_vm->_graphicsManager->_lineNbr)
_vm->_graphicsManager->_scrollOffset = 0;
@ -1063,7 +1063,7 @@ void TalkManager::animateObject(const Common::String &filename) {
if (_vm->_globals->_exitId == 101)
_vm->_globals->_exitId = 0;
_vm->_saveLoadManager.load("TEMP.SCR", _vm->_graphicsManager->_vesaScreen);
_vm->_saveLoadManager->load("TEMP.SCR", _vm->_graphicsManager->_vesaScreen);
g_system->getSavefileManager()->removeSavefile("TEMP.SCR");
_vm->_objectsManager->PERSO_ON = false;