diff options
author | Ľubomír Remák | 2018-02-22 23:47:16 +0100 |
---|---|---|
committer | Eugene Sandulenko | 2018-08-25 23:12:01 +0200 |
commit | f7d5a825a053199ddbf4d7c564e84e9f9709d958 (patch) | |
tree | ceb20f74e8a40ae8553f5d06a24139aa21813714 | |
parent | 356a6809c31224f4ed2bfcc5e6bacd131f144026 (diff) | |
download | scummvm-rg350-f7d5a825a053199ddbf4d7c564e84e9f9709d958.tar.gz scummvm-rg350-f7d5a825a053199ddbf4d7c564e84e9f9709d958.tar.bz2 scummvm-rg350-f7d5a825a053199ddbf4d7c564e84e9f9709d958.zip |
MUTATIONOFJB: Start implementation of ATN scripts (IF command).
-rw-r--r-- | engines/mutationofjb/commands/command.cpp | 33 | ||||
-rw-r--r-- | engines/mutationofjb/commands/command.h | 58 | ||||
-rw-r--r-- | engines/mutationofjb/commands/conditionalcommand.cpp | 41 | ||||
-rw-r--r-- | engines/mutationofjb/commands/conditionalcommand.h | 41 | ||||
-rw-r--r-- | engines/mutationofjb/commands/ifcommand.cpp | 88 | ||||
-rw-r--r-- | engines/mutationofjb/commands/ifcommand.h | 52 | ||||
-rw-r--r-- | engines/mutationofjb/commands/seqcommand.cpp | 40 | ||||
-rw-r--r-- | engines/mutationofjb/commands/seqcommand.h | 44 | ||||
-rw-r--r-- | engines/mutationofjb/game.cpp | 25 | ||||
-rw-r--r-- | engines/mutationofjb/game.h | 19 | ||||
-rw-r--r-- | engines/mutationofjb/module.mk | 5 | ||||
-rw-r--r-- | engines/mutationofjb/mutationofjb.cpp | 14 | ||||
-rw-r--r-- | engines/mutationofjb/room.cpp | 3 | ||||
-rw-r--r-- | engines/mutationofjb/script.cpp | 75 | ||||
-rw-r--r-- | engines/mutationofjb/script.h | 64 |
15 files changed, 588 insertions, 14 deletions
diff --git a/engines/mutationofjb/commands/command.cpp b/engines/mutationofjb/commands/command.cpp new file mode 100644 index 0000000000..d0b3f826e3 --- /dev/null +++ b/engines/mutationofjb/commands/command.cpp @@ -0,0 +1,33 @@ +/* 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 "mutationofjb/commands/command.h" +#include "common/scummsys.h" + +namespace MutationOfJB { +Command::~Command() {} + +SeqCommand *Command::asSeqCommand() { + return nullptr; +} + +} diff --git a/engines/mutationofjb/commands/command.h b/engines/mutationofjb/commands/command.h new file mode 100644 index 0000000000..beae9d2833 --- /dev/null +++ b/engines/mutationofjb/commands/command.h @@ -0,0 +1,58 @@ +/* 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. + * + */ + +#ifndef MUTATIONOFJB_COMMAND_H +#define MUTATIONOFJB_COMMAND_H + +namespace Common { + class String; +} + +namespace MutationOfJB { + +class GameData; +class SeqCommand; +class IfCommand; +class CallMacroCommand; +class ScriptParseContext; +class Command; + +typedef bool (*CommandParseFunc)(const Common::String &line, ScriptParseContext &parseContext, Command *&command); + +class Command { +public: + enum ExecuteResult { + None, + Finished, + InProgress + }; + + virtual ~Command(); + + virtual ExecuteResult execute(GameData &gameData) = 0; + virtual Command *next() const = 0; + + virtual SeqCommand *asSeqCommand(); +}; +} + +#endif diff --git a/engines/mutationofjb/commands/conditionalcommand.cpp b/engines/mutationofjb/commands/conditionalcommand.cpp new file mode 100644 index 0000000000..3118e6d8cb --- /dev/null +++ b/engines/mutationofjb/commands/conditionalcommand.cpp @@ -0,0 +1,41 @@ +/* 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 "mutationofjb/commands/conditionalcommand.h" +#include "common/scummsys.h" + +namespace MutationOfJB { + +ConditionalCommand::ConditionalCommand() : + _trueCommand(nullptr), + _falseCommand(nullptr), + _cachedResult(false) +{} + +Command *ConditionalCommand::next() const { + if (_cachedResult) { + return _trueCommand; + } else { + return _falseCommand; + } +} +}; diff --git a/engines/mutationofjb/commands/conditionalcommand.h b/engines/mutationofjb/commands/conditionalcommand.h new file mode 100644 index 0000000000..e355662454 --- /dev/null +++ b/engines/mutationofjb/commands/conditionalcommand.h @@ -0,0 +1,41 @@ +/* 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 "mutationofjb/commands/command.h" +#include "common/scummsys.h" + +namespace MutationOfJB { + +class ConditionalCommand : public Command { +public: + ConditionalCommand(); + void setTrueCommand(Command *command); + void setFalseCommand(Command *command); + + virtual Command *next() const override; +protected: + Command *_trueCommand; + Command *_falseCommand; + bool _cachedResult; +}; + +} diff --git a/engines/mutationofjb/commands/ifcommand.cpp b/engines/mutationofjb/commands/ifcommand.cpp new file mode 100644 index 0000000000..18b8081842 --- /dev/null +++ b/engines/mutationofjb/commands/ifcommand.cpp @@ -0,0 +1,88 @@ +/* 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 "mutationofjb/commands/ifcommand.h" +#include "mutationofjb/game.h" +#include "mutationofjb/script.h" +#include "common/str.h" +#include "common/translation.h" + +namespace MutationOfJB { + +bool IfCommand::ParseFunc(const Common::String &line, ScriptParseContext &parseContext, Command *&command) +{ + // IFtss oo val! + // <t> 1B Tag. + // <ss> 2B Scene. + // <oo> 2B Object ID. + // <val> VL Value. + // ! 1B Negation (optional). + + if (line.size() < 10) { + return false; + } + + if (strncmp(line.c_str(), "IF", 2) != 0) { + return false; + } + + const char *const cstr = line.c_str(); + const char tag = cstr[2]; + const uint8 sceneId = atoi(cstr + 3); + const uint8 objectId = atoi(cstr + 6); + const uint8 value = atoi(cstr + 9); + const bool negative = (line.lastChar() == '!'); + + IfCommand *ifCommand = new IfCommand(sceneId, objectId, value, negative); + + command = ifCommand; + parseContext.addConditionalCommand(ifCommand, tag); + return true; +} + +IfCommand::IfCommand(uint8 sceneId, uint8 objectId, uint16 value, bool negative) : + _sceneId(sceneId), + _objectId(objectId), + _value(value), + _negative(negative) +{} + +Command::ExecuteResult IfCommand::execute(GameData &gameData) { + Scene* const scene = gameData.getScene(_sceneId); + if (!scene) { + return Finished; + } + + Object* const object = scene->getObject(_objectId); + if (!object) { + return Finished; + } + + _cachedResult = (object->_WX == _value); + if (_negative) { + _cachedResult = !_cachedResult; + } + + return Finished; +} +} + diff --git a/engines/mutationofjb/commands/ifcommand.h b/engines/mutationofjb/commands/ifcommand.h new file mode 100644 index 0000000000..d33f34ffb0 --- /dev/null +++ b/engines/mutationofjb/commands/ifcommand.h @@ -0,0 +1,52 @@ +/* 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. + * + */ + +#ifndef MUTATIONOFJB_IFCOMMAND_H +#define MUTATIONOFJB_IFCOMMAND_H + +#include "mutationofjb/commands/conditionalcommand.h" +#include "common/scummsys.h" + +namespace MutationOfJB { + +class ScriptParseContext; + +class IfCommand : public ConditionalCommand { +public: + static bool ParseFunc(const Common::String &line, ScriptParseContext &parseContext, Command *&command); + + IfCommand(uint8 sceneId, uint8 objectId, uint16 value, bool negative); + + virtual ExecuteResult execute(GameData &gameData) override; + +private: + uint8 _sceneId; + uint8 _objectId; + uint16 _value; + bool _negative; + + bool _cachedResult; +}; + +} + +#endif diff --git a/engines/mutationofjb/commands/seqcommand.cpp b/engines/mutationofjb/commands/seqcommand.cpp new file mode 100644 index 0000000000..ab98497f21 --- /dev/null +++ b/engines/mutationofjb/commands/seqcommand.cpp @@ -0,0 +1,40 @@ +/* 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 "seqcommand.h" + +namespace MutationOfJB { + +void SeqCommand::setNextCommand(Command *nextCommand) +{ + _nextCommand = nextCommand; +} + +Command *SeqCommand::next() const { + return _nextCommand; +} + +SeqCommand *SeqCommand::asSeqCommand() { + return this; +} + +} diff --git a/engines/mutationofjb/commands/seqcommand.h b/engines/mutationofjb/commands/seqcommand.h new file mode 100644 index 0000000000..b247fb22e1 --- /dev/null +++ b/engines/mutationofjb/commands/seqcommand.h @@ -0,0 +1,44 @@ +/* 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. + * + */ + +#ifndef MUTATIONOFJB_SEQCOMMAND_H +#define MUTATIONOFJB_SEQCOMMAND_H + +#include "mutationofjb/commands/command.h" +#include "common/scummsys.h" + +namespace MutationOfJB { + +class SeqCommand : public Command { +public: + void setNextCommand(Command *nextCommand); + virtual Command *next() const override; + virtual SeqCommand *asSeqCommand(); + +private: + Command *_nextCommand; +}; + +} + +#endif + diff --git a/engines/mutationofjb/game.cpp b/engines/mutationofjb/game.cpp index 581077acd6..740fb1cab6 100644 --- a/engines/mutationofjb/game.cpp +++ b/engines/mutationofjb/game.cpp @@ -23,6 +23,7 @@ #include "mutationofjb/game.h" #include "common/stream.h" #include "common/util.h" +#include "common/translation.h" namespace MutationOfJB { @@ -101,7 +102,7 @@ bool Bitmap::loadFromStream(Common::ReadStream &stream) { return true; } -bool SceneInfo::loadFromStream(Common::ReadStream &stream) { +bool Scene::loadFromStream(Common::ReadStream &stream) { int i; _startup = stream.readByte(); @@ -111,16 +112,19 @@ bool SceneInfo::loadFromStream(Common::ReadStream &stream) { _DL = stream.readByte(); _noDoors = stream.readByte(); + _noDoors = MIN(_noDoors, (uint8) ARRAYSIZE(_doors)); for (i = 0; i < ARRAYSIZE(_doors); ++i) { _doors[i].loadFromStream(stream); } _noObjects = stream.readByte(); + _noObjects = MIN(_noObjects, (uint8) ARRAYSIZE(_objects)); for (i = 0; i < ARRAYSIZE(_objects); ++i) { _objects[i].loadFromStream(stream); } _noStatics = stream.readByte(); + _noStatics = MIN(_noStatics, (uint8) ARRAYSIZE(_statics)); for (i = 0; i < ARRAYSIZE(_statics); ++i) { _statics[i].loadFromStream(stream); } @@ -139,8 +143,27 @@ bool SceneInfo::loadFromStream(Common::ReadStream &stream) { return true; } +Object *Scene::getObject(uint8 objectId) { + if (objectId == 0 || objectId > _noObjects) { + warning(_("Object %d does not exist"), objectId); + return nullptr; + } + + return &_objects[objectId - 1]; +} + GameData::GameData() : _currentScene(0) {} +Scene *GameData::getScene(uint8 sceneId) +{ + if (sceneId == 0 || sceneId > ARRAYSIZE(_scenes)) { + warning(_("Scene %d does not exist"), sceneId); + return nullptr; + } + + return &_scenes[sceneId - 1]; +} + bool GameData::loadFromStream(Common::ReadStream &stream) { for (int i = 0; i < ARRAYSIZE(_scenes); ++i) { _scenes[i].loadFromStream(stream); diff --git a/engines/mutationofjb/game.h b/engines/mutationofjb/game.h index d8f2079e3a..d49a966001 100644 --- a/engines/mutationofjb/game.h +++ b/engines/mutationofjb/game.h @@ -22,13 +22,11 @@ #include "common/scummsys.h" -namespace Common -{ +namespace Common { class ReadStream; } -namespace MutationOfJB -{ +namespace MutationOfJB { static const uint8 MAX_STR_LENGTH = 0x14; @@ -93,7 +91,10 @@ struct Bitmap { }; -struct SceneInfo { +struct Scene { + + Object *getObject(uint8 objectId); + uint8 _startup; uint8 _unknown001; uint8 _unknown002; @@ -123,12 +124,16 @@ struct SceneInfo { struct GameData { +public: GameData(); + Scene *getScene(uint8 sceneId); + + bool loadFromStream(Common::ReadStream &stream); - SceneInfo _scenes[45]; uint8 _currentScene; +private: + Scene _scenes[45]; - bool loadFromStream(Common::ReadStream &stream); }; } diff --git a/engines/mutationofjb/module.mk b/engines/mutationofjb/module.mk index 7baea826c1..e6c539a2c8 100644 --- a/engines/mutationofjb/module.mk +++ b/engines/mutationofjb/module.mk @@ -1,11 +1,16 @@ MODULE := engines/mutationofjb MODULE_OBJS := \ + commands/command.o \ + commands/conditionalcommand.o \ + commands/ifcommand.o \ + commands/seqcommand.o \ detection.o \ encryptedfile.o \ game.o \ mutationofjb.o \ room.o \ + script.o \ util.o # This module can be built as a plugin diff --git a/engines/mutationofjb/mutationofjb.cpp b/engines/mutationofjb/mutationofjb.cpp index dc7f51869c..cdefbb9833 100644 --- a/engines/mutationofjb/mutationofjb.cpp +++ b/engines/mutationofjb/mutationofjb.cpp @@ -102,12 +102,14 @@ Common::Error MutationOfJBEngine::run() { switch (event.type) { case Common::EVENT_LBUTTONDOWN: { - const SceneInfo &sceneInfo = _gameData->_scenes[_gameData->_currentScene - 1]; - for (int i = 0; i < MIN(ARRAYSIZE(sceneInfo._doors), (int) sceneInfo._noDoors); ++i) { - const Door &door = sceneInfo._doors[i]; - if ((event.mouse.x >= door._x) && (event.mouse.x < door._x + door._width) && (event.mouse.y >= door._y) && (event.mouse.y < door._y + door._height)) { - _gameData->_currentScene = door._destSceneId; - _room->load(_gameData->_currentScene, false); + const Scene* const scene = _gameData->getScene(_gameData->_currentScene); + if (scene) { + for (int i = 0; i < MIN(ARRAYSIZE(scene->_doors), (int) scene->_noDoors); ++i) { + const Door &door = scene->_doors[i]; + if ((event.mouse.x >= door._x) && (event.mouse.x < door._x + door._width) && (event.mouse.y >= door._y) && (event.mouse.y < door._y + door._height)) { + _gameData->_currentScene = door._destSceneId; + _room->load(_gameData->_currentScene, false); + } } } break; diff --git a/engines/mutationofjb/room.cpp b/engines/mutationofjb/room.cpp index 95a1a49d7c..eae430a1d5 100644 --- a/engines/mutationofjb/room.cpp +++ b/engines/mutationofjb/room.cpp @@ -132,6 +132,9 @@ void Room::loadBackground(EncryptedFile &file, uint32 size) { } lines++; } + if (readBytes < size) { + file.seek(size - readBytes, SEEK_CUR); + } _screen->update(); } diff --git a/engines/mutationofjb/script.cpp b/engines/mutationofjb/script.cpp new file mode 100644 index 0000000000..0280c86198 --- /dev/null +++ b/engines/mutationofjb/script.cpp @@ -0,0 +1,75 @@ +/* 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 "script.h" + +#include "common/hashmap.h" +#include "common/hash-str.h" +#include "common/stream.h" +#include "mutationofjb/commands/command.h" + +namespace MutationOfJB { + +static CommandParseFunc* getParseFuncs() { + static CommandParseFunc funcs[] = { + nullptr + }; + + return funcs; +} + + +ScriptParseContext::ScriptParseContext(Common::SeekableReadStream &stream) : _stream(stream) {} + +bool ScriptParseContext::readLine(Common::String &line) { + do { + Common::String str = _stream.readLine(); + if (str.empty() || str[0] != '.') { + line = str; + if (line[0] == '*') { + line.deleteChar(0); + } + return true; + } + } while(_stream.eos()); + + return false; +} + +void ScriptParseContext::addConditionalCommand(ConditionalCommand *command, char tag) { + ConditionalCommandInfo cmi = {command, tag}; + _pendingCondCommands.push_back(cmi); +} + +bool Script::loadFromStream(Common::SeekableReadStream &stream) { + + CommandParseFunc * const parseFuncs = getParseFuncs(); + + ScriptParseContext parseCtx(stream); + + Common::HashMap<Common::String, Command *> macros; + Common::HashMap<Common::String, Command *> labels; + + return true; +} + +} diff --git a/engines/mutationofjb/script.h b/engines/mutationofjb/script.h new file mode 100644 index 0000000000..9c0f0f3b1c --- /dev/null +++ b/engines/mutationofjb/script.h @@ -0,0 +1,64 @@ +/* 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. + * + */ + +#ifndef MUTATIONOFJB_SCRIPT_H +#define MUTATIONOFJB_SCRIPT_H + +#include "common/array.h" + +namespace Common { + class SeekableReadStream; + class String; +} + +namespace MutationOfJB { + +class ConditionalCommand; + +class ScriptParseContext +{ +public: + ScriptParseContext(Common::SeekableReadStream &stream); + bool readLine(Common::String &line); + void addConditionalCommand(ConditionalCommand *command, char tag); + //void setLastIfCommand(IfCommand *command); + +private: + Common::SeekableReadStream &_stream; + + struct ConditionalCommandInfo { + ConditionalCommand *command; + char tag; + }; + Common::Array<ConditionalCommandInfo> _pendingCondCommands; +}; + +class Script { +public: + bool loadFromStream(Common::SeekableReadStream &stream); +private: + +}; + +} + +#endif |