Project

General

Profile

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

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

1 f0336037 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
2
// Copyright 2020 Leszek Koltunski                                                               //
3
//                                                                                               //
4
// This file is part of Magic Cube.                                                              //
5
//                                                                                               //
6 bb62ca3f Leszek Koltunski
// 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 f0336037 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
9
10
package org.distorted.solvers;
11
12
import android.content.res.Resources;
13
14 da57afae Leszek Koltunski
import org.distorted.objectlib.helpers.OperatingSystemInterface;
15 3f7a4363 Leszek Koltunski
import org.distorted.objectlib.main.TwistyObject;
16
17 f0336037 Leszek Koltunski
import org.distorted.main.R;
18 62054004 leszek
import org.distorted.objectlib.metadata.MetadataCUBE_2;
19
import org.distorted.objectlib.metadata.MetadataCUBE_3;
20
import org.distorted.objectlib.metadata.MetadataCU_232;
21
import org.distorted.objectlib.metadata.MetadataCU_323;
22
import org.distorted.objectlib.metadata.MetadataDIAM_2;
23
import org.distorted.objectlib.metadata.MetadataDIN4_3;
24
import org.distorted.objectlib.metadata.MetadataDINO_3;
25
import org.distorted.objectlib.metadata.MetadataIVY_2;
26
import org.distorted.objectlib.metadata.MetadataJING_2;
27
import org.distorted.objectlib.metadata.MetadataPDIA_3;
28
import org.distorted.objectlib.metadata.MetadataPDUO_2;
29
import org.distorted.objectlib.metadata.MetadataPYRA_3;
30
import org.distorted.objectlib.metadata.MetadataSKEW_2;
31 cb30e768 leszek
import org.distorted.solverui.ScreenList;
32
import org.distorted.solverui.ScreenSolver;
33 f0336037 Leszek Koltunski
34
///////////////////////////////////////////////////////////////////////////////////////////////////
35
36 a304ee64 Leszek Koltunski
public class SolverMain implements Runnable
37 f0336037 Leszek Koltunski
{
38 c494476f Leszek Koltunski
  private final Resources mRes;
39 da57afae Leszek Koltunski
  private final OperatingSystemInterface mOS;
40 7e4f3e04 Leszek Koltunski
  private final long mSignature;
41 420eb96d Leszek Koltunski
  private final TwistyObject mObject;
42 f0336037 Leszek Koltunski
43
///////////////////////////////////////////////////////////////////////////////////////////////////
44
45 da57afae Leszek Koltunski
  public SolverMain(OperatingSystemInterface os, Resources res, TwistyObject object)
46 f0336037 Leszek Koltunski
    {
47 7e4f3e04 Leszek Koltunski
    mRes       = res;
48 da57afae Leszek Koltunski
    mOS        = os;
49 7e4f3e04 Leszek Koltunski
    mObject    = object;
50 7ed91391 Leszek Koltunski
    long[] sig = object.getSignature().getArray();
51
    mSignature = sig[sig.length-1];
52 f0336037 Leszek Koltunski
    }
53
54
///////////////////////////////////////////////////////////////////////////////////////////////////
55 46a961fd Leszek Koltunski
// certain objects have certain cubits locked - for example, the Cube3's centers of
56
// sides always have the same color.
57
// If a certain cubit is locked, return the color (index into it's FACE_COLORS array) it
58
// must have. Otherwise return -1.
59
60 d433b50e Leszek Koltunski
  public static int cubitIsLocked(int object, int cubit)
61 46a961fd Leszek Koltunski
    {
62 62054004 leszek
    if( object == MetadataCUBE_3.INDEX )
63 46a961fd Leszek Koltunski
      {
64 09b2bd31 Leszek Koltunski
      if( cubit==20 ) return 0; // center of the right  face
65
      if( cubit==21 ) return 1; // center of the left   face
66
      if( cubit==22 ) return 2; // center of the up     face
67
      if( cubit==23 ) return 3; // center of the bottom face
68
      if( cubit==24 ) return 4; // center of the front  face
69
      if( cubit==25 ) return 5; // center of the back   face
70 46a961fd Leszek Koltunski
      }
71
72
    return -1;
73
    }
74
75 373fa45f Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
76
77
  public void start()
78
    {
79
    Thread thr = new Thread(this);
80
    thr.start();
81
    }
82
83 f0336037 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
84
85
  public void run()
86
    {
87 cb30e768 leszek
    ScreenSolver screen = (ScreenSolver) ScreenList.SVER.getScreenClass();
88 f0336037 Leszek Koltunski
89 62054004 leszek
    if( mSignature == MetadataCUBE_3.INDEX )
90 f0336037 Leszek Koltunski
      {
91 873ce847 Leszek Koltunski
      SolverCube3 solver = new SolverCube3(mOS,mRes,mObject);
92 420eb96d Leszek Koltunski
      solver.solve(screen);
93
      }
94 62054004 leszek
    else if( mSignature == MetadataPDUO_2.INDEX )
95 420eb96d Leszek Koltunski
      {
96 da57afae Leszek Koltunski
      SolverTablebase solver = new SolverPyraminxDuo(mOS,mRes,mObject);
97 420eb96d Leszek Koltunski
      solver.solve(screen);
98 f0336037 Leszek Koltunski
      }
99 62054004 leszek
    else if( mSignature == MetadataIVY_2.INDEX )
100 3eedf418 Leszek Koltunski
      {
101 da57afae Leszek Koltunski
      SolverTablebase solver = new SolverIvyCube(mOS,mRes,mObject);
102 3eedf418 Leszek Koltunski
      solver.solve(screen);
103
      }
104 62054004 leszek
    else if( mSignature == MetadataCU_232.INDEX )
105 16003ca8 Leszek Koltunski
      {
106 da57afae Leszek Koltunski
      SolverTablebase solver = new SolverCuboid232(mOS,mRes,mObject);
107 16003ca8 Leszek Koltunski
      solver.solve(screen);
108
      }
109 62054004 leszek
    else if( mSignature == MetadataCU_323.INDEX )
110 d0852c9c Leszek Koltunski
      {
111
      SolverTablebase solver = new SolverCuboid323(mOS,mRes,mObject);
112
      solver.solve(screen);
113
      }
114 62054004 leszek
    else if( mSignature == MetadataPYRA_3.INDEX )
115 7dbbda72 Leszek Koltunski
      {
116 da57afae Leszek Koltunski
      SolverTablebase solver = new SolverPyraminx(mOS,mRes,mObject);
117 7dbbda72 Leszek Koltunski
      solver.solve(screen);
118
      }
119 62054004 leszek
    else if( mSignature == MetadataDIAM_2.INDEX )
120 9a39aabf Leszek Koltunski
      {
121 da57afae Leszek Koltunski
      SolverTablebase solver = new SolverSkewbDiamond(mOS,mRes,mObject);
122 9a39aabf Leszek Koltunski
      solver.solve(screen);
123
      }
124 62054004 leszek
    else if( mSignature == MetadataCUBE_2.INDEX )
125 a4569df4 Leszek Koltunski
      {
126 da57afae Leszek Koltunski
      SolverTablebase solver = new SolverCube2(mOS,mRes,mObject);
127 a4569df4 Leszek Koltunski
      solver.solve(screen);
128
      }
129 62054004 leszek
    else if( mSignature == MetadataJING_2.INDEX )
130 841f82f0 Leszek Koltunski
      {
131 da57afae Leszek Koltunski
      SolverTablebase solver = new SolverJing(mOS,mRes,mObject);
132 841f82f0 Leszek Koltunski
      solver.solve(screen);
133
      }
134 62054004 leszek
    else if( mSignature == MetadataSKEW_2.INDEX )
135 18354673 Leszek Koltunski
      {
136 da57afae Leszek Koltunski
      SolverTablebase solver = new SolverSkewb(mOS,mRes,mObject);
137 18354673 Leszek Koltunski
      solver.solve(screen);
138
      }
139 62054004 leszek
    else if( mSignature == MetadataDINO_3.INDEX )
140 a505bce0 Leszek Koltunski
      {
141 da57afae Leszek Koltunski
      SolverTablebase solver = new SolverDino6(mOS,mRes,mObject);
142 a505bce0 Leszek Koltunski
      solver.solve(screen);
143
      }
144 62054004 leszek
    else if( mSignature == MetadataDIN4_3.INDEX )
145 8afa10ef Leszek Koltunski
      {
146 da57afae Leszek Koltunski
      SolverTablebase solver = new SolverDino4(mOS,mRes,mObject);
147 8afa10ef Leszek Koltunski
      solver.solve(screen);
148
      }
149 62054004 leszek
    else if( mSignature == MetadataPDIA_3.INDEX )
150 04154c0f Leszek Koltunski
      {
151 da57afae Leszek Koltunski
      SolverTablebase solver = new SolverPyraminxDiamond(mOS,mRes,mObject);
152 04154c0f Leszek Koltunski
      solver.solve(screen);
153
      }
154 f0336037 Leszek Koltunski
    else
155
      {
156 ca278d11 Leszek Koltunski
      screen.displayErrorDialog(mRes.getString(R.string.solver_generic_not_implemented));
157 f0336037 Leszek Koltunski
      }
158
    }
159
}