Project

General

Profile

Download (3.57 KB) Statistics
| Branch: | Revision:

distorted-objectlib / src / main / java / org / distorted / objectlib / scrambling / ScrambleEdgeGenerator.java @ 9ba7f3f6

1
///////////////////////////////////////////////////////////////////////////////////////////////////
2
// Copyright 2021 Leszek Koltunski                                                               //
3
//                                                                                               //
4
// This file is part of Magic Cube.                                                              //
5
//                                                                                               //
6
// Magic Cube is proprietary software licensed under an EULA which you should have received      //
7
// along with the code. If not, check https://distorted.org/magic/License-Magic-Cube.html        //
8
///////////////////////////////////////////////////////////////////////////////////////////////////
9

    
10
package org.distorted.objectlib.scrambling;
11

    
12
///////////////////////////////////////////////////////////////////////////////////////////////////
13

    
14
public class ScrambleEdgeGenerator
15
  {
16
  private static void insertSection(int[] table, int startIndex, int size, int startAlg, int state)
17
    {
18
    int num = size/2;
19

    
20
    for(int i=0; i<num; i++)
21
      {
22
      table[2*(i+startIndex)  ] = startAlg +i;
23

    
24
      android.util.Log.e("D", " "+(2*(i+startIndex))+" : "+(startAlg+i));
25

    
26
      table[2*(i+startIndex)+1] = state;
27

    
28
      android.util.Log.e("D", " "+(2*(i+startIndex)+1)+" : "+(state));
29
      }
30
    }
31

    
32
///////////////////////////////////////////////////////////////////////////////////////////////////
33

    
34
  private static int[] createEdge(int sizeX, int sizeY, int sizeZ, int stateX, int stateY, int stateZ)
35
    {
36
    android.util.Log.e("D", "creating edge");
37

    
38
    int num = 0;
39
    int consX = ((sizeY!=sizeZ) ? 2:6)*sizeX;
40
    int consY = ((sizeX!=sizeZ) ? 2:6)*sizeY;
41
    int consZ = ((sizeX!=sizeY) ? 2:6)*sizeZ;
42
    if( stateX>=0 ) num += consX;
43
    if( stateY>=0 ) num += consY;
44
    if( stateZ>=0 ) num += consZ;
45

    
46
    int[] ret = new int[num];
47
    int index = 0;
48
    int algor = 0;
49
    if( stateX>=0 ) { insertSection(ret,index,consX,algor,stateX); index += consX/2; }
50
    algor += consX/2;
51
    if( stateY>=0 ) { insertSection(ret,index,consY,algor,stateY); index += consY/2; }
52
    algor += consY/2;
53
    if( stateZ>=0 ) { insertSection(ret,index,consZ,algor,stateZ);                   }
54

    
55
    return ret;
56
    }
57

    
58
///////////////////////////////////////////////////////////////////////////////////////////////////
59

    
60
  public static int[][] getScrambleEdgesCuboid(int X, int Y, int Z)
61
    {
62
    return new int[][]
63
      {
64
      createEdge(X,Y,Z, 1, 2, 3), // 0 0
65
      createEdge(X,Y,Z,-1, 4, 5), // 1 x
66
      createEdge(X,Y,Z, 6,-1, 7), // 2 y
67
      createEdge(X,Y,Z, 8, 9,-1), // 3 z
68
      createEdge(X,Y,Z,10,-1, 7), // 4 xy
69
      createEdge(X,Y,Z,11, 9,-1), // 5 xz
70
      createEdge(X,Y,Z,-1,12, 5), // 6 yx
71
      createEdge(X,Y,Z, 8,13,-1), // 7 yz
72
      createEdge(X,Y,Z,-1, 4,14), // 8 zx
73
      createEdge(X,Y,Z, 6,-1,15), // 9 zy
74
      createEdge(X,Y,Z,-1,-1, 5), // 10 xyx
75
      createEdge(X,Y,Z,-1, 4,-1), // 11 xzx
76
      createEdge(X,Y,Z,-1,-1, 7), // 12 yxy
77
      createEdge(X,Y,Z, 6,-1,-1), // 13 yzy
78
      createEdge(X,Y,Z,-1, 9,-1), // 14 zxz
79
      createEdge(X,Y,Z, 8,-1,-1), // 15 zyz
80
      };
81
    }
82

    
83
///////////////////////////////////////////////////////////////////////////////////////////////////
84

    
85
  public static int[][] getScrambleEdgesSingle(int[][] basicAngle)
86
    {
87
    int size=0;
88

    
89
    for (int[] basic : basicAngle)
90
      for (int i : basic) size += (i-1);
91

    
92
    int[] edge = new int[2*size];
93
    for(int i=0; i<size; i++)
94
      {
95
      edge[2*i  ] = i;
96
      edge[2*i+1] = 0;
97
      }
98

    
99
    return new int[][] { edge };
100
    }
101
  }
(3-3/7)