Project

General

Profile

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

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

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.TwistyObject;
16

    
17
import org.distorted.main.R;
18
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
import org.distorted.solverui.ScreenList;
32
import org.distorted.solverui.ScreenSolver;
33

    
34
///////////////////////////////////////////////////////////////////////////////////////////////////
35

    
36
public class SolverMain implements Runnable
37
{
38
  private final Resources mRes;
39
  private final OperatingSystemInterface mOS;
40
  private final long mSignature;
41
  private final TwistyObject mObject;
42

    
43
///////////////////////////////////////////////////////////////////////////////////////////////////
44

    
45
  public SolverMain(OperatingSystemInterface os, Resources res, TwistyObject object)
46
    {
47
    mRes       = res;
48
    mOS        = os;
49
    mObject    = object;
50
    long[] sig = object.getSignature().getArray();
51
    mSignature = sig[sig.length-1];
52
    }
53

    
54
///////////////////////////////////////////////////////////////////////////////////////////////////
55
// 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
  public static int cubitIsLocked(int object, int cubit)
61
    {
62
    if( object == MetadataCUBE_3.INDEX )
63
      {
64
      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
      }
71

    
72
    return -1;
73
    }
74

    
75
///////////////////////////////////////////////////////////////////////////////////////////////////
76

    
77
  public void start()
78
    {
79
    Thread thr = new Thread(this);
80
    thr.start();
81
    }
82

    
83
///////////////////////////////////////////////////////////////////////////////////////////////////
84

    
85
  public void run()
86
    {
87
    ScreenSolver screen = (ScreenSolver) ScreenList.SVER.getScreenClass();
88

    
89
    if( mSignature == MetadataCUBE_3.INDEX )
90
      {
91
      SolverCube3 solver = new SolverCube3(mOS,mRes,mObject);
92
      solver.solve(screen);
93
      }
94
    else if( mSignature == MetadataPDUO_2.INDEX )
95
      {
96
      SolverTablebase solver = new SolverPyraminxDuo(mOS,mRes,mObject);
97
      solver.solve(screen);
98
      }
99
    else if( mSignature == MetadataIVY_2.INDEX )
100
      {
101
      SolverTablebase solver = new SolverIvyCube(mOS,mRes,mObject);
102
      solver.solve(screen);
103
      }
104
    else if( mSignature == MetadataCU_232.INDEX )
105
      {
106
      SolverTablebase solver = new SolverCuboid232(mOS,mRes,mObject);
107
      solver.solve(screen);
108
      }
109
    else if( mSignature == MetadataCU_323.INDEX )
110
      {
111
      SolverTablebase solver = new SolverCuboid323(mOS,mRes,mObject);
112
      solver.solve(screen);
113
      }
114
    else if( mSignature == MetadataPYRA_3.INDEX )
115
      {
116
      SolverTablebase solver = new SolverPyraminx(mOS,mRes,mObject);
117
      solver.solve(screen);
118
      }
119
    else if( mSignature == MetadataDIAM_2.INDEX )
120
      {
121
      SolverTablebase solver = new SolverSkewbDiamond(mOS,mRes,mObject);
122
      solver.solve(screen);
123
      }
124
    else if( mSignature == MetadataCUBE_2.INDEX )
125
      {
126
      SolverTablebase solver = new SolverCube2(mOS,mRes,mObject);
127
      solver.solve(screen);
128
      }
129
    else if( mSignature == MetadataJING_2.INDEX )
130
      {
131
      SolverTablebase solver = new SolverJing(mOS,mRes,mObject);
132
      solver.solve(screen);
133
      }
134
    else if( mSignature == MetadataSKEW_2.INDEX )
135
      {
136
      SolverTablebase solver = new SolverSkewb(mOS,mRes,mObject);
137
      solver.solve(screen);
138
      }
139
    else if( mSignature == MetadataDINO_3.INDEX )
140
      {
141
      SolverTablebase solver = new SolverDino6(mOS,mRes,mObject);
142
      solver.solve(screen);
143
      }
144
    else if( mSignature == MetadataDIN4_3.INDEX )
145
      {
146
      SolverTablebase solver = new SolverDino4(mOS,mRes,mObject);
147
      solver.solve(screen);
148
      }
149
    else if( mSignature == MetadataPDIA_3.INDEX )
150
      {
151
      SolverTablebase solver = new SolverPyraminxDiamond(mOS,mRes,mObject);
152
      solver.solve(screen);
153
      }
154
    else
155
      {
156
      screen.displayErrorDialog(mRes.getString(R.string.solver_generic_not_implemented));
157
      }
158
    }
159
}  
160

    
(10-10/16)