diff options
author | Thierry Crozat | 2017-11-04 14:54:26 +0000 |
---|---|---|
committer | Thierry Crozat | 2018-01-23 02:15:37 +0000 |
commit | 7bf803f6e677b9b8bf29caf55f9c211cfe175c1b (patch) | |
tree | cbb22fbbb3be74863f097e000d0be51915d0fe5d /engines/supernova/rooms.h | |
parent | 21899d8716475c08aa591c087b58c63bb00927ed (diff) | |
download | scummvm-rg350-7bf803f6e677b9b8bf29caf55f9c211cfe175c1b.tar.gz scummvm-rg350-7bf803f6e677b9b8bf29caf55f9c211cfe175c1b.tar.bz2 scummvm-rg350-7bf803f6e677b9b8bf29caf55f9c211cfe175c1b.zip |
SUPERNOVA: Cleanup dialog code
The main change consists in using a separate byte array for the sentence
removal flags, move some functions from the GameManager to the Room class,
and add a few additional functions to manipulate this new array. This
allows to clarify some code related to dialogs.
This change also allows to switch the _shown array back to a bool array.
Diffstat (limited to 'engines/supernova/rooms.h')
-rw-r--r-- | engines/supernova/rooms.h | 29 |
1 files changed, 23 insertions, 6 deletions
diff --git a/engines/supernova/rooms.h b/engines/supernova/rooms.h index 47249f0bb6..b9dbfd19fb 100644 --- a/engines/supernova/rooms.h +++ b/engines/supernova/rooms.h @@ -38,6 +38,8 @@ public: _seen = false; for (int i = 0; i < kMaxSection; ++i) _shown[i] = kShownFalse; + for (int i = 0; i < kMaxDialog; ++i) + _sentenceRemoved[i] = 0; } bool hasSeen() { @@ -64,18 +66,32 @@ public: void removeSentence(int sentence, int number) { if (number > 0) - _shown[kMaxSection - number] |= (1 << sentence); + _sentenceRemoved[number - 1] |= (1 << sentence); } void addSentence(int sentence, int number) { if (number > 0) - _shown[kMaxSection - number] &= ~(1 << sentence); + _sentenceRemoved[number - 1] &= ~(1 << sentence); } - bool sentencedRemoved(int sentence, int number) { + void addAllSentences(int number) { + if (number > 0) + _sentenceRemoved[number - 1] = 0; + } + + bool sentenceRemoved(int sentence, int number) { + if (number <= 0) + return false; + return (_sentenceRemoved[number - 1] & (1 << sentence)); + } + + bool allSentencesRemoved(int maxSentence, int number) { if (number <= 0) return false; - return (_shown[kMaxSection - number] & (1 << sentence)); + for (int i = 0, flag = 1 ; i < maxSentence ; ++i, flag <<= 1) + if (!(_sentenceRemoved[number - 1] & flag)) + return false; + return true; } Object *getObject(uint index) { @@ -89,11 +105,12 @@ public: return false; } virtual bool serialize(Common::WriteStream *out); - virtual bool deserialize(Common::ReadStream *in); + virtual bool deserialize(Common::ReadStream *in, int version); protected: int _fileNumber; - byte _shown[kMaxSection]; + bool _shown[kMaxSection]; + byte _sentenceRemoved[kMaxDialog]; Object _objectState[kMaxObject]; RoomID _id; SupernovaEngine *_vm; |