some experimental changes

svn-id: r17105
This commit is contained in:
Paweł Kołodziejski 2005-03-12 18:54:06 +00:00
parent 65551ca83e
commit 8de216f3ae
3 changed files with 64 additions and 11 deletions

View File

@ -144,6 +144,9 @@ public:
void setVolume(int soundId, int volume);
void setPan(int soundId, int pan);
void setFade(int soundId, int destVolume, int delay60HzTicks);
int getCurMusicSoundId();
char *getCurMusicSoundName();
void setHookId(int soundId, int hookId);
void setMusicVolume(int vol) {}
void stopSound(int sound);
void stopAllSounds();

View File

@ -286,27 +286,40 @@ void IMuseDigital::playComiMusic(const char *songName, const imuseComiTable *tab
switch(table->opcode) {
case 0:
case 8:
case 9:
fadeOutMusic(120);
break;
case 8:
case 9:
{
int soundId = getCurMusicSoundId();
setHookId(soundId, hookId);
break;
}
case 1:
fadeOutMusic(120);
if (table->filename[0] == 0) {
fadeOutMusic(120);
return;
}
fadeOutMusic(120);
startMusic(table->filename, table->soundId, 0, 1);
setFade(table->soundId, 127, 120);
break;
case 2:
if (table->filename[0] == 0) {
fadeOutMusic(60);
return;
{
if (table->filename[0] == 0) {
fadeOutMusic(60);
return;
}
char *soundName = getCurMusicSoundName();
if ((strcmp(soundName, table->filename) == 0)) {
int soundId = getCurMusicSoundId();
setFade(soundId, 127, table->fadeOut60TicksDelay);
setHookId(soundId, hookId);
} else {
fadeOutMusic(120);
startMusic(table->filename, table->soundId, table->hookId, 127);
}
break;
}
fadeOutMusic(table->fadeOut60TicksDelay);
startMusic(table->filename, table->soundId, table->hookId, 127);
break;
case 3:
case 4:
case 12:
@ -314,9 +327,9 @@ void IMuseDigital::playComiMusic(const char *songName, const imuseComiTable *tab
fadeOutMusic(60);
return;
}
fadeOutMusic(table->fadeOut60TicksDelay);
if ((!sequence) && (table->atribPos != 0) &&
(table->atribPos == _comiStateMusicTable[_curMusicState].atribPos)) {
fadeOutMusic(table->fadeOut60TicksDelay);
startMusic(table->filename, table->soundId, 0, 127);
return;
}

View File

@ -206,6 +206,43 @@ void IMuseDigital::setVolume(int soundId, int volume) {
}
}
void IMuseDigital::setHookId(int soundId, int hookId) {
Common::StackLock lock(_mutex, "IMuseDigital::setHookId()");
for (int l = 0; l < MAX_DIGITAL_TRACKS; l++) {
Track *track = _track[l];
if ((track->soundId == soundId) && track->used && !track->toBeRemoved) {
track->curHookId = hookId;
}
}
}
int IMuseDigital::getCurMusicSoundId() {
int soundId = -1;
for (int l = 0; l < MAX_DIGITAL_TRACKS; l++) {
Track *track = _track[l];
if (track->used && !track->toBeRemoved && (track->volGroupId == IMUSE_VOLGRP_MUSIC)) {
soundId = track->soundId;
}
}
return soundId;
}
char *IMuseDigital::getCurMusicSoundName() {
char *soundName = NULL;
for (int l = 0; l < MAX_DIGITAL_TRACKS; l++) {
Track *track = _track[l];
if (track->used && !track->toBeRemoved && (track->volGroupId == IMUSE_VOLGRP_MUSIC)) {
soundName = track->soundName;
}
}
return soundName;
}
void IMuseDigital::setPan(int soundId, int pan) {
debug(5, "IMuseDigital::setPan(%d, %d)", soundId, pan);