parent
2abcea118c
commit
f3c3d82e4d
|
@ -1140,7 +1140,7 @@ void DivEngine::swapChannels(int src, int dest) {
|
||||||
String prevChanName=curSubSong->chanName[src];
|
String prevChanName=curSubSong->chanName[src];
|
||||||
String prevChanShortName=curSubSong->chanShortName[src];
|
String prevChanShortName=curSubSong->chanShortName[src];
|
||||||
bool prevChanShow=curSubSong->chanShow[src];
|
bool prevChanShow=curSubSong->chanShow[src];
|
||||||
bool prevChanCollapse=curSubSong->chanCollapse[src];
|
unsigned char prevChanCollapse=curSubSong->chanCollapse[src];
|
||||||
|
|
||||||
curSubSong->chanName[src]=curSubSong->chanName[dest];
|
curSubSong->chanName[src]=curSubSong->chanName[dest];
|
||||||
curSubSong->chanShortName[src]=curSubSong->chanShortName[dest];
|
curSubSong->chanShortName[src]=curSubSong->chanShortName[dest];
|
||||||
|
@ -1445,25 +1445,44 @@ bool DivEngine::swapSystem(int src, int dest, bool preserveOrder) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// swap channels
|
||||||
logV("swap list:");
|
logV("swap list:");
|
||||||
for (int i=0; i<tchans; i++) {
|
for (int i=0; i<tchans; i++) {
|
||||||
logV("- %d -> %d",unswappedChannels[i],swappedChannels[i]);
|
logV("- %d -> %d",unswappedChannels[i],swappedChannels[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
// swap channels
|
for (size_t i=0; i<song.subsong.size(); i++) {
|
||||||
bool allComplete=false;
|
DivOrders prevOrders=song.subsong[i]->orders;
|
||||||
while (!allComplete) {
|
DivPattern* prevPat[DIV_MAX_CHANS][256];
|
||||||
logD("doing swap...");
|
unsigned char prevEffectCols[DIV_MAX_CHANS];
|
||||||
allComplete=true;
|
String prevChanName[DIV_MAX_CHANS];
|
||||||
for (int i=0; i<tchans; i++) {
|
String prevChanShortName[DIV_MAX_CHANS];
|
||||||
if (unswappedChannels[i]!=swappedChannels[i]) {
|
bool prevChanShow[DIV_MAX_CHANS];
|
||||||
swapChannels(i,swappedChannels[i]);
|
unsigned char prevChanCollapse[DIV_MAX_CHANS];
|
||||||
allComplete=false;
|
|
||||||
logD("> %d -> %d",unswappedChannels[i],unswappedChannels[swappedChannels[i]]);
|
for (int j=0; j<tchans; j++) {
|
||||||
unswappedChannels[i]^=unswappedChannels[swappedChannels[i]];
|
for (int k=0; k<256; k++) {
|
||||||
unswappedChannels[swappedChannels[i]]^=unswappedChannels[i];
|
prevPat[j][k]=song.subsong[i]->pat[j].data[k];
|
||||||
unswappedChannels[i]^=unswappedChannels[swappedChannels[i]];
|
|
||||||
}
|
}
|
||||||
|
prevEffectCols[j]=song.subsong[i]->pat[j].effectCols;
|
||||||
|
|
||||||
|
prevChanName[j]=song.subsong[i]->chanName[j];
|
||||||
|
prevChanShortName[j]=song.subsong[i]->chanShortName[j];
|
||||||
|
prevChanShow[j]=song.subsong[i]->chanShow[j];
|
||||||
|
prevChanCollapse[j]=song.subsong[i]->chanCollapse[j];
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int j=0; j<tchans; j++) {
|
||||||
|
for (int k=0; k<256; k++) {
|
||||||
|
song.subsong[i]->orders.ord[j][k]=prevOrders.ord[swappedChannels[j]][k];
|
||||||
|
song.subsong[i]->pat[j].data[k]=prevPat[swappedChannels[j]][k];
|
||||||
|
}
|
||||||
|
|
||||||
|
song.subsong[i]->pat[j].effectCols=prevEffectCols[swappedChannels[j]];
|
||||||
|
song.subsong[i]->chanName[j]=prevChanName[swappedChannels[j]];
|
||||||
|
song.subsong[i]->chanShortName[j]=prevChanShortName[swappedChannels[j]];
|
||||||
|
song.subsong[i]->chanShow[j]=prevChanShow[swappedChannels[j]];
|
||||||
|
song.subsong[i]->chanCollapse[j]=prevChanCollapse[swappedChannels[j]];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue