// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // Gives CubieCube representation of a faceletcube CubieCube toCubieCube() { byte ori; CubieCube ccRet = new CubieCube(); for (int i = 0; i < 8; i++) ccRet.cp[i] = URF; // invalidate corners for (int i = 0; i < 12; i++) ccRet.ep[i] = UR; // and edges Color col1, col2; for (Corner i : Corner.values()) { // get the colors of the cubie at corner i, starting with U/D for (ori = 0; ori < 3; ori++) if (f[cornerFacelet[i.ordinal()][ori].ordinal()] == U || f[cornerFacelet[i.ordinal()][ori].ordinal()] == D) break; col1 = f[cornerFacelet[i.ordinal()][(ori + 1) % 3].ordinal()]; col2 = f[cornerFacelet[i.ordinal()][(ori + 2) % 3].ordinal()]; for (Corner j : Corner.values()) { if (col1 == cornerColor[j.ordinal()][1] && col2 == cornerColor[j.ordinal()][2]) { // in cornerposition i we have cornercubie j ccRet.cp[i.ordinal()] = j; ccRet.co[i.ordinal()] = (byte) (ori % 3); break; } } } for (Edge i : Edge.values()) for (Edge j : Edge.values()) { if (f[edgeFacelet[i.ordinal()][0].ordinal()] == edgeColor[j.ordinal()][0] && f[edgeFacelet[i.ordinal()][1].ordinal()] == edgeColor[j.ordinal()][1]) { ccRet.ep[i.ordinal()] = j; ccRet.eo[i.ordinal()] = 0; break; } if (f[edgeFacelet[i.ordinal()][0].ordinal()] == edgeColor[j.ordinal()][1] && f[edgeFacelet[i.ordinal()][1].ordinal()] == edgeColor[j.ordinal()][0]) { ccRet.ep[i.ordinal()] = j; ccRet.eo[i.ordinal()] = 1; break; } } return ccRet; };