Project

General

Profile

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

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

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.helpers.OperatingSystemInterface;
15
import org.distorted.objectlib.main.ObjectSignatures;
16
import org.distorted.objectlib.main.TwistyObject;
17

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

    
22
///////////////////////////////////////////////////////////////////////////////////////////////////
23

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

    
31
///////////////////////////////////////////////////////////////////////////////////////////////////
32

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

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

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

    
60
    return -1;
61
    }
62

    
63
///////////////////////////////////////////////////////////////////////////////////////////////////
64

    
65
  public void start()
66
    {
67
    Thread thr = new Thread(this);
68
    thr.start();
69
    }
70

    
71
///////////////////////////////////////////////////////////////////////////////////////////////////
72

    
73
  public void run()
74
    {
75
    RubikScreenSolver screen = (RubikScreenSolver) ScreenList.SVER.getScreenClass();
76

    
77
    if( mSignature==ObjectSignatures.CUBE_3 )
78
      {
79
      SolverCube3 solver = new SolverCube3(mOS,mRes,mObject);
80
      solver.solve(screen);
81
      }
82
    else if( mSignature==ObjectSignatures.PDUO_2 )
83
      {
84
      SolverTablebase solver = new SolverPyraminxDuo(mOS,mRes,mObject);
85
      solver.solve(screen);
86
      }
87
    else if( mSignature==ObjectSignatures.IVY_2 )
88
      {
89
      SolverTablebase solver = new SolverIvyCube(mOS,mRes,mObject);
90
      solver.solve(screen);
91
      }
92
    else if( mSignature==ObjectSignatures.CU_232 )
93
      {
94
      SolverTablebase solver = new SolverCuboid232(mOS,mRes,mObject);
95
      solver.solve(screen);
96
      }
97
    else if( mSignature==ObjectSignatures.CU_323 )
98
      {
99
      SolverTablebase solver = new SolverCuboid323(mOS,mRes,mObject);
100
      solver.solve(screen);
101
      }
102
    else if( mSignature==ObjectSignatures.PYRA_3 )
103
      {
104
      SolverTablebase solver = new SolverPyraminx(mOS,mRes,mObject);
105
      solver.solve(screen);
106
      }
107
    else if( mSignature==ObjectSignatures.DIAM_2 )
108
      {
109
      SolverTablebase solver = new SolverSkewbDiamond(mOS,mRes,mObject);
110
      solver.solve(screen);
111
      }
112
    else if( mSignature==ObjectSignatures.CUBE_2 )
113
      {
114
      SolverTablebase solver = new SolverCube2(mOS,mRes,mObject);
115
      solver.solve(screen);
116
      }
117
    else if( mSignature==ObjectSignatures.JING_2 )
118
      {
119
      SolverTablebase solver = new SolverJing(mOS,mRes,mObject);
120
      solver.solve(screen);
121
      }
122
    else if( mSignature==ObjectSignatures.SKEW_2 )
123
      {
124
      SolverTablebase solver = new SolverSkewb(mOS,mRes,mObject);
125
      solver.solve(screen);
126
      }
127
    else if( mSignature==ObjectSignatures.DINO_3 )
128
      {
129
      SolverTablebase solver = new SolverDino6(mOS,mRes,mObject);
130
      solver.solve(screen);
131
      }
132
    else if( mSignature==ObjectSignatures.DIN4_3 )
133
      {
134
      SolverTablebase solver = new SolverDino4(mOS,mRes,mObject);
135
      solver.solve(screen);
136
      }
137
    else if( mSignature==ObjectSignatures.PDIA_3 )
138
      {
139
      SolverTablebase solver = new SolverPyraminxDiamond(mOS,mRes,mObject);
140
      solver.solve(screen);
141
      }
142
    else
143
      {
144
      screen.displayErrorDialog(mRes.getString(R.string.solver_generic_not_implemented));
145
      }
146
    }
147
}  
148

    
(10-10/16)