aboutsummaryrefslogtreecommitdiff
path: root/engines/sci/sfx/music.h
diff options
context:
space:
mode:
Diffstat (limited to 'engines/sci/sfx/music.h')
-rw-r--r--engines/sci/sfx/music.h29
1 files changed, 17 insertions, 12 deletions
diff --git a/engines/sci/sfx/music.h b/engines/sci/sfx/music.h
index a6d3a3f375..574dc15e6f 100644
--- a/engines/sci/sfx/music.h
+++ b/engines/sci/sfx/music.h
@@ -26,12 +26,14 @@
#ifndef SCI_MUSIC_H
#define SCI_MUSIC_H
+#include "common/savefile.h"
+#include "common/serializer.h"
+#include "common/mutex.h"
+
#include "sound/mixer.h"
#include "sound/audiostream.h"
#include "sound/mididrv.h"
#include "sound/midiparser.h"
-#include "common/mutex.h"
-#include "common/savefile.h"
#include "sci/sci.h"
#include "sci/resource.h"
@@ -84,7 +86,7 @@ struct MusicEntry {
typedef Common::Array<MusicEntry *> MusicList;
-class SciMusic {
+class SciMusic : public Common::Serializable {
public:
SciMusic(SciVersion soundVersion);
~SciMusic();
@@ -95,7 +97,6 @@ public:
#endif
void onTimer();
bool saveState(Common::OutSaveFile *pFile);
- bool restoreState(Common::InSaveFile *pFile);
void stopAll();
// sound and midi functions
@@ -113,15 +114,19 @@ public:
return _dwTempo;
}
- int findListSlot(reg_t obj) {
+ MusicEntry *getSlot(reg_t obj) {
+ _mutex.lock();
+
for (uint32 i = 0; i < _playList.size(); i++) {
- if (_playList[i]->soundObj == obj)
- return i;
+ if (_playList[i]->soundObj == obj) {
+ _mutex.unlock();
+ return _playList[i];
+ }
}
- return -1;
- }
- MusicEntry *getSlot(int slot) { return _playList[slot]; }
+ _mutex.unlock();
+ return NULL;
+ }
void pushBackSlot(MusicEntry *slotEntry) {
_mutex.lock();
@@ -129,9 +134,9 @@ public:
_mutex.unlock();
}
- uint32 listSize() { return _playList.size(); }
+ void reconstructSounds(int savegame_version);
- uint16 _savelen;
+ virtual void saveLoadWithSerializer(Common::Serializer &ser);
protected:
byte findAudEntry(uint16 nAud, byte&oVolume, uint32& oOffset, uint32&oSize);