aboutsummaryrefslogtreecommitdiff
path: root/engines/supernova
diff options
context:
space:
mode:
authorJoseph-Eugene Winzer2018-03-24 17:12:54 +0100
committerThierry Crozat2018-04-15 18:23:12 +0100
commitab208d107758837fbad1f75dd0de6edce05cd0bb (patch)
tree8d19f7ef997b4f87eb215df7417be179702029df /engines/supernova
parent88a2026830186762898d0a47db3cf1c1047cd6d1 (diff)
downloadscummvm-rg350-ab208d107758837fbad1f75dd0de6edce05cd0bb.tar.gz
scummvm-rg350-ab208d107758837fbad1f75dd0de6edce05cd0bb.tar.bz2
scummvm-rg350-ab208d107758837fbad1f75dd0de6edce05cd0bb.zip
SUPERNOVA: Implements image buffering
Diffstat (limited to 'engines/supernova')
-rw-r--r--engines/supernova/resman.cpp55
-rw-r--r--engines/supernova/resman.h12
-rw-r--r--engines/supernova/supernova.cpp14
3 files changed, 48 insertions, 33 deletions
diff --git a/engines/supernova/resman.cpp b/engines/supernova/resman.cpp
index 69f99b0907..acc2dcb147 100644
--- a/engines/supernova/resman.cpp
+++ b/engines/supernova/resman.cpp
@@ -29,6 +29,7 @@
#include "graphics/cursorman.h"
#include "graphics/palette.h"
+#include "supernova/graphics.h"
#include "supernova/resman.h"
#include "supernova/supernova.h"
@@ -77,24 +78,8 @@ ResourceManager::~ResourceManager() {
delete _musicOutro;
for (int i = 0; i < kAudioNumSamples; ++i)
delete _soundSamples[i];
-}
-
-Audio::SeekableAudioStream *ResourceManager::getSoundStream(AudioIndex index) {
- Audio::SeekableAudioStream *stream = _soundSamples[index];
- stream->rewind();
-
- return stream;
-}
-
-Audio::AudioStream *ResourceManager::getSoundStream(MusicIndex index) {
- switch (index) {
- case kMusicIntro:
- return _musicIntro;
- case kMusicOutro:
- return _musicOutro;
- default:
- error("Invalid music constant in playAudio()");
- }
+ for (int i = 0; i < kNumImageFiles; ++i)
+ delete _images[i];
}
void ResourceManager::initSoundFiles() {
@@ -143,6 +128,7 @@ void ResourceManager::initSoundFiles() {
void ResourceManager::initGraphics() {
_vm->_system->getPaletteManager()->setPalette(initVGAPalette, 0, 256);
initCursorGraphics();
+ initImages();
}
void ResourceManager::initCursorGraphics() {
@@ -170,6 +156,39 @@ void ResourceManager::initCursorGraphics() {
CursorMan.showMouse(true);
}
+void ResourceManager::initImages() {
+ for (int i = 0; i < kNumImageFiles; ++i) {
+ _images[i] = new MSNImage();
+ if (!_images[i]->init(i))
+ error("Failed reading image file msn_data.%03d", i);
+ }
+}
+
+Audio::SeekableAudioStream *ResourceManager::getSoundStream(AudioIndex index) {
+ Audio::SeekableAudioStream *stream = _soundSamples[index];
+ stream->rewind();
+
+ return stream;
+}
+
+Audio::AudioStream *ResourceManager::getSoundStream(MusicIndex index) const {
+ switch (index) {
+ case kMusicIntro:
+ return _musicIntro;
+ case kMusicOutro:
+ return _musicOutro;
+ default:
+ error("Invalid music constant in playAudio()");
+ }
+}
+
+MSNImage *ResourceManager::getImage(int filenumber) const {
+ assert(filenumber < kNumImageFiles);
+
+ return _images[filenumber];
+}
+
+
static Common::MemoryReadStream *convertToMod(const char *filename, int version) {
// MSN format
struct {
diff --git a/engines/supernova/resman.h b/engines/supernova/resman.h
index 075b1e671f..d1304bfe4c 100644
--- a/engines/supernova/resman.h
+++ b/engines/supernova/resman.h
@@ -23,8 +23,6 @@
#ifndef SUPERNOVA_RESOURCES_H
#define SUPERNOVA_RESOURCES_H
-#include "common/ptr.h"
-
#include "supernova/sound.h"
namespace Audio {
@@ -33,18 +31,25 @@ class SeekableAudioStream;
namespace Supernova {
+class MSNImage;
+
class ResourceManager {
public:
+ static const int kNumImageFiles = 44;
+
+public:
ResourceManager(SupernovaEngine *vm);
~ResourceManager();
Audio::SeekableAudioStream *getSoundStream(AudioIndex index);
- Audio::AudioStream *getSoundStream(MusicIndex index);
+ Audio::AudioStream *getSoundStream(MusicIndex index) const;
+ MSNImage *getImage(int filenumber) const;
private:
void initSoundFiles();
void initGraphics();
void initCursorGraphics();
+ void initImages();
private:
SupernovaEngine *_vm;
@@ -52,6 +57,7 @@ private:
Audio::AudioStream *_musicIntro;
Audio::AudioStream *_musicOutro;
int _audioRate;
+ MSNImage *_images[kNumImageFiles];
byte _cursorNormal[256];
byte _cursorWait[256];
};
diff --git a/engines/supernova/supernova.cpp b/engines/supernova/supernova.cpp
index ce2ec1d1ef..d1e1311a5a 100644
--- a/engines/supernova/supernova.cpp
+++ b/engines/supernova/supernova.cpp
@@ -104,7 +104,6 @@ SupernovaEngine::SupernovaEngine(OSystem *syst)
SupernovaEngine::~SupernovaEngine() {
DebugMan.clearAllDebugChannels();
- delete _currentImage;
delete _console;
delete _gm;
delete _sound;
@@ -308,19 +307,10 @@ void SupernovaEngine::renderImage(int section) {
}
bool SupernovaEngine::setCurrentImage(int filenumber) {
- if (_currentImage && _currentImage->_filenumber == filenumber)
- return true;
-
- delete _currentImage;
- _currentImage = new MSNImage();
- if (!_currentImage->init(filenumber)) {
- delete _currentImage;
- _currentImage = nullptr;
- return false;
- }
-
+ _currentImage = _resMan->getImage(filenumber);
_system->getPaletteManager()->setPalette(_currentImage->getPalette(), 16, 239);
paletteBrightness();
+
return true;
}