Files
scummvm-cursorfix/engines/lastexpress/sound/slot.h
2026-02-02 04:50:13 +01:00

171 lines
4.3 KiB
C++

/* ScummVM - Graphic Adventure Engine
*
* ScummVM is the legal property of its developers, whose names
* are too numerous to list here. Please refer to the COPYRIGHT
* file distributed with this source distribution.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
#ifndef LASTEXPRESS_SOUND_SLOT_H
#define LASTEXPRESS_SOUND_SLOT_H
#include "lastexpress/shared.h"
#include "lastexpress/lastexpress.h"
#include "lastexpress/sound/sound.h"
namespace LastExpress {
class LastExpressEngine;
class Subtitle;
class SoundManager;
struct HPF;
#include "common/pack-start.h"
typedef struct SaveSlot {
int32 status;
int32 tag;
int32 blockCount;
int32 time;
int32 fadeDelayCounter;
int32 unusedVar;
int32 character;
int32 delayTicks;
int32 priority;
char name1[16];
char name2[16];
SaveSlot() {
status = 0;
tag = 0;
blockCount = 0;
time = 0;
fadeDelayCounter = 0;
unusedVar = 0;
character = 0;
delayTicks = 0;
priority = 0;
memset(name1, 0, 16);
memset(name2, 0, 16);
}
} SaveSlot;
#include "common/pack-end.h"
class Slot {
friend class Subtitle;
friend class LastExpressEngine;
friend class SoundManager;
friend class LogicManager;
friend class SubtitleManager;
friend class Menu;
public:
Slot(SoundManager *soundMan, const char *filename, int typeFlags, int priority);
Slot(SoundManager *soundMan, int typeFlags, int priority);
Slot(SoundManager *soundMan, SaveSlot *soundEntry);
~Slot();
void play();
void setFade(int volume);
void setVol(int volume);
void setTag(int typeFlags);
void setType(int typeFlags);
void setSub(const char *filename);
bool getBuffer();
void releaseBuffer();
void virtualize();
void devirtualize();
bool load(const char *filename);
void stream();
bool update();
// The following getters/setters were not in the original
// but are needed for thread safety
int32 getStatusFlags();
void setStatusFlags(int32 flags);
void addStatusFlag(int32 flag);
void removeStatusFlag(int32 flag);
int32 getTag();
bool hasTag(int32 tag);
void assignDirectTag(int32 tag);
int getAssociatedCharacter();
void setAssociatedCharacter(int character);
int32 getTime();
Slot *getNext();
void setNext(Slot *next);
int getPriority();
bool closeArchive();
void assignDirectVolume(int volume);
int getVolume();
void setChainedSound(Slot *chainedSound);
Subtitle *getSubtitle();
int32 getSize();
void setSize(int32 size);
int32 getNumLoadedBytes();
void setNumLoadedBytes(int32 bytes);
void advanceLoadedBytesBy(int32 loadedBytes);
byte *getDataStart();
void setDataStart(byte *dataStart);
byte *getDataEnd();
void setDataEnd(byte *dataEnd);
void setDataEndByte(int32 pos, byte value);
void advanceDataEndBy(int32 size);
byte *getSoundBuffer();
void setSoundBuffer(byte *bufferPtr);
byte *getCurrentBufferPtr();
void advanceCurrentBufferPtrBy(int32 size);
void setCurrentBufferPtr(byte *bufferPtr);
byte *getCurrentDataPtr();
void setCurrentDataPtr(byte *dataPtr);
int32 getBlockCount();
void setBlockCount(int32 blockCount);
void setDelayedStartTime(int32 time);
char *getName2();
private:
LastExpressEngine *_engine = nullptr;
SoundManager *_soundMan = nullptr;
int32 _statusFlags = 0;
int32 _tag = 0;
byte *_dataStart = nullptr;
byte *_dataEnd = 0;
byte *_currentDataPtr = nullptr;
byte *_soundBuffer = nullptr;
byte *_currentBufferPtr = nullptr;
int32 _blockCount = 0;
int32 _time = 0;
int32 _size = 0;
int32 _loadedBytes = 0;
HPF *_archive = nullptr;
Slot *_chainedSound = nullptr;
int32 _fadeDelayCounter = 0;
int32 _unusedVar = 0;
int32 _fadeTargetVolume = 0;
int _volume = 0;
int _character = 0;
int32 _delayedStartTime = 0;
int _priority = 0;
char _name1[16];
char _name2[16];
Slot *_next = nullptr;
Subtitle *_subtitle = nullptr;
};
} // End of namespace LastExpress
#endif // LASTEXPRESS_SOUND_SLOT_H