diff options
author | Littleboy | 2011-06-24 11:43:10 -0400 |
---|---|---|
committer | Littleboy | 2011-06-24 11:43:10 -0400 |
commit | 3f4d2c8130ac1db51f9a2fc5fcb5a2413b215f45 (patch) | |
tree | e0f4e05c9252d41721bf585a615e525d9f0aab3e /engines/lastexpress/sound | |
parent | 5d020fffad44c78414b91de7c26653b11b78b60f (diff) | |
download | scummvm-rg350-3f4d2c8130ac1db51f9a2fc5fcb5a2413b215f45.tar.gz scummvm-rg350-3f4d2c8130ac1db51f9a2fc5fcb5a2413b215f45.tar.bz2 scummvm-rg350-3f4d2c8130ac1db51f9a2fc5fcb5a2413b215f45.zip |
LASTEXPRESS: Move subtitle-related methods to the SubtitleEntry class
Diffstat (limited to 'engines/lastexpress/sound')
-rw-r--r-- | engines/lastexpress/sound/entry.cpp | 91 | ||||
-rw-r--r-- | engines/lastexpress/sound/entry.h | 27 |
2 files changed, 106 insertions, 12 deletions
diff --git a/engines/lastexpress/sound/entry.cpp b/engines/lastexpress/sound/entry.cpp index 309996886a..848e728ba4 100644 --- a/engines/lastexpress/sound/entry.cpp +++ b/engines/lastexpress/sound/entry.cpp @@ -24,8 +24,10 @@ #include "lastexpress/game/sound.h" +#include "lastexpress/graphics.h" #include "lastexpress/helpers.h" #include "lastexpress/lastexpress.h" +#include "lastexpress/resource.h" #include "common/stream.h" @@ -35,7 +37,6 @@ namespace LastExpress { // SoundEntry ////////////////////////////////////////////////////////////////////////// SoundEntry::SoundEntry(LastExpressEngine *engine) : _engine(engine) { - status.status = 0; type = kSoundTypeNone; currentDataPtr = 0; @@ -135,17 +136,95 @@ void SoundEntry::reset() { } } +void SoundEntry::showSubtitle(Common::String filename) { + subtitle = new SubtitleEntry(_engine); + subtitle->load(filename, this); + + if (subtitle->getStatus().status2 & 4) { + subtitle->draw(); + SAFE_DELETE(subtitle); + } else { + status.status |= kSoundStatus_20000; + } +} + ////////////////////////////////////////////////////////////////////////// // SubtitleEntry ////////////////////////////////////////////////////////////////////////// -SubtitleEntry::SubtitleEntry() { - status.status = 0; - sound = NULL; - data = NULL; +SubtitleEntry::SubtitleEntry(LastExpressEngine *engine) : _engine(engine) { + _sound = NULL; + _data = NULL; } SubtitleEntry::~SubtitleEntry() { - SAFE_DELETE(data); + SAFE_DELETE(_data); +} + +void SubtitleEntry::load(Common::String filename, SoundEntry *soundEntry) { + // Add ourselves to the list of active subtitles + getSound()->addSubtitle(this); + + // Set sound entry and filename + _filename = filename + ".SBE"; + _sound = soundEntry; + + // Load subtitle data + if (_engine->getResourceManager()->hasFile(filename)) { + if (getSound()->getSubtitleFlag() & 2) + return; + + loadData(); + } else { + _status.status = kSoundStatus_400; + } +} + +void SubtitleEntry::loadData() { + _data = new SubtitleManager(_engine->getFont()); + _data->load(getArchive(_filename)); + + getSound()->setSubtitleFlag(getSound()->getSubtitleFlag() | 2); + getSound()->setCurrentSubtitle(this); +} + +void SubtitleEntry::setupAndDraw() { + if (!_data) { + _data = new SubtitleManager(_engine->getFont()); + _data->load(getArchive(_filename)); + } + + if (_data->getMaxTime() > _sound->time) { + _status.status = kSoundStatus_400; + } else { + _data->setTime((uint16)_sound->time); + + if (getSound()->getSubtitleFlag() & 1) + drawOnScreen(); + } + + getSound()->setCurrentSubtitle(this); +} + +void SubtitleEntry::draw() { + // Remove ourselves from the queue + getSound()->removeSubtitle(this); + + if (this == getSound()->getCurrentSubtitle()) { + drawOnScreen(); + + getSound()->setCurrentSubtitle(NULL); + getSound()->setSubtitleFlag(0); + } +} + +void SubtitleEntry::drawOnScreen() { + getSound()->setSubtitleFlag(getSound()->getSubtitleFlag() & -1); + + if (_data == NULL) + return; + + if (getSound()->getSubtitleFlag() & 1) + _engine->getGraphicsManager()->draw(_data, GraphicsManager::kBackgroundOverlay); } } // End of namespace LastExpress diff --git a/engines/lastexpress/sound/entry.h b/engines/lastexpress/sound/entry.h index 9ed091b225..5671e0e74b 100644 --- a/engines/lastexpress/sound/entry.h +++ b/engines/lastexpress/sound/entry.h @@ -120,6 +120,9 @@ public: void updateState(); void reset(); + // Subtitles + void showSubtitle(Common::String filename); + private: LastExpressEngine *_engine; @@ -158,14 +161,26 @@ public: ////////////////////////////////////////////////////////////////////////// class SubtitleEntry { public: - SubtitleEntry(); + SubtitleEntry(LastExpressEngine *engine); ~SubtitleEntry(); -public: - Common::String filename; - SoundStatusUnion status; - SoundEntry *sound; - SubtitleManager *data; + void load(Common::String filename, SoundEntry *soundEntry); + void loadData(); + void draw(); + void setupAndDraw(); + void drawOnScreen(); + + // Accessors + SoundStatusUnion getStatus() { return _status; } + SoundEntry *getSoundEntry() { return _sound; } + +private: + LastExpressEngine *_engine; + + Common::String _filename; + SoundStatusUnion _status; + SoundEntry *_sound; + SubtitleManager *_data; }; } // End of namespace LastExpress |