Project

General

Profile

Download (14.8 KB) Statistics
| Branch: | Tag: | Revision:

magiccube / src / main / java / org / distorted / patterns / RubikPattern.java @ 48145a5b

1 d18993ac Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
2
// Copyright 2020 Leszek Koltunski                                                               //
3
//                                                                                               //
4
// This file is part of Magic Cube.                                                              //
5
//                                                                                               //
6
// Magic Cube is free software: you can redistribute it and/or modify                            //
7
// it under the terms of the GNU General Public License as published by                          //
8
// the Free Software Foundation, either version 2 of the License, or                             //
9
// (at your option) any later version.                                                           //
10
//                                                                                               //
11
// Magic Cube is distributed in the hope that it will be useful,                                 //
12
// but WITHOUT ANY WARRANTY; without even the implied warranty of                                //
13
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the                                 //
14
// GNU General Public License for more details.                                                  //
15
//                                                                                               //
16
// You should have received a copy of the GNU General Public License                             //
17
// along with Magic Cube.  If not, see <http://www.gnu.org/licenses/>.                           //
18
///////////////////////////////////////////////////////////////////////////////////////////////////
19
20
package org.distorted.patterns;
21
22 8becce57 Leszek Koltunski
import org.distorted.magic.RubikPostRender;
23 aa171dee Leszek Koltunski
import org.distorted.object.RubikObject;
24
25 48145a5b Leszek Koltunski
import java.util.ArrayList;
26
import java.util.List;
27 d18993ac Leszek Koltunski
28
///////////////////////////////////////////////////////////////////////////////////////////////////
29
30
public class RubikPattern
31
{
32 c6bd472b Leszek Koltunski
  private static final int DURATION_MILLIS = 800;
33 8becce57 Leszek Koltunski
34 53f23b64 Leszek Koltunski
  public static final int MIN_CUBE  = 2;
35
  public static final int MAX_CUBE  = 5;
36
  public static final int NUM_CUBES = MAX_CUBE-MIN_CUBE+1;
37 d18993ac Leszek Koltunski
38 044529c1 Leszek Koltunski
  private int[] numCategories   = new int[NUM_CUBES];
39
  private int[] currentCategory = new int[NUM_CUBES];
40 c715128d Leszek Koltunski
  private int[] currentScrollPos= new int[NUM_CUBES];
41
42 48145a5b Leszek Koltunski
  private List<List<Category>> mCategories;
43 4f470e00 Leszek Koltunski
  private static RubikPattern mThis;
44
45 d18993ac Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
46
47 3a9d19ed Leszek Koltunski
  private static class Category
48 d18993ac Leszek Koltunski
    {
49 48145a5b Leszek Koltunski
    private String[] mLines;
50 3a9d19ed Leszek Koltunski
    private int numPatterns;
51 48145a5b Leszek Koltunski
    private ArrayList<Pattern> mPatterns;
52
    private boolean mInitialized;
53 3a9d19ed Leszek Koltunski
54
  /////////////////////////////////////////////////////////////
55 d18993ac Leszek Koltunski
56 48145a5b Leszek Koltunski
    Category(String[] lines)
57 d18993ac Leszek Koltunski
      {
58 48145a5b Leszek Koltunski
      mLines=lines;
59
      numPatterns=lines.length-1;
60
      mPatterns = new ArrayList<>();
61
      mInitialized = false;
62 d18993ac Leszek Koltunski
      }
63 3a9d19ed Leszek Koltunski
64
  /////////////////////////////////////////////////////////////
65
66 48145a5b Leszek Koltunski
    void initialize()
67 d18993ac Leszek Koltunski
      {
68 48145a5b Leszek Koltunski
      int colon;
69
      String moves, name;
70
      Pattern pattern;
71
72
      for(int i=0; i<numPatterns; i++)
73
        {
74
        colon = mLines[i+1].indexOf(":");
75
76
        if( colon!=-1 )
77
          {
78
          moves   = mLines[i+1].substring(colon+1);
79
          name    = mLines[i+1].substring(0,colon);
80
          pattern = new Pattern(name,moves);
81
82
          mPatterns.add(pattern);
83
          }
84
        else
85
          {
86
          numPatterns--;
87
          }
88
        }
89
90
      mInitialized = true;
91 d18993ac Leszek Koltunski
      }
92 3a9d19ed Leszek Koltunski
93
  /////////////////////////////////////////////////////////////
94
95 4f470e00 Leszek Koltunski
    int getNumPatterns()
96 48145a5b Leszek Koltunski
      {
97
      return numPatterns;
98
      }
99 3a9d19ed Leszek Koltunski
100
  /////////////////////////////////////////////////////////////
101
102 4f470e00 Leszek Koltunski
    String getName()
103 48145a5b Leszek Koltunski
      {
104
      return mLines[0];
105
      }
106 3a9d19ed Leszek Koltunski
107
  /////////////////////////////////////////////////////////////
108
109
    String getPatternName(int pattern)
110 d18993ac Leszek Koltunski
      {
111 48145a5b Leszek Koltunski
      if( !mInitialized ) initialize();
112
113 3a9d19ed Leszek Koltunski
      if( pattern>=0 && pattern<numPatterns )
114
        {
115 48145a5b Leszek Koltunski
        Pattern p = mPatterns.get(pattern);
116 3a9d19ed Leszek Koltunski
        return  p!=null ? p.getName():"";
117
        }
118 48145a5b Leszek Koltunski
119 3a9d19ed Leszek Koltunski
      return "";
120 d18993ac Leszek Koltunski
      }
121 3a9d19ed Leszek Koltunski
122
  /////////////////////////////////////////////////////////////
123
124
    int getPatternCurMove(int pattern)
125 d18993ac Leszek Koltunski
      {
126 48145a5b Leszek Koltunski
      if( !mInitialized ) initialize();
127
128 3a9d19ed Leszek Koltunski
      if( pattern>=0 && pattern<numPatterns )
129
        {
130 48145a5b Leszek Koltunski
        Pattern p = mPatterns.get(pattern);
131 3a9d19ed Leszek Koltunski
        return  p!=null ? p.getCurMove():-1;
132
        }
133 48145a5b Leszek Koltunski
134 3a9d19ed Leszek Koltunski
      return -1;
135 d18993ac Leszek Koltunski
      }
136 3a9d19ed Leszek Koltunski
137
  /////////////////////////////////////////////////////////////
138
139
    int getPatternNumMove(int pattern)
140 d18993ac Leszek Koltunski
      {
141 48145a5b Leszek Koltunski
      if( !mInitialized ) initialize();
142
143 3a9d19ed Leszek Koltunski
      if( pattern>=0 && pattern<numPatterns )
144
        {
145 48145a5b Leszek Koltunski
        Pattern p = mPatterns.get(pattern);
146 3a9d19ed Leszek Koltunski
        return  p!=null ? p.getNumMove():-1;
147
        }
148 48145a5b Leszek Koltunski
149 3a9d19ed Leszek Koltunski
      return -1;
150 d18993ac Leszek Koltunski
      }
151 3a9d19ed Leszek Koltunski
152
  /////////////////////////////////////////////////////////////
153
154 8becce57 Leszek Koltunski
    void makeMove(RubikPostRender post, int pattern)
155 d18993ac Leszek Koltunski
      {
156 48145a5b Leszek Koltunski
      if( !mInitialized ) initialize();
157
158 3a9d19ed Leszek Koltunski
      if( pattern>=0 && pattern<numPatterns )
159
        {
160 48145a5b Leszek Koltunski
        Pattern p = mPatterns.get(pattern);
161 8becce57 Leszek Koltunski
        if( p!=null ) p.makeMove(post);
162 3a9d19ed Leszek Koltunski
        }
163 d18993ac Leszek Koltunski
      }
164 3a9d19ed Leszek Koltunski
165
  /////////////////////////////////////////////////////////////
166
167 8becce57 Leszek Koltunski
    void backMove(RubikPostRender post, int pattern)
168 d18993ac Leszek Koltunski
      {
169 48145a5b Leszek Koltunski
      if( !mInitialized ) initialize();
170
171 3a9d19ed Leszek Koltunski
      if( pattern>=0 && pattern<numPatterns )
172
        {
173 48145a5b Leszek Koltunski
        Pattern p = mPatterns.get(pattern);
174 8becce57 Leszek Koltunski
        if( p!=null ) p.backMove(post);
175 3a9d19ed Leszek Koltunski
        }
176 d18993ac Leszek Koltunski
      }
177 3a9d19ed Leszek Koltunski
178
  /////////////////////////////////////////////////////////////
179
180 c715128d Leszek Koltunski
    int[][] reInitialize(int pattern)
181 d18993ac Leszek Koltunski
      {
182 48145a5b Leszek Koltunski
      if( !mInitialized ) initialize();
183
184 3a9d19ed Leszek Koltunski
      if( pattern>=0 && pattern<numPatterns )
185
        {
186 48145a5b Leszek Koltunski
        Pattern p = mPatterns.get(pattern);
187 c715128d Leszek Koltunski
        if( p!=null ) return p.reInitialize();
188 3a9d19ed Leszek Koltunski
        }
189
190 a31d25de Leszek Koltunski
      return null;
191 d18993ac Leszek Koltunski
      }
192
    }
193
194
///////////////////////////////////////////////////////////////////////////////////////////////////
195
196 8becce57 Leszek Koltunski
  private static class Pattern implements RubikPostRender.ActionFinishedListener
197 d18993ac Leszek Koltunski
    {
198 6f2a942e Leszek Koltunski
    private String nameStr, moveStr;
199 a31d25de Leszek Koltunski
    private int[][] moves;
200 39566863 Leszek Koltunski
    private int curMove;
201
    private int numMove;
202 8becce57 Leszek Koltunski
    private boolean mCanRotate;
203 6f2a942e Leszek Koltunski
    private boolean mInitialized;
204 8becce57 Leszek Koltunski
205 3a9d19ed Leszek Koltunski
  /////////////////////////////////////////////////////////////
206
207 4f470e00 Leszek Koltunski
    Pattern(String n, String m)
208 d18993ac Leszek Koltunski
      {
209 6f2a942e Leszek Koltunski
      nameStr = n;
210
      moveStr = m;
211
      mCanRotate   = true;
212
      mInitialized = false;
213 d18993ac Leszek Koltunski
      }
214 3a9d19ed Leszek Koltunski
215 a31d25de Leszek Koltunski
  /////////////////////////////////////////////////////////////
216
217 48145a5b Leszek Koltunski
    private void initialize()
218 a31d25de Leszek Koltunski
      {
219 48145a5b Leszek Koltunski
      numMove = moveStr.length()/4;
220
      moves   = new int[numMove][3];
221
      curMove = numMove;
222 a31d25de Leszek Koltunski
223
      int digit0, digit1, digit2;
224
225
      for(int i=0; i<numMove; i++)
226
        {
227 48145a5b Leszek Koltunski
        digit0 = moveStr.charAt(4*i+1)-'0';
228
        digit1 = moveStr.charAt(4*i+2)-'0';
229
        digit2 = moveStr.charAt(4*i+3)-'0';
230 a31d25de Leszek Koltunski
231 48145a5b Leszek Koltunski
        moves[i][0] = (10*digit0+digit1)/32;
232
        moves[i][1] = (10*digit0+digit1)%32;
233
        moves[i][2] = 2-digit2;
234 a31d25de Leszek Koltunski
        }
235
236 48145a5b Leszek Koltunski
      moveStr = null;
237
      mInitialized = true;
238 a31d25de Leszek Koltunski
      }
239
240 3a9d19ed Leszek Koltunski
  /////////////////////////////////////////////////////////////
241
242
    String getName()
243 d18993ac Leszek Koltunski
      {
244 6f2a942e Leszek Koltunski
      return nameStr;
245 d18993ac Leszek Koltunski
      }
246 3a9d19ed Leszek Koltunski
247
  /////////////////////////////////////////////////////////////
248
249 4f470e00 Leszek Koltunski
    int getNumMove()
250 8becce57 Leszek Koltunski
      {
251 48145a5b Leszek Koltunski
      if( !mInitialized ) initialize();
252 6f2a942e Leszek Koltunski
253 8becce57 Leszek Koltunski
      return numMove;
254
      }
255 3a9d19ed Leszek Koltunski
256
  /////////////////////////////////////////////////////////////
257
258 4f470e00 Leszek Koltunski
    int getCurMove()
259 8becce57 Leszek Koltunski
      {
260 48145a5b Leszek Koltunski
      if( !mInitialized ) initialize();
261 6f2a942e Leszek Koltunski
262 8becce57 Leszek Koltunski
      return curMove;
263
      }
264 3a9d19ed Leszek Koltunski
265
  /////////////////////////////////////////////////////////////
266
267 8becce57 Leszek Koltunski
    void makeMove(RubikPostRender post)
268 d18993ac Leszek Koltunski
      {
269 48145a5b Leszek Koltunski
      if( !mInitialized ) initialize();
270 6f2a942e Leszek Koltunski
271 39566863 Leszek Koltunski
      curMove++;
272 8becce57 Leszek Koltunski
      RubikObject object = post.getObject();
273 3a9d19ed Leszek Koltunski
274 d12bb11b Leszek Koltunski
      if( mCanRotate )
275 d18993ac Leszek Koltunski
        {
276 d12bb11b Leszek Koltunski
        if( curMove>numMove )
277
          {
278
          curMove= 0;
279
          post.initializeObject(null);
280
          }
281
        else
282 aa171dee Leszek Koltunski
          {
283 a31d25de Leszek Koltunski
          int axis     =moves[curMove-1][0];
284
		      int rowBitmap=moves[curMove-1][1];
285
		      int bareAngle=moves[curMove-1][2];
286
          int angle    = bareAngle*(360/object.getBasicAngle());
287
          int numRot   = Math.abs(bareAngle);
288 8becce57 Leszek Koltunski
289 c0495b7d Leszek Koltunski
          if( angle!=0 )
290
            {
291
            mCanRotate = false;
292
            post.addRotation(this, axis, rowBitmap, angle, numRot*DURATION_MILLIS);
293
            }
294
          else
295
            {
296
            android.util.Log.e("pattern", "error: pattern "+nameStr+" move "+(curMove-1)+" angle 0");
297
            }
298 8becce57 Leszek Koltunski
          }
299 d12bb11b Leszek Koltunski
        }
300
      else
301
        {
302
        android.util.Log.e("pattern", "failed to make Move!");
303
        curMove--;
304 d18993ac Leszek Koltunski
        }
305
      }
306 3a9d19ed Leszek Koltunski
307
  /////////////////////////////////////////////////////////////
308
309 8becce57 Leszek Koltunski
    void backMove(RubikPostRender post)
310 d18993ac Leszek Koltunski
      {
311 48145a5b Leszek Koltunski
      if( !mInitialized ) initialize();
312 6f2a942e Leszek Koltunski
313 39566863 Leszek Koltunski
      curMove--;
314 8becce57 Leszek Koltunski
      RubikObject object = post.getObject();
315 3a9d19ed Leszek Koltunski
316 d12bb11b Leszek Koltunski
      if( mCanRotate )
317 d18993ac Leszek Koltunski
        {
318 d12bb11b Leszek Koltunski
        if( curMove<0 )
319
          {
320
          curMove=numMove;
321
          post.initializeObject(moves);
322
          }
323
        else
324 aa171dee Leszek Koltunski
          {
325 a31d25de Leszek Koltunski
          int axis     =moves[curMove][0];
326
		      int rowBitmap=moves[curMove][1];
327
		      int bareAngle=moves[curMove][2];
328
          int angle    = bareAngle*(360/object.getBasicAngle());
329
          int numRot   = Math.abs(bareAngle);
330 8becce57 Leszek Koltunski
331 c0495b7d Leszek Koltunski
          if( angle!=0 )
332
            {
333
            mCanRotate = false;
334
            post.addRotation(this, axis, rowBitmap, -angle, numRot*DURATION_MILLIS);
335
            }
336
          else
337
            {
338
            android.util.Log.e("pattern", "error: pattern "+nameStr+" move "+curMove+" angle 0");
339
            }
340 8becce57 Leszek Koltunski
          }
341 d12bb11b Leszek Koltunski
        }
342
      else
343
        {
344
        android.util.Log.e("pattern", "failed to back Move!");
345
        curMove++;
346 d18993ac Leszek Koltunski
        }
347
      }
348 3a9d19ed Leszek Koltunski
349
  /////////////////////////////////////////////////////////////
350
351 c715128d Leszek Koltunski
    int[][] reInitialize()
352 d18993ac Leszek Koltunski
      {
353 48145a5b Leszek Koltunski
      if( !mInitialized ) initialize();
354 6f2a942e Leszek Koltunski
355 c715128d Leszek Koltunski
      mCanRotate = true;
356 6f2a942e Leszek Koltunski
      curMove = numMove;
357 a31d25de Leszek Koltunski
      return moves;
358 d18993ac Leszek Koltunski
      }
359 8becce57 Leszek Koltunski
360
  /////////////////////////////////////////////////////////////
361
362
    public void onActionFinished(final long effectID)
363
      {
364
      mCanRotate = true;
365
      }
366 d18993ac Leszek Koltunski
    }
367
368
///////////////////////////////////////////////////////////////////////////////////////////////////
369
370 4f470e00 Leszek Koltunski
  private RubikPattern()
371 d18993ac Leszek Koltunski
    {
372 48145a5b Leszek Koltunski
    mCategories = new ArrayList<>();
373 4f470e00 Leszek Koltunski
374 48145a5b Leszek Koltunski
    initializeCategories(0, RubikPatternCube2.patterns);
375
    initializeCategories(1, RubikPatternCube3.patterns);
376
    initializeCategories(2, RubikPatternCube4.patterns);
377
    initializeCategories(3, RubikPatternCube5.patterns);
378 d18993ac Leszek Koltunski
    }
379
380
///////////////////////////////////////////////////////////////////////////////////////////////////
381
382 48145a5b Leszek Koltunski
  private void initializeCategories(int num, String[][] pat)
383 d18993ac Leszek Koltunski
    {
384 48145a5b Leszek Koltunski
    List<Category> list = new ArrayList<>();
385
    Category cat;
386 d18993ac Leszek Koltunski
387 48145a5b Leszek Koltunski
    for(String[] lines: pat)
388 d18993ac Leszek Koltunski
      {
389 48145a5b Leszek Koltunski
      cat = new Category(lines);
390
      list.add(cat);
391 d18993ac Leszek Koltunski
      }
392 48145a5b Leszek Koltunski
393
    mCategories.add(num,list);
394
    numCategories[num]=pat.length;
395 d18993ac Leszek Koltunski
    }
396
397 4f470e00 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
398
// PUBLIC API
399
///////////////////////////////////////////////////////////////////////////////////////////////////
400
401
  public static RubikPattern getInstance()
402
    {
403
    if( mThis==null )
404
      {
405
      mThis = new RubikPattern();
406
      }
407
408
    return mThis;
409
    }
410
411 3a9d19ed Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
412
413 48145a5b Leszek Koltunski
  public int getNumCategories(int tab)
414 3a9d19ed Leszek Koltunski
    {
415 48145a5b Leszek Koltunski
    return tab>=0 && tab<NUM_CUBES ? numCategories[tab] : 0;
416 3a9d19ed Leszek Koltunski
    }
417
418 d18993ac Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
419
420 48145a5b Leszek Koltunski
  public String getCategoryName(int tab, int cat)
421 d18993ac Leszek Koltunski
    {
422 48145a5b Leszek Koltunski
    if( tab>=0 && tab<NUM_CUBES && cat>=0 && cat< numCategories[tab] )
423 d18993ac Leszek Koltunski
      {
424 48145a5b Leszek Koltunski
      Category c = mCategories.get(tab).get(cat);
425 d18993ac Leszek Koltunski
      return c!=null ? c.getName() : null;
426
      }
427
428
    return null;
429
    }
430
431 044529c1 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
432
433 48145a5b Leszek Koltunski
  public void rememberState(int tab, int cat, int scrollPos)
434 044529c1 Leszek Koltunski
    {
435 48145a5b Leszek Koltunski
    if( tab>=0 && tab<NUM_CUBES )
436 044529c1 Leszek Koltunski
      {
437 48145a5b Leszek Koltunski
      currentCategory[tab] = cat;
438
      currentScrollPos[tab]= scrollPos;
439 044529c1 Leszek Koltunski
      }
440
    }
441
442
///////////////////////////////////////////////////////////////////////////////////////////////////
443
444 48145a5b Leszek Koltunski
  public int recallCategory(int tab)
445 044529c1 Leszek Koltunski
    {
446 48145a5b Leszek Koltunski
    return tab>=0 && tab<NUM_CUBES ? currentCategory[tab] : 0;
447 044529c1 Leszek Koltunski
    }
448
449 c715128d Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
450
451 48145a5b Leszek Koltunski
  public int recallScrollPos(int tab)
452 c715128d Leszek Koltunski
    {
453 48145a5b Leszek Koltunski
    return tab>=0 && tab<NUM_CUBES ? currentScrollPos[tab] : 0;
454 c715128d Leszek Koltunski
    }
455
456 d18993ac Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
457
458 48145a5b Leszek Koltunski
  public String getPatternName(int tab, int cat, int pat)
459 d18993ac Leszek Koltunski
    {
460 48145a5b Leszek Koltunski
    if( tab>=0 && tab<NUM_CUBES && cat>=0 && cat< numCategories[tab] )
461 d18993ac Leszek Koltunski
      {
462 48145a5b Leszek Koltunski
      Category c = mCategories.get(tab).get(cat);
463 3a9d19ed Leszek Koltunski
      return c!=null ? c.getPatternName(pat) : null;
464 d18993ac Leszek Koltunski
      }
465
466
    return null;
467
    }
468
469
///////////////////////////////////////////////////////////////////////////////////////////////////
470
471 48145a5b Leszek Koltunski
  public int getNumPatterns(int tab, int cat)
472 d18993ac Leszek Koltunski
    {
473 48145a5b Leszek Koltunski
    if( tab>=0 && tab<NUM_CUBES && cat>=0 && cat< numCategories[tab] )
474 d18993ac Leszek Koltunski
      {
475 48145a5b Leszek Koltunski
      Category c = mCategories.get(tab).get(cat);
476 d18993ac Leszek Koltunski
      return c!=null ? c.getNumPatterns() : 0;
477
      }
478
479
    return 0;
480
    }
481
482
///////////////////////////////////////////////////////////////////////////////////////////////////
483
484 48145a5b Leszek Koltunski
  public int getCurMove(int tab, int cat, int pat)
485 d18993ac Leszek Koltunski
    {
486 48145a5b Leszek Koltunski
    if( tab>=0 && tab<NUM_CUBES && cat>=0 && cat< numCategories[tab] )
487 d18993ac Leszek Koltunski
      {
488 48145a5b Leszek Koltunski
      Category c = mCategories.get(tab).get(cat);
489 3a9d19ed Leszek Koltunski
      return c!=null ? c.getPatternCurMove(pat):0;
490 d18993ac Leszek Koltunski
      }
491
492
    return 0;
493
    }
494
495
///////////////////////////////////////////////////////////////////////////////////////////////////
496
497 48145a5b Leszek Koltunski
  public int getNumMoves(int tab, int cat, int pat)
498 d18993ac Leszek Koltunski
    {
499 48145a5b Leszek Koltunski
    if( tab>=0 && tab<NUM_CUBES && cat>=0 && cat< numCategories[tab] )
500 d18993ac Leszek Koltunski
      {
501 48145a5b Leszek Koltunski
      Category c = mCategories.get(tab).get(cat);
502 3a9d19ed Leszek Koltunski
      return c!=null ? c.getPatternNumMove(pat):0;
503 d18993ac Leszek Koltunski
      }
504
505
    return 0;
506
    }
507
508
///////////////////////////////////////////////////////////////////////////////////////////////////
509
510 48145a5b Leszek Koltunski
  public void makeMove(RubikPostRender post, int tab, int cat, int pat)
511 d18993ac Leszek Koltunski
    {
512 48145a5b Leszek Koltunski
    if( tab>=0 && tab<NUM_CUBES && cat>=0 && cat< numCategories[tab] )
513 d18993ac Leszek Koltunski
      {
514 48145a5b Leszek Koltunski
      Category c = mCategories.get(tab).get(cat);
515 8becce57 Leszek Koltunski
      if( c!=null ) c.makeMove(post,pat);
516 d18993ac Leszek Koltunski
      }
517
    }
518
519
///////////////////////////////////////////////////////////////////////////////////////////////////
520
521 48145a5b Leszek Koltunski
  public void backMove(RubikPostRender post, int tab, int cat, int pat)
522 d18993ac Leszek Koltunski
    {
523 48145a5b Leszek Koltunski
    if( tab>=0 && tab<NUM_CUBES && cat>=0 && cat< numCategories[tab] )
524 d18993ac Leszek Koltunski
      {
525 48145a5b Leszek Koltunski
      Category c = mCategories.get(tab).get(cat);
526 8becce57 Leszek Koltunski
      if( c!=null ) c.backMove(post,pat);
527 d18993ac Leszek Koltunski
      }
528
    }
529
530
///////////////////////////////////////////////////////////////////////////////////////////////////
531
532 48145a5b Leszek Koltunski
  public int[][] reInitialize(int tab, int cat, int pat)
533 d18993ac Leszek Koltunski
    {
534 48145a5b Leszek Koltunski
    if( tab>=0 && tab<NUM_CUBES && cat>=0 && cat< numCategories[tab] )
535 d18993ac Leszek Koltunski
      {
536 48145a5b Leszek Koltunski
      Category c = mCategories.get(tab).get(cat);
537 c715128d Leszek Koltunski
      if( c!=null ) return c.reInitialize(pat);
538 d18993ac Leszek Koltunski
      }
539 4f470e00 Leszek Koltunski
540 a31d25de Leszek Koltunski
    return null;
541 4f470e00 Leszek Koltunski
    }
542 d18993ac Leszek Koltunski
}