Project

General

Profile

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

magiccube / src / main / java / org / distorted / solvers / SolverMain.java @ a505bce0

1
///////////////////////////////////////////////////////////////////////////////////////////////////
2
// Copyright 2020 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.solvers;
11

    
12
import android.content.res.Resources;
13

    
14
import org.distorted.objectlib.main.ObjectSignatures;
15
import org.distorted.objectlib.main.TwistyObject;
16

    
17
import org.distorted.main.R;
18
import org.distorted.screens.ScreenList;
19
import org.distorted.screens.RubikScreenSolver;
20

    
21
///////////////////////////////////////////////////////////////////////////////////////////////////
22

    
23
public class SolverMain implements Runnable
24
{
25
  private final Resources mRes;
26
  private final long mSignature;
27
  private final TwistyObject mObject;
28

    
29
///////////////////////////////////////////////////////////////////////////////////////////////////
30

    
31
  public SolverMain(Resources res, TwistyObject object)
32
    {
33
    mRes       = res;
34
    mObject    = object;
35
    long[] sig = object.getSignature().getArray();
36
    mSignature = sig[sig.length-1];
37
    }
38

    
39
///////////////////////////////////////////////////////////////////////////////////////////////////
40
// certain objects have certain cubits locked - for example, the Cube3's centers of
41
// sides always have the same color.
42
// If a certain cubit is locked, return the color (index into it's FACE_COLORS array) it
43
// must have. Otherwise return -1.
44

    
45
  public static int cubitIsLocked(int object, int cubit)
46
    {
47
    if( object == ObjectSignatures.CUBE_3 )
48
      {
49
      if( cubit==20 ) return 0; // center of the right  face
50
      if( cubit==21 ) return 1; // center of the left   face
51
      if( cubit==22 ) return 2; // center of the up     face
52
      if( cubit==23 ) return 3; // center of the bottom face
53
      if( cubit==24 ) return 4; // center of the front  face
54
      if( cubit==25 ) return 5; // center of the back   face
55
      }
56

    
57
    return -1;
58
    }
59

    
60
///////////////////////////////////////////////////////////////////////////////////////////////////
61

    
62
  public void start()
63
    {
64
    Thread thr = new Thread(this);
65
    thr.start();
66
    }
67

    
68
///////////////////////////////////////////////////////////////////////////////////////////////////
69

    
70
  public void run()
71
    {
72
    RubikScreenSolver screen = (RubikScreenSolver) ScreenList.SVER.getScreenClass();
73

    
74
    if( mSignature==ObjectSignatures.CUBE_3 )
75
      {
76
      SolverCube3 solver = new SolverCube3(mRes,mObject);
77
      solver.solve(screen);
78
      }
79
    else if( mSignature==ObjectSignatures.PDUO_2 )
80
      {
81
      SolverTablebase solver = new SolverPyraminxDuo(mRes,mObject);
82
      solver.solve(screen);
83
      }
84
    else if( mSignature==ObjectSignatures.IVY_2 )
85
      {
86
      SolverTablebase solver = new SolverIvyCube(mRes,mObject);
87
      solver.solve(screen);
88
      }
89
    else if( mSignature==ObjectSignatures.CU_232 )
90
      {
91
      SolverTablebase solver = new SolverCuboid232(mRes,mObject);
92
      solver.solve(screen);
93
      }
94
    else if( mSignature==ObjectSignatures.PYRA_3 )
95
      {
96
      SolverTablebase solver = new SolverPyraminx(mRes,mObject);
97
      solver.solve(screen);
98
      }
99
    else if( mSignature==ObjectSignatures.DIAM_2 )
100
      {
101
      SolverTablebase solver = new SolverSkewbDiamond(mRes,mObject);
102
      solver.solve(screen);
103
      }
104
    else if( mSignature==ObjectSignatures.CUBE_2 )
105
      {
106
      SolverTablebase solver = new SolverCube2(mRes,mObject);
107
      solver.solve(screen);
108
      }
109
    else if( mSignature==ObjectSignatures.JING_2 )
110
      {
111
      SolverTablebase solver = new SolverJing(mRes,mObject);
112
      solver.solve(screen);
113
      }
114
    else if( mSignature==ObjectSignatures.SKEW_2 )
115
      {
116
      SolverTablebase solver = new SolverSkewb(mRes,mObject);
117
      solver.solve(screen);
118
      }
119
    else if( mSignature==ObjectSignatures.DINO_3 )
120
      {
121
      SolverTablebase solver = new SolverDino6(mRes,mObject);
122
      solver.solve(screen);
123
      }
124
    else
125
      {
126
      screen.displayErrorDialog(mRes.getString(R.string.solver_generic_not_implemented));
127
      }
128
    }
129
}  
130

    
(8-8/13)