update vol-porta-ending logic to be more readable

This commit is contained in:
Adam Lederer 2024-08-24 00:59:03 -07:00
parent 08f1381fee
commit 2982a40110
2 changed files with 37 additions and 12 deletions

View file

@ -365,11 +365,23 @@ bool DivCSPlayer::tick() {
if (sendVolume || chan[i].volSpeed!=0) { if (sendVolume || chan[i].volSpeed!=0) {
chan[i].volume+=chan[i].volSpeed; chan[i].volume+=chan[i].volSpeed;
if (chan[i].volSpeedTarget!=-1 && (chan[i].volume==chan[i].volSpeedTarget || (chan[i].volume>chan[i].volSpeedTarget)==(chan[i].volSpeed>0))) { if (chan[i].volSpeedTarget!=-1) {
bool atTarget=false;
if (chan[i].volSpeed>0) {
atTarget=(chan[i].volume>=chan[i].volSpeedTarget);
} else if (chan[i].volSpeed<0) {
atTarget=(chan[i].volume<=chan[i].volSpeedTarget);
} else {
atTarget=true;
chan[i].volSpeedTarget=chan[i].volume;
}
if (atTarget) {
chan[i].volume=chan[i].volSpeedTarget; chan[i].volume=chan[i].volSpeedTarget;
chan[i].volSpeed=0; chan[i].volSpeed=0;
chan[i].volSpeedTarget=-1; chan[i].volSpeedTarget=-1;
} }
}
if (chan[i].volume<0) { if (chan[i].volume<0) {
chan[i].volume=0; chan[i].volume=0;
} }

View file

@ -1631,14 +1631,27 @@ bool DivEngine::nextTick(bool noAccum, bool inhibitLowLat) {
if (chan[i].volSpeed!=0) { if (chan[i].volSpeed!=0) {
chan[i].volume=(chan[i].volume&0xff)|(dispatchCmd(DivCommand(DIV_CMD_GET_VOLUME,i))<<8); chan[i].volume=(chan[i].volume&0xff)|(dispatchCmd(DivCommand(DIV_CMD_GET_VOLUME,i))<<8);
chan[i].volume+=chan[i].volSpeed; chan[i].volume+=chan[i].volSpeed;
if (chan[i].volSpeedTarget!=-1 && (chan[i].volume==chan[i].volSpeedTarget || (chan[i].volume>chan[i].volSpeedTarget)==(chan[i].volSpeed>0))) { if (chan[i].volSpeedTarget!=-1) {
bool atTarget=false;
if (chan[i].volSpeed>0) {
atTarget=(chan[i].volume>=chan[i].volSpeedTarget);
} else if (chan[i].volSpeed<0) {
atTarget=(chan[i].volume<=chan[i].volSpeedTarget);
} else {
atTarget=true;
chan[i].volSpeedTarget=chan[i].volume;
}
if (atTarget) {
chan[i].volume=chan[i].volSpeedTarget; chan[i].volume=chan[i].volSpeedTarget;
chan[i].volSpeed=0; chan[i].volSpeed=0;
chan[i].volSpeedTarget=-1; chan[i].volSpeedTarget=-1;
dispatchCmd(DivCommand(DIV_CMD_HINT_VOLUME,i,chan[i].volume>>8)); dispatchCmd(DivCommand(DIV_CMD_HINT_VOLUME,i,chan[i].volume>>8));
dispatchCmd(DivCommand(DIV_CMD_VOLUME,i,chan[i].volume>>8)); dispatchCmd(DivCommand(DIV_CMD_VOLUME,i,chan[i].volume>>8));
dispatchCmd(DivCommand(DIV_CMD_HINT_VOL_SLIDE,i,0)); dispatchCmd(DivCommand(DIV_CMD_HINT_VOL_SLIDE,i,0));
} else if (chan[i].volume>chan[i].volMax) { }
}
if (chan[i].volume>chan[i].volMax) {
chan[i].volume=chan[i].volMax; chan[i].volume=chan[i].volMax;
chan[i].volSpeed=0; chan[i].volSpeed=0;
chan[i].volSpeedTarget=-1; chan[i].volSpeedTarget=-1;