Project

General

Profile

Download (7.11 KB) Statistics
| Branch: | Revision:

phasedsolver / src / main / java / org / distorted / phasedsolver / SolverActivity.java @ 4237fc6b

1
///////////////////////////////////////////////////////////////////////////////////////////////////
2
// Copyright 2024 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.phasedsolver;
11

    
12
import static org.distorted.objectlib.main.TwistyObject.MODE_NORM;
13

    
14
import android.app.Activity;
15
import android.content.SharedPreferences;
16
import android.os.Bundle;
17
import android.view.View;
18
import android.widget.Toast;
19

    
20
import androidx.preference.PreferenceManager;
21

    
22
import org.distorted.library.main.DistortedLibrary;
23
import org.distorted.library.type.Static3D;
24
import org.distorted.objectlib.algsolvers.PhasedSolver;
25
import org.distorted.objectlib.algsolvers.SolvedObject;
26
import org.distorted.objectlib.main.InitAssets;
27
import org.distorted.objectlib.main.ObjectControl;
28
import org.distorted.objectlib.main.TwistyObject;
29
import org.distorted.objectlib.metadata.ListObjects;
30
import org.distorted.os.OSInterface;
31

    
32
///////////////////////////////////////////////////////////////////////////////////////////////////
33

    
34
public class SolverActivity extends Activity
35
{
36
  private InitAssets mAsset;
37
  private SharedPreferences mPreferences;
38
  private SolverLowerPane mLowerPane;
39

    
40
///////////////////////////////////////////////////////////////////////////////////////////////////
41

    
42
  @Override
43
  protected void onCreate(Bundle icicle)
44
    {
45
    super.onCreate(icicle);
46
    mPreferences = PreferenceManager.getDefaultSharedPreferences(this);
47
    DistortedLibrary.onCreate();
48
    setContentView(R.layout.mainlayout);
49
    SolverSurfaceView view = findViewById(R.id.solverView);
50
    OSInterface os = view.getInterface();
51
    mAsset = new InitAssets(null, null, os);
52
    mLowerPane = new SolverLowerPane(this);
53
    }
54

    
55
///////////////////////////////////////////////////////////////////////////////////////////////////
56

    
57
  @Override
58
  protected void onPause()
59
    {
60
    super.onPause();
61
    SolverSurfaceView view = findViewById(R.id.solverView);
62
    view.onPause();
63
    DistortedLibrary.onPause();
64

    
65
    savePreferences();
66
    }
67

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

    
70
  @Override
71
  protected void onResume()
72
    {
73
    super.onResume();
74
    SolverSurfaceView view = findViewById(R.id.solverView);
75
    view.onResume();
76
    DistortedLibrary.onResume();
77

    
78
    restorePreferences();
79

    
80
    ObjectControl control = getControl();
81
    control.changeObject(ListObjects.CUBE_3.ordinal(), MODE_NORM, mAsset);
82
    }
83

    
84
///////////////////////////////////////////////////////////////////////////////////////////////////
85

    
86
  @Override
87
  protected void onDestroy()
88
    {
89
    DistortedLibrary.onDestroy();
90
    super.onDestroy();
91
    }
92

    
93
///////////////////////////////////////////////////////////////////////////////////////////////////
94

    
95
  ObjectControl getControl()
96
    {
97
    SolverSurfaceView view = findViewById(R.id.solverView);
98
    return view.getObjectControl();
99
    }
100

    
101
///////////////////////////////////////////////////////////////////////////////////////////////////
102

    
103
  private void savePreferences()
104
    {
105
    SharedPreferences.Editor editor = mPreferences.edit();
106
    SolverSurfaceView view = findViewById(R.id.solverView);
107
    OSInterface os = view.getInterface();
108
    os.setEditor(editor);
109
    view.getObjectControl().savePreferences();
110

    
111
    editor.apply();
112
    }
113

    
114
///////////////////////////////////////////////////////////////////////////////////////////////////
115

    
116
  private void restorePreferences()
117
    {
118
    SolverSurfaceView view = findViewById(R.id.solverView);
119
    OSInterface os = view.getInterface();
120
    os.setPreferences(mPreferences);
121
    view.getObjectControl().restorePreferences();
122
    }
123

    
124
///////////////////////////////////////////////////////////////////////////////////////////////////
125

    
126
  private void solve(PhasedSolver ps, int[] quats, int[][] moveTable)
127
    {
128
    int[][] sol = ps.solution(quats);
129
    int numPhases = sol.length;
130
    int totalLength = 0;
131

    
132
    for(int p=0; p<numPhases; p++)
133
      {
134
      int numMoves = sol[p]==null ? -1 : sol[p][0];
135

    
136
      if( numMoves<0 )
137
        {
138
        String message = "Phase "+p+": FAIL";
139
        Toast.makeText(this,message,Toast.LENGTH_LONG).show();
140
        return;
141
        }
142

    
143
      totalLength += numMoves;
144
      }
145

    
146
    int[][] moves = new int[totalLength][];
147
    int index = 0;
148

    
149
    for( int[] s : sol )
150
      {
151
      int numMoves = s[0];
152

    
153
      for(int m=1; m<=numMoves; m++)
154
        {
155
        int mi = s[m];
156
        moves[index++] = moveTable[mi];
157
        android.util.Log.e("D","move "+m+" : "+moveTable[mi][0]+" "+moveTable[mi][1]+" "+moveTable[mi][2]);
158
        }
159
      }
160

    
161
    mLowerPane.setMoves(this,moves);
162
    }
163

    
164
///////////////////////////////////////////////////////////////////////////////////////////////////
165

    
166
    public void Solve(View v)
167
      {
168
      TwistyObject object = getControl().getObject();
169

    
170
      int[] numL      = object.getNumLayers();
171
      float[][] pos   = object.getCubitPositions(numL);
172
      Static3D[] axis = object.getRotationAxis();
173
      int[][] angles  = object.getBasicAngles();
174
      float[][] cuts  = object.getCuts(numL);
175

    
176
      boolean[] r = {true,false,true};
177
      boolean[][] rot = {r,r,r};//object.getLayerRotatable(numL);
178

    
179
      SolvedObject so = new SolvedObject(pos,axis,angles,cuts,rot);
180
      int numCubits = pos.length;
181
      int[] qi = new int[numCubits];
182
      for(int i=0; i<numCubits; i++) qi[i] = object.getCubitQuatIndex(i);
183

    
184
      int[][] moves = so.getMoveTable();
185

    
186
      int[][] params = { {12,13,16,17},{0,1,2,3} };
187
      int[] modes  = { PhasedSolver.MODE_ALL_AT_ONCE_OP, PhasedSolver.MODE_ONE_BY_ONE_OP };
188
      PhasedSolver ps = new PhasedSolver(so,params,modes);
189

    
190
      runOnUiThread(new Runnable()
191
        {
192
        @Override
193
        public void run()
194
          {
195
          solve(ps,qi,moves);
196
          }
197
        });
198
      }
199

    
200
///////////////////////////////////////////////////////////////////////////////////////////////////
201

    
202
    public void Reset(View v)
203
      {
204
      ObjectControl control = getControl();
205
      control.solveObject();
206
      mLowerPane.clearMoves(this);
207
      }
208

    
209
///////////////////////////////////////////////////////////////////////////////////////////////////
210

    
211
    public void Left(View v)
212
      {
213
      mLowerPane.backMove(this);
214
      }
215

    
216
///////////////////////////////////////////////////////////////////////////////////////////////////
217

    
218
    public void Right(View v)
219
      {
220
      mLowerPane.makeMove(this);
221
      }
222
}
(1-1/5)