TRECISION: Rename Smacker audio toggling functions. Some cleanup

This commit is contained in:
Filippos Karapetis 2021-05-22 00:57:20 +03:00 committed by SupSuper
parent cc48935153
commit 6390587914
4 changed files with 56 additions and 51 deletions

View File

@ -93,10 +93,10 @@ void AnimTypeManager::executeAtFrameDoit(ATFHandle *h, int doit, int obj) {
if (!(_vm->_dialogMgr->_choice[616]._flag & kObjFlagDone) && // if the fmv is not done
(_vm->isObjectVisible(oTUBOA34)) && // if there's a cut pipe
!(_vm->isObjectVisible(oTUBOFT34))) // if there's not tube outside
_vm->_animMgr->smkVolumePan(0, 2, 1);
_vm->_animMgr->smkToggleTrackAudio(0, 2, true);
break;
case fVALVEOFF34:
_vm->_animMgr->smkVolumePan(0, 2, 0);
_vm->_animMgr->smkToggleTrackAudio(0, 2, false);
break;
case fCHARACTEROFF:
@ -124,12 +124,12 @@ void AnimTypeManager::executeAtFrameDoit(ATFHandle *h, int doit, int obj) {
case fANIMOFF1:
_vm->_animMgr->_animTab[_vm->_room[_vm->_curRoom]._bkgAnim]._flag |= SMKANIM_OFF1;
if ((_vm->_curRoom == kRoom11) || (_vm->_curRoom == kRoom1D) || (_vm->_curRoom == kRoom14) || (_vm->_curRoom == kRoom22) || (_vm->_curRoom == kRoom48) || (_vm->_curRoom == kRoom4P))
_vm->_animMgr->smkVolumePan(0, 1, 0);
_vm->_animMgr->smkToggleTrackAudio(0, 1, false);
break;
case fANIMOFF2:
_vm->_animMgr->_animTab[_vm->_room[_vm->_curRoom]._bkgAnim]._flag |= SMKANIM_OFF2;
if ((_vm->_curRoom == kRoom2E))
_vm->_animMgr->smkVolumePan(0, 2, 0);
_vm->_animMgr->smkToggleTrackAudio(0, 2, false);
break;
case fANIMOFF3:
_vm->_animMgr->_animTab[_vm->_room[_vm->_curRoom]._bkgAnim]._flag |= SMKANIM_OFF3;
@ -137,19 +137,19 @@ void AnimTypeManager::executeAtFrameDoit(ATFHandle *h, int doit, int obj) {
case fANIMOFF4:
_vm->_animMgr->_animTab[_vm->_room[_vm->_curRoom]._bkgAnim]._flag |= SMKANIM_OFF4;
if (_vm->_curRoom == kRoom28)
_vm->_animMgr->smkVolumePan(0, 1, 0);
_vm->_animMgr->smkToggleTrackAudio(0, 1, false);
break;
case fANIMON1:
_vm->_animMgr->_animTab[_vm->_room[_vm->_curRoom]._bkgAnim]._flag &= ~SMKANIM_OFF1;
if ((_vm->_curRoom == kRoom14) || (_vm->_curRoom == kRoom1D) || (_vm->_curRoom == kRoom22) || (_vm->_curRoom == kRoom48) || (_vm->_curRoom == kRoom4P)) {
_vm->_animMgr->smkVolumePan(0, 1, 1);
_vm->_animMgr->smkToggleTrackAudio(0, 1, true);
}
break;
case fANIMON2:
_vm->_animMgr->_animTab[_vm->_room[_vm->_curRoom]._bkgAnim]._flag &= ~SMKANIM_OFF2;
if ((_vm->_curRoom == kRoom2E)) {
_vm->_animMgr->smkVolumePan(0, 2, 1);
_vm->_animMgr->smkToggleTrackAudio(0, 2, true);
}
break;
case fANIMON3:
@ -252,7 +252,7 @@ void AnimTypeManager::processAtFrame(ATFHandle *h, int type, int atf) {
_vm->read3D(filename);
_vm->_room[_vm->_curRoom]._flag |= kObjFlagExtra;
if (_vm->_curRoom == kRoom37)
_vm->_animMgr->smkVolumePan(0, 1, 1);
_vm->_animMgr->smkToggleTrackAudio(0, 1, true);
} break;
default:
break;

View File

@ -137,7 +137,7 @@ void DialogManager::playDialog(uint16 i) {
if ((_dialog[i]._startLen > 0) && !skip)
_vm->_animMgr->playMovie(_dialog[i]._startAnim, 0, _dialog[i]._startLen - 1);
else {
_vm->_animMgr->smkSoundOnOff(1, false);
_vm->_animMgr->smkToggleAudio(1, false);
afterChoice();
}
}
@ -374,7 +374,7 @@ void DialogManager::afterChoice() {
case dF371:
_vm->setObjectAnim(oSCAFFALE36, a3615AAPRENDESCAFFALE);
_vm->_animMgr->smkVolumePan(0, 1, 1);
_vm->_animMgr->smkToggleTrackAudio(0, 1, true);
break;
case dF431:

View File

@ -263,14 +263,14 @@ void AnimManager::smkGoto(int slot, int frame) {
_smkAnims[slot]->forceSeekToFrame(frame);
}
void AnimManager::smkVolumePan(int slot, int track, int vol) {
void AnimManager::smkToggleTrackAudio(int slot, int track, bool on) {
if (_smkAnims[slot] == nullptr)
return;
_smkAnims[slot]->muteTrack(track, vol == 0);
_smkAnims[slot]->muteTrack(track, !on);
}
void AnimManager::smkSoundOnOff(int slot, bool on) {
void AnimManager::smkToggleAudio(int slot, bool on) {
if (_smkAnims[slot] == nullptr)
return;
@ -296,57 +296,61 @@ void AnimManager::startSmkAnim(uint16 animation) {
else
slot = kSmackerAction;
if (_playingAnims[slot] != 0) {
smkStop(slot);
}
smkStop(slot);
_playingAnims[slot] = animation;
// choose how to open
if (animFlag & SMKANIM_BKG) {
if (slot == kSmackerBackground) {
openSmkAnim(kSmackerBackground, _animTab[animation]._name);
_bgAnimRestarted = false;
// Turns off when not needed
if (animation == aBKG11 && (animFlag & SMKANIM_OFF1))
smkVolumePan(0, 1, 0);
else if (animation == aBKG14 && (animFlag & SMKANIM_OFF1))
smkVolumePan(0, 1, 0);
else if (animation == aBKG1C && (_vm->_obj[oFAX17]._flag & kObjFlagExtra)) {
_animTab[animation]._flag |= SMKANIM_OFF1;
smkVolumePan(0, 1, 0);
} else if (animation == aBKG1D && (animFlag & SMKANIM_OFF1))
smkVolumePan(0, 1, 0);
else if (animation == aBKG22 && (animFlag & SMKANIM_OFF1))
smkVolumePan(0, 1, 0);
else if (animation == aBKG48 && (animFlag & SMKANIM_OFF1))
smkVolumePan(0, 1, 0);
else if (animation == aBKG4P && (animFlag & SMKANIM_OFF1))
smkVolumePan(0, 1, 0);
else if (animation == aBKG28 && (animFlag & SMKANIM_OFF4))
smkVolumePan(0, 1, 0);
else if (animation == aBKG37 && (!(_vm->_room[_vm->_curRoom]._flag & kObjFlagExtra)))
smkVolumePan(0, 1, 0);
else if (animation == aBKG2E && (animFlag & SMKANIM_OFF2))
smkVolumePan(0, 2, 0);
else if (animation == aBKG2G && (_vm->_dialogMgr->_choice[556]._flag & kObjFlagDone))
smkVolumePan(0, 2, 0);
else if (animation == aBKG34 && // If it's BKG 34 and
((_vm->_dialogMgr->_choice[616]._flag & kObjFlagDone) || // if the FMV is already done or
_vm->isObjectVisible(oTUBOT34) || // if the whole tube is available or
_vm->isObjectVisible(oTUBOFT34) || // if the outside of the tube is available or
_vm->isObjectVisible(oVALVOLAC34))) // if the valve is closed
smkVolumePan(0, 2, 0);
} else if (animFlag & SMKANIM_ICON) {
toggleMuteBgAnim(animation);
} else if (slot == kSmackerIcon) {
openSmkAnim(kSmackerIcon, _animTab[animation]._name);
} else {
uint32 st = _vm->readTime();
openSmkAnim(kSmackerAction, _animTab[animation]._name);
_vm->_nextRefresh += _vm->readTime() - st; // fixup opening time
}
}
void AnimManager::toggleMuteBgAnim(uint16 animation) {
uint16 animFlag = _animTab[animation]._flag;
NightlongSmackerDecoder *decoder = _smkAnims[kSmackerBackground];
// Turns off when not needed
if (animation == aBKG11 && (animFlag & SMKANIM_OFF1))
decoder->muteTrack(1, true);
else if (animation == aBKG14 && (animFlag & SMKANIM_OFF1))
decoder->muteTrack(1, true);
else if (animation == aBKG1C && (_vm->_obj[oFAX17]._flag & kObjFlagExtra)) {
_animTab[animation]._flag |= SMKANIM_OFF1;
decoder->muteTrack(1, true);
} else if (animation == aBKG1D && (animFlag & SMKANIM_OFF1))
decoder->muteTrack(1, true);
else if (animation == aBKG22 && (animFlag & SMKANIM_OFF1))
decoder->muteTrack(1, true);
else if (animation == aBKG48 && (animFlag & SMKANIM_OFF1))
decoder->muteTrack(1, true);
else if (animation == aBKG4P && (animFlag & SMKANIM_OFF1))
decoder->muteTrack(1, true);
else if (animation == aBKG28 && (animFlag & SMKANIM_OFF4))
decoder->muteTrack(1, true);
else if (animation == aBKG37 && (!(_vm->_room[_vm->_curRoom]._flag & kObjFlagExtra)))
decoder->muteTrack(1, true);
else if (animation == aBKG2E && (animFlag & SMKANIM_OFF2))
decoder->muteTrack(2, true);
else if (animation == aBKG2G && (_vm->_dialogMgr->_choice[556]._flag & kObjFlagDone))
decoder->muteTrack(2, true);
else if (animation == aBKG34 && // If it's BKG 34 and
((_vm->_dialogMgr->_choice[616]._flag & kObjFlagDone) || // if the FMV is already done or
_vm->isObjectVisible(oTUBOT34) || // if the whole tube is available or
_vm->isObjectVisible(oTUBOFT34) || // if the outside of the tube is available or
_vm->isObjectVisible(oVALVOLAC34))) // if the valve is closed
decoder->muteTrack(2, true);
}
void AnimManager::smkStop(uint16 slot) {
_playingAnims[slot] = 0;

View File

@ -79,6 +79,7 @@ private:
void openSmk(int slot, Common::SeekableReadStream *stream);
void openSmkAnim(int slot, const Common::String &name);
void toggleMuteBgAnim(uint16 animation);
void closeSmk(int slot);
void drawFrame(NightlongSmackerDecoder *smkDecoder, uint16 x, uint16 y, bool updateScreen);
void drawFrameSubtitles(Graphics::Surface *surface, int frameNum);
@ -96,8 +97,8 @@ public:
SAnim _animTab[MAXANIM];
void smkGoto(int slot, int frame);
void smkSoundOnOff(int slot, bool on);
void smkVolumePan(int slot, int track, int vol);
void smkToggleAudio(int slot, bool on);
void smkToggleTrackAudio(int slot, int track, bool on);
int16 smkCurFrame(int slot);
void smkStop(uint16 slot);