Project

General

Profile

« Previous | Next » 

Revision 9ba7f3f6

Added by Leszek Koltunski over 1 year ago

Move scrambling to a new model where there are spearete scrambling 'algorithms' and 'edges' of the scrambling graph.
Now each edge can contain a whole algorithm, i.e. a sequence of moves leading from state to state, which permits construction of scrambling for more complicated bandaged objects such as the AI cube.

Unchecked as of yet, probably still a lot of bugs.

View differences:

src/main/java/org/distorted/objectlib/objects/TwistyPyraminx.java
25 25
import org.distorted.objectlib.touchcontrol.TouchControlTetrahedron;
26 26
import org.distorted.objectlib.main.ObjectType;
27 27
import org.distorted.objectlib.helpers.ObjectShape;
28
import org.distorted.objectlib.scrambling.ScrambleState;
29 28
import org.distorted.objectlib.shape.ShapeTetrahedron;
30 29

  
31 30
///////////////////////////////////////////////////////////////////////////////////////////////////
......
40 39
           new Static3D(-SQ6/3, SQ3/3,     0),
41 40
         };
42 41

  
43
  private ScrambleState[] mStates;
42
  private int[][] mEdges;
44 43
  private int[][] mBasicAngle;
45 44
  private float[][] mCuts;
46 45

  
......
53 52

  
54 53
///////////////////////////////////////////////////////////////////////////////////////////////////
55 54

  
56
  public ScrambleState[] getScrambleStates()
55
  public int[][] getScrambleEdges()
57 56
    {
58
    if( mStates==null )
57
    if( mEdges==null )
59 58
      {
60
      int[] numLayers = getNumLayers();
61
      initializeScrambleStates(numLayers[0]);
59
      int numLayers = getNumLayers()[0];
60
      mEdges = new int[numLayers][];
61
      for(int i=0; i<numLayers-1; i++) mEdges[i] = generateEdge(numLayers-1-i,numLayers);
62
      mEdges[numLayers-1] = generateEdge(numLayers-2,numLayers);
62 63
      }
63 64

  
64
    return mStates;
65
    return mEdges;
65 66
    }
66 67

  
67 68
///////////////////////////////////////////////////////////////////////////////////////////////////
68 69

  
69
  private int[][] generateState(int start, int end)
70
  private int[] generateEdge(int end, int numLayers)
70 71
    {
71
    int len = end-start+1;
72
    int[] tmp = new int[6*len];
72
    int[] ret = new int[8*end];
73 73

  
74
    for(int i=0; i<len; i++)
74
    for(int i=0; i<end; i++)
75 75
      {
76
      tmp[6*i  ] = start;
77
      tmp[6*i+1] = -1;
78
      tmp[6*i+2] = start;
79
      tmp[6*i+3] = start;
80
      tmp[6*i+4] =  1;
81
      tmp[6*i+5] = start;
82

  
83
      start++;
76
      int s = ((i/2)%numLayers);
77

  
78
      ret[      2*i  ] = i;
79
      ret[      2*i+1] = s;
80
      ret[  end+2*i  ] = i;
81
      ret[  end+2*i+1] = s;
82
      ret[2*end+2*i  ] = i;
83
      ret[2*end+2*i+1] = s;
84
      ret[3*end+2*i  ] = i;
85
      ret[3*end+2*i+1] = s;
84 86
      }
85 87

  
86
    return new int[][] {tmp,tmp,tmp,tmp};
87
    }
88

  
89
///////////////////////////////////////////////////////////////////////////////////////////////////
90

  
91
  private void initializeScrambleStates(int numLayers)
92
    {
93
    mStates = new ScrambleState[numLayers];
94

  
95
    for(int i=0; i<numLayers-1; i++)
96
      {
97
      mStates[i] = new ScrambleState( generateState(0,numLayers-1-i) );
98
      }
99

  
100
    mStates[numLayers-1] = new ScrambleState( generateState(1,numLayers-2) );
88
    return ret;
101 89
    }
102 90

  
103 91
///////////////////////////////////////////////////////////////////////////////////////////////////

Also available in: Unified diff