aboutsummaryrefslogtreecommitdiff
path: root/engines/lastexpress/sound
diff options
context:
space:
mode:
authorLittleboy2011-06-24 11:43:10 -0400
committerLittleboy2011-06-24 11:43:10 -0400
commit3f4d2c8130ac1db51f9a2fc5fcb5a2413b215f45 (patch)
treee0f4e05c9252d41721bf585a615e525d9f0aab3e /engines/lastexpress/sound
parent5d020fffad44c78414b91de7c26653b11b78b60f (diff)
downloadscummvm-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.cpp91
-rw-r--r--engines/lastexpress/sound/entry.h27
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