Revision c0254421
Added by Leszek Koltunski about 3 years ago
src/main/java/org/distorted/objects/TwistyBandagedEvil.java | ||
---|---|---|
21 | 21 |
|
22 | 22 |
import android.content.res.Resources; |
23 | 23 |
|
24 |
import org.distorted.bandaged.BandagedState; |
|
24 | 25 |
import org.distorted.library.main.DistortedEffects; |
25 | 26 |
import org.distorted.library.main.DistortedTexture; |
26 | 27 |
import org.distorted.library.mesh.MeshSquare; |
... | ... | |
33 | 34 |
|
34 | 35 |
class TwistyBandagedEvil extends TwistyBandagedAbstract |
35 | 36 |
{ |
37 |
private int mCurrState; |
|
38 |
private boolean mUseX; |
|
39 |
private boolean mUseY; |
|
40 |
private boolean mUseZ; |
|
41 |
|
|
42 |
// The list of all 'significant' states of the Evil Cube, just like in the 3Plate Cube class. |
|
43 |
// This time the list got computed automatically - by the BandagedStateGraph.computeGraph(). |
|
44 |
|
|
45 |
private final BandagedState[] mStates = new BandagedState[] |
|
46 |
{ |
|
47 |
new BandagedState( new int[] {2, 1, 1,2,-1, 2} , new int[] {2, 2,142,2,-1, 28} , new int[] {0, 1,114} ), |
|
48 |
new BandagedState( new int[] {2, 2, 2} , new int[] {2,-1,143} , null ), |
|
49 |
new BandagedState( new int[] {2, 2, 1} , null , new int[] {0, 1, 3,0, 2, 47} ), |
|
50 |
new BandagedState( new int[] {2, 1, 4} , new int[] {2, 1,132,2,-1,131} , new int[] {0, 1, 47,0,-1, 2} ), |
|
51 |
new BandagedState( new int[] {2,-1, 3} , new int[] {2, 1, 5,2,-1, 6} , null ), |
|
52 |
new BandagedState( null , new int[] {2, 2, 6,2,-1, 4} , new int[] {0, 1, 51} ), |
|
53 |
new BandagedState( null , new int[] {2, 1, 4,2, 2, 5} , new int[] {2, 2, 7,2,-1, 80} ), |
|
54 |
new BandagedState( new int[] {2, 2, 8} , null , new int[] {2, 1, 80,2, 2, 6} ), |
|
55 |
new BandagedState( new int[] {2, 2, 7} , null , new int[] {0,-1, 9} ), |
|
56 |
new BandagedState( new int[] {2, 1, 10,2, 2, 11,2,-1, 12}, null , new int[] {0, 1, 8} ), |
|
57 |
new BandagedState( new int[] {2, 1, 11,2, 2, 12,2,-1, 9}, null , new int[] {0,-1,118} ), |
|
58 |
new BandagedState( new int[] {2, 1, 12,2, 2, 9,2,-1, 10}, null , new int[] {2, 1, 77} ), |
|
59 |
new BandagedState( new int[] {2, 1, 9,2, 2, 10,2,-1, 11}, null , new int[] {2, 1, 13,2, 2,143} ), |
|
60 |
new BandagedState( new int[] {2, 1, 14,2, 2, 15,2,-1, 16}, new int[] {2, 1, 57,2,-1, 58} , new int[] {2, 1,143,2,-1, 12} ), |
|
61 |
new BandagedState( new int[] {2, 1, 15,2, 2, 16,2,-1, 13}, null , new int[] {2, 1, 41} ), |
|
62 |
new BandagedState( new int[] {2, 1, 16,2, 2, 13,2,-1, 14}, null , new int[] {0, 1, 82} ), |
|
63 |
new BandagedState( new int[] {2, 1, 13,2, 2, 14,2,-1, 15}, new int[] {2, 1, 17,2,-1, 18} , new int[] {0, 1,111,0,-1,115} ), |
|
64 |
new BandagedState( null , new int[] {2, 2, 18,2,-1, 16} , new int[] {0,-1,139} ), |
|
65 |
new BandagedState( new int[] {2, 1, 19,2,-1, 20} , new int[] {2, 1, 16,2, 2, 17} , new int[] {2, 1,142} ), |
|
66 |
new BandagedState( new int[] {2, 2, 20,2,-1, 18} , null , new int[] {2, 1, 39,2, 2,140} ), |
|
67 |
new BandagedState( new int[] {2, 1, 18,2, 2, 19} , new int[] {2, 1, 21} , null ), |
|
68 |
new BandagedState( null , new int[] {2,-1, 20} , new int[] {0,-1, 22} ), |
|
69 |
new BandagedState( new int[] {2, 2, 23,2,-1, 24} , null , new int[] {0, 1, 21} ), |
|
70 |
new BandagedState( new int[] {2, 1, 24,2, 2, 22} , null , new int[] {2, 1, 92} ), |
|
71 |
new BandagedState( new int[] {2, 1, 22,2,-1, 23} , null , new int[] {0, 1, 25} ), |
|
72 |
new BandagedState( new int[] {2, 1, 26,2, 2, 27} , null , new int[] {0,-1, 24} ), |
|
73 |
new BandagedState( new int[] {2, 1, 27,2,-1, 25} , new int[] {2, 1, 74} , null ), |
|
74 |
new BandagedState( new int[] {2, 2, 25,2,-1, 26} , null , new int[] {2, 1, 28,2, 2,124} ), |
|
75 |
new BandagedState( new int[] {2, 1, 29,2, 2, 30,2,-1, 31}, new int[] {2,-1,142} , new int[] {2, 1,124,2,-1, 27} ), |
|
76 |
new BandagedState( new int[] {2, 1, 30,2, 2, 31,2,-1, 28}, null , new int[] {2, 1,141} ), |
|
77 |
new BandagedState( new int[] {2, 1, 31,2, 2, 28,2,-1, 29}, null , new int[] {0, 1,130} ), |
|
78 |
new BandagedState( new int[] {2, 1, 28,2, 2, 29,2,-1, 30}, new int[] {2, 1, 32,2,-1, 33} , new int[] {0, 1, 89,0,-1, 90} ), |
|
79 |
new BandagedState( null , new int[] {2, 2, 33,2,-1, 31} , new int[] {0,-1,137} ), |
|
80 |
new BandagedState( new int[] {2, 1, 34} , new int[] {2, 1, 31,2, 2, 32} , null ), |
|
81 |
new BandagedState( new int[] {2,-1, 33} , null , new int[] {2, 1, 35} ), |
|
82 |
new BandagedState( null , new int[] {2,-1, 36} , new int[] {2,-1, 34} ), |
|
83 |
new BandagedState( null , new int[] {2, 1, 35} , new int[] {2,-1, 37} ), |
|
84 |
new BandagedState( null , new int[] {2, 1, 38,2, 2, 93} , new int[] {2, 1, 36} ), |
|
85 |
new BandagedState( new int[] {2, 1, 39} , new int[] {2, 1, 93,2,-1, 37} , null ), |
|
86 |
new BandagedState( new int[] {2,-1, 38} , new int[] {2, 1, 40,2,-1, 64} , new int[] {2, 1,140,2,-1, 19} ), |
|
87 |
new BandagedState( new int[] {2, 1, 41,2,-1, 42} , new int[] {2, 2, 64,2,-1, 39} , null ), |
|
88 |
new BandagedState( new int[] {2, 2, 42,2,-1, 40} , null , new int[] {2,-1, 14} ), |
|
89 |
new BandagedState( new int[] {2, 1, 40,2, 2, 41} , null , new int[] {0, 1, 43,0, 2,128} ), |
|
90 |
new BandagedState( new int[] {2, 1, 44,2,-1, 45} , new int[] {2, 1,114,2, 2,113,2,-1, 86}, new int[] {0, 1,128,0,-1, 42} ), |
|
91 |
new BandagedState( new int[] {2, 2, 45,2,-1, 43} , new int[] {2, 1, 48,2,-1,108} , new int[] {2,-1, 81} ), |
|
92 |
new BandagedState( new int[] {2, 1, 43,2, 2, 44} , null , new int[] {0, 1, 46} ), |
|
93 |
new BandagedState( null , new int[] {2, 1, 47} , new int[] {0,-1, 45} ), |
|
94 |
new BandagedState( null , new int[] {2,-1, 46} , new int[] {0, 2, 2,0,-1, 3} ), |
|
95 |
new BandagedState( new int[] {2,-1, 49} , new int[] {2, 2,108,2,-1, 44} , null ), |
|
96 |
new BandagedState( new int[] {2, 1, 48} , null , new int[] {0, 1, 50} ), |
|
97 |
new BandagedState( null , new int[] {2, 1, 51,2, 2, 52} , new int[] {0,-1, 49} ), |
|
98 |
new BandagedState( null , new int[] {2, 1, 52,2,-1, 50} , new int[] {0,-1, 5} ), |
|
99 |
new BandagedState( null , new int[] {2, 2, 50,2,-1, 51} , new int[] {2,-1, 53} ), |
|
100 |
new BandagedState( null , new int[] {2, 1, 54,2, 2, 55} , new int[] {2, 1, 52} ), |
|
101 |
new BandagedState( null , new int[] {2, 1, 55,2,-1, 53} , new int[] {0,-1,104} ), |
|
102 |
new BandagedState( null , new int[] {2, 2, 53,2,-1, 54} , new int[] {0, 2, 56,0,-1, 65} ), |
|
103 |
new BandagedState( new int[] {2, 1, 57} , null , new int[] {0, 1, 65,0, 2, 55} ), |
|
104 |
new BandagedState( new int[] {2,-1, 56} , new int[] {2, 2, 58,2,-1, 13} , null ), |
|
105 |
new BandagedState( null , new int[] {2, 1, 13,2, 2, 57} , new int[] {2,-1, 59} ), |
|
106 |
new BandagedState( new int[] {2, 1, 60} , null , new int[] {2, 1, 58} ), |
|
107 |
new BandagedState( new int[] {2,-1, 59} , null , new int[] {2, 1, 61} ), |
|
108 |
new BandagedState( new int[] {2,-1, 62} , null , new int[] {2,-1, 60} ), |
|
109 |
new BandagedState( new int[] {2, 1, 61} , new int[] {2,-1, 63} , null ), |
|
110 |
new BandagedState( null , new int[] {2, 1, 62} , new int[] {2, 1, 64} ), |
|
111 |
new BandagedState( null , new int[] {2, 1, 39,2, 2, 40} , new int[] {2,-1, 63} ), |
|
112 |
new BandagedState( new int[] {2, 1, 66,2,-1, 67} , new int[] {2, 1, 78,2, 2, 79,2,-1, 80}, new int[] {0, 1, 55,0,-1, 56} ), |
|
113 |
new BandagedState( new int[] {2, 2, 67,2,-1, 65} , new int[] {2,-1,107} , null ), |
|
114 |
new BandagedState( new int[] {2, 1, 65,2, 2, 66} , null , new int[] {0, 1, 68} ), |
|
115 |
new BandagedState( null , new int[] {2, 1, 69} , new int[] {0,-1, 67} ), |
|
116 |
new BandagedState( null , new int[] {2,-1, 68} , new int[] {0,-1, 70} ), |
|
117 |
new BandagedState( null , new int[] {2,-1, 71} , new int[] {0, 1, 69} ), |
|
118 |
new BandagedState( new int[] {2,-1, 72} , new int[] {2, 1, 70} , null ), |
|
119 |
new BandagedState( new int[] {2, 1, 71} , null , new int[] {0,-1, 73} ), |
|
120 |
new BandagedState( new int[] {2, 1, 74,2, 2, 75} , null , new int[] {0, 1, 72} ), |
|
121 |
new BandagedState( new int[] {2, 1, 75,2,-1, 73} , new int[] {2,-1, 26} , new int[] {0, 1, 83,0,-1,138} ), |
|
122 |
new BandagedState( new int[] {2, 2, 73,2,-1, 74} , new int[] {2, 1, 76,2,-1, 77} , null ), |
|
123 |
new BandagedState( null , new int[] {2, 2, 77,2,-1, 75} , new int[] {0, 1, 78} ), |
|
124 |
new BandagedState( null , new int[] {2, 1, 75,2, 2, 76} , new int[] {2,-1, 11} ), |
|
125 |
new BandagedState( null , new int[] {2, 1, 79,2, 2, 80,2,-1, 65}, new int[] {0,-1, 76} ), |
|
126 |
new BandagedState( null , new int[] {2, 1, 80,2, 2, 65,2,-1, 78}, new int[] {2,-1,110} ), |
|
127 |
new BandagedState( new int[] {2, 1, 81,2,-1, 82} , new int[] {2, 1, 65,2, 2, 78,2,-1, 79}, new int[] {2, 1, 6,2,-1, 7} ), |
|
128 |
new BandagedState( new int[] {2, 2, 82,2,-1, 80} , null , new int[] {2, 1, 44} ), |
|
129 |
new BandagedState( new int[] {2, 1, 80,2, 2, 81} , new int[] {2, 1, 83,2,-1, 84} , new int[] {0,-1, 15} ), |
|
130 |
new BandagedState( null , new int[] {2, 2, 84,2,-1, 82} , new int[] {0, 2,138,0,-1, 74} ), |
|
131 |
new BandagedState( new int[] {2, 1, 85} , new int[] {2, 1, 82,2, 2, 83} , null ), |
|
132 |
new BandagedState( new int[] {2,-1, 84} , null , new int[] {2, 1, 86,2, 2,119} ), |
|
133 |
new BandagedState( new int[] {2, 1, 87,2,-1, 88} , new int[] {2, 1, 43,2, 2,114,2,-1,113}, new int[] {2, 1,119,2,-1, 85} ), |
|
134 |
new BandagedState( new int[] {2, 2, 88,2,-1, 86} , null , new int[] {2, 1, 94} ), |
|
135 |
new BandagedState( new int[] {2, 1, 86,2, 2, 87} , new int[] {2, 1, 89} , null ), |
|
136 |
new BandagedState( null , new int[] {2,-1, 88} , new int[] {0, 2, 90,0,-1, 31} ), |
|
137 |
new BandagedState( new int[] {2, 1, 91,2, 2, 92} , null , new int[] {0, 1, 31,0, 2, 89} ), |
|
138 |
new BandagedState( new int[] {2, 1, 92,2,-1, 90} , null , new int[] {0, 1, 93} ), |
|
139 |
new BandagedState( new int[] {2, 2, 90,2,-1, 91} , null , new int[] {2,-1, 23} ), |
|
140 |
new BandagedState( null , new int[] {2, 2, 37,2,-1, 38} , new int[] {0,-1, 91} ), |
|
141 |
new BandagedState( null , new int[] {2,-1, 95} , new int[] {2,-1, 87} ), |
|
142 |
new BandagedState( null , new int[] {2, 1, 94} , new int[] {2,-1, 96} ), |
|
143 |
new BandagedState( null , new int[] {2, 1, 97} , new int[] {2, 1, 95} ), |
|
144 |
new BandagedState( new int[] {2, 1, 98} , new int[] {2,-1, 96} , null ), |
|
145 |
new BandagedState( new int[] {2,-1, 97} , null , new int[] {2,-1, 99} ), |
|
146 |
new BandagedState( new int[] {2, 2,100,2,-1,101} , null , new int[] {2, 1, 98} ), |
|
147 |
new BandagedState( new int[] {2, 1,101,2, 2, 99} , new int[] {2, 1,111,2,-1,112} , null ), |
|
148 |
new BandagedState( new int[] {2, 1, 99,2,-1,100} , new int[] {2, 1,102} , new int[] {2, 1,108,2,-1,109} ), |
|
149 |
new BandagedState( new int[] {2, 1,103,2,-1,104} , new int[] {2,-1,101} , null ), |
|
150 |
new BandagedState( new int[] {2, 2,104,2,-1,102} , null , new int[] {2,-1,105} ), |
|
151 |
new BandagedState( new int[] {2, 1,102,2, 2,103} , null , new int[] {0, 1, 54} ), |
|
152 |
new BandagedState( new int[] {2,-1,106} , null , new int[] {2, 1,103} ), |
|
153 |
new BandagedState( new int[] {2, 1,105} , null , new int[] {2, 1,107} ), |
|
154 |
new BandagedState( null , new int[] {2, 1, 66} , new int[] {2,-1,106} ), |
|
155 |
new BandagedState( null , new int[] {2, 1, 44,2, 2, 48} , new int[] {2, 2,109,2,-1,101} ), |
|
156 |
new BandagedState( new int[] {2,-1,110} , null , new int[] {2, 1,101,2, 2,108} ), |
|
157 |
new BandagedState( new int[] {2, 1,109} , null , new int[] {2, 1, 79} ), |
|
158 |
new BandagedState( null , new int[] {2, 2,112,2,-1,100} , new int[] {0, 2,115,0,-1, 16} ), |
|
159 |
new BandagedState( null , new int[] {2, 1,100,2, 2,111} , new int[] {2, 1,113} ), |
|
160 |
new BandagedState( null , new int[] {2, 1, 86,2, 2, 43,2,-1,114}, new int[] {2,-1,112} ), |
|
161 |
new BandagedState( null , new int[] {2, 1,113,2, 2, 86,2,-1, 43}, null ), |
|
162 |
new BandagedState( new int[] {2, 2,116} , null , new int[] {0, 1, 16,0, 2,111} ), |
|
163 |
new BandagedState( new int[] {2, 2,115} , null , new int[] {2,-1,117} ), |
|
164 |
new BandagedState( new int[] {2, 1,118} , null , new int[] {2, 1,116} ), |
|
165 |
new BandagedState( new int[] {2,-1,117} , null , new int[] {0, 1, 10} ), |
|
166 |
new BandagedState( null , new int[] {2, 1,120,2, 2,121,2,-1,122}, new int[] {2, 2, 85,2,-1, 86} ), |
|
167 |
new BandagedState( null , new int[] {2, 1,121,2, 2,122,2,-1,119}, new int[] {2,-1,129} ), |
|
168 |
new BandagedState( null , new int[] {2, 1,122,2, 2,119,2,-1,120}, new int[] {0, 1,125} ), |
|
169 |
new BandagedState( null , new int[] {2, 1,119,2, 2,120,2,-1,121}, new int[] {0,-1,123} ), |
|
170 |
new BandagedState( null , new int[] {2, 2,124} , new int[] {0, 1,122} ), |
|
171 |
new BandagedState( null , new int[] {2, 2,123} , new int[] {2, 2, 27,2,-1, 28} ), |
|
172 |
new BandagedState( null , new int[] {2, 1,126} , new int[] {0,-1,121} ), |
|
173 |
new BandagedState( null , new int[] {2,-1,125} , new int[] {2,-1,127} ), |
|
174 |
new BandagedState( null , new int[] {2, 2,128} , new int[] {2, 1,126} ), |
|
175 |
new BandagedState( null , new int[] {2, 2,127} , new int[] {0, 2, 42,0,-1, 43} ), |
|
176 |
new BandagedState( new int[] {2, 2,130,2,-1,131} , null , new int[] {2, 1,120} ), |
|
177 |
new BandagedState( new int[] {2, 1,131,2, 2,129} , null , new int[] {0,-1, 30} ), |
|
178 |
new BandagedState( new int[] {2, 1,129,2,-1,130} , new int[] {2, 1, 3,2, 2,132} , null ), |
|
179 |
new BandagedState( null , new int[] {2, 2,131,2,-1, 3} , new int[] {0,-1,133} ), |
|
180 |
new BandagedState( null , new int[] {2,-1,134} , new int[] {0, 1,132} ), |
|
181 |
new BandagedState( new int[] {2,-1,135} , new int[] {2, 1,133} , null ), |
|
182 |
new BandagedState( new int[] {2, 1,134} , null , new int[] {0,-1,136} ), |
|
183 |
new BandagedState( new int[] {2, 1,137} , null , new int[] {0, 1,135} ), |
|
184 |
new BandagedState( new int[] {2,-1,136} , null , new int[] {0, 1, 32} ), |
|
185 |
new BandagedState( new int[] {2, 1,139} , null , new int[] {0, 1, 74,0, 2, 83} ), |
|
186 |
new BandagedState( new int[] {2,-1,138} , null , new int[] {0, 1, 17} ), |
|
187 |
new BandagedState( null , new int[] {2, 1,141} , new int[] {2, 2, 19,2,-1, 39} ), |
|
188 |
new BandagedState( null , new int[] {2,-1,140} , new int[] {2,-1, 29} ), |
|
189 |
new BandagedState( null , new int[] {2, 1, 28} , new int[] {2,-1, 18} ), |
|
190 |
new BandagedState( null , new int[] {2, 1, 1} , new int[] {2, 2, 12,2,-1, 13} ) |
|
191 |
}; |
|
192 |
|
|
193 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
194 |
|
|
36 | 195 |
private static final float[][] POSITIONS = new float[][] |
37 | 196 |
{ |
38 | 197 |
{ 1.0f, 1.0f, -1.0f}, |
... | ... | |
77 | 236 |
|
78 | 237 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
79 | 238 |
// PUBLIC API |
80 |
// TODO |
|
81 | 239 |
|
82 | 240 |
public void randomizeNewScramble(int[][] scramble, Random rnd, int num) |
83 | 241 |
{ |
84 | 242 |
if( num==0 ) |
85 | 243 |
{ |
86 |
scramble[num][0] = rnd.nextInt(ROTATION_AXIS.length); |
|
87 |
} |
|
88 |
else |
|
89 |
{ |
|
90 |
int newVector = rnd.nextInt(ROTATION_AXIS.length-1); |
|
91 |
scramble[num][0] = (newVector>=scramble[num-1][0] ? newVector+1 : newVector); |
|
244 |
mCurrState = 0; |
|
245 |
mUseX = true; |
|
246 |
mUseY = true; |
|
247 |
mUseZ = true; |
|
92 | 248 |
} |
93 | 249 |
|
94 |
float rowFloat = rnd.nextFloat(); |
|
250 |
int total = mStates[mCurrState].getTotal(mUseX,mUseY,mUseZ); |
|
251 |
int random= rnd.nextInt(total); |
|
252 |
int[] info= mStates[mCurrState].getInfo(random,mUseX,mUseY,mUseZ); |
|
95 | 253 |
|
96 |
for(int row=0; row<mRowChances.length; row++) |
|
97 |
{ |
|
98 |
if( rowFloat<=mRowChances[row] ) |
|
99 |
{ |
|
100 |
scramble[num][1] = row; |
|
101 |
break; |
|
102 |
} |
|
103 |
} |
|
254 |
scramble[num][0] = info[0]; |
|
255 |
scramble[num][1] = info[1]; |
|
256 |
scramble[num][2] = info[2]; |
|
104 | 257 |
|
105 |
switch( rnd.nextInt(4) ) |
|
258 |
mCurrState = info[3]; |
|
259 |
|
|
260 |
switch(info[0]) |
|
106 | 261 |
{ |
107 |
case 0: scramble[num][2] = -2; break; |
|
108 |
case 1: scramble[num][2] = -1; break; |
|
109 |
case 2: scramble[num][2] = 1; break; |
|
110 |
case 3: scramble[num][2] = 2; break; |
|
262 |
case 0: mUseX = false; mUseY = true ; mUseZ = true ; break; |
|
263 |
case 1: mUseX = true ; mUseY = false; mUseZ = true ; break; |
|
264 |
case 2: mUseX = true ; mUseY = true ; mUseZ = false; break; |
|
111 | 265 |
} |
266 |
|
|
267 |
//android.util.Log.e("D", (info[0]==0 ? "X" : (info[0]==1 ? "Y" : "Z")) + info[2] +" --> "+info[3]); |
|
112 | 268 |
} |
113 | 269 |
|
114 | 270 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
Also available in: Unified diff
Automatic scrambling of the Evil Cube works!