cornerMultiply method
Implementation
Cube cornerMultiply(Cube b) {
final cp = List.filled(Corner.count, Corner.upRightFront);
final co = List.filled(Corner.count, 0);
for (var corner = 0; corner < Corner.count; corner++) {
cp[corner] = _cp[b._cp[corner].index];
final oriA = _co[b._cp[corner].index];
final oriB = b._co[corner];
var ori = 0;
// if both cubes are regular cubes...
if (oriA < 3 && oriB < 3) {
// just do an addition modulo 3 here.
ori = oriA + oriB;
// the composition is a regular cube.
if (ori >= 3) {
ori -= 3;
}
}
// if cube b is a mirrored.
else if (oriA < 3 && oriB >= 3) {
ori = oriA + oriB;
// the composition is a mirrored cube.
if (ori >= 6) {
ori -= 3;
}
}
// if cube a is a mirrored.
else if (oriA >= 3 && oriB < 3) {
ori = oriA - oriB;
// the composition is a mirrored cube.
if (ori < 3) {
ori += 3;
}
}
// if both cubes are in mirrored.
else if (oriA >= 3 && oriB >= 3) {
ori = oriA - oriB;
// the composition is a regular cube.
if (ori < 0) {
ori += 3;
}
}
co[corner] = ori;
}
return Cube._(cp: cp, co: co, ep: _ep, eo: _eo);
}