Project

General

Profile

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

phasedsolver / src / main / java / org / distorted / phasedsolver / SolverActivity.java @ a96b9267

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 androidx.preference.PreferenceManager;
19

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

    
30
///////////////////////////////////////////////////////////////////////////////////////////////////
31

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

    
38
///////////////////////////////////////////////////////////////////////////////////////////////////
39

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

    
53
///////////////////////////////////////////////////////////////////////////////////////////////////
54
    
55
    @Override
56
    protected void onPause() 
57
      {
58
      super.onPause();
59
      SolverSurfaceView view = findViewById(R.id.solverView);
60
      view.onPause();
61
      DistortedLibrary.onPause();
62

    
63
      savePreferences();
64
      }
65

    
66
///////////////////////////////////////////////////////////////////////////////////////////////////
67
    
68
    @Override
69
    protected void onResume() 
70
      {
71
      super.onResume();
72
      SolverSurfaceView view = findViewById(R.id.solverView);
73
      view.onResume();
74
      DistortedLibrary.onResume();
75

    
76
      restorePreferences();
77

    
78
      ObjectControl control = getControl();
79
      control.changeObject( ListObjects.CUBE_3.ordinal(), MODE_NORM, mAsset);
80
      }
81
    
82
///////////////////////////////////////////////////////////////////////////////////////////////////
83
    
84
    @Override
85
    protected void onDestroy() 
86
      {
87
      DistortedLibrary.onDestroy();
88
      super.onDestroy();
89
      }
90

    
91
///////////////////////////////////////////////////////////////////////////////////////////////////
92

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

    
99
///////////////////////////////////////////////////////////////////////////////////////////////////
100

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

    
109
      editor.apply();
110
      }
111

    
112
///////////////////////////////////////////////////////////////////////////////////////////////////
113

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

    
122
///////////////////////////////////////////////////////////////////////////////////////////////////
123

    
124
    public void Reset(View v)
125
      {
126
      ObjectControl control = getControl();
127
      control.solveObject();
128
      mLowerPane.clearMoves(this);
129
      }
130

    
131
///////////////////////////////////////////////////////////////////////////////////////////////////
132

    
133
    public void Solve(View v)
134
      {
135
      TwistyObject object = getControl().getObject();
136

    
137
      int[] numL      = object.getNumLayers();
138
      float[][] pos   = object.getCubitPositions(numL);
139
      Static3D[] axis = object.getRotationAxis();
140
      int[][] angles  = object.getBasicAngles();
141
      float[][] cuts  = object.getCuts(numL);
142
      boolean[][] rot = object.getLayerRotatable(numL);
143

    
144
      SolvedObject so = new SolvedObject(pos,axis,angles,cuts,rot);
145
      int numCubits = pos.length;
146
      int[] qi = new int[numCubits];
147
      for(int i=0; i<numCubits; i++) qi[i] = object.getCubitQuatIndex(i);
148

    
149
      int[][] moves = so.getMoveTable();
150

    
151
      int[][] params = {{12,13,16,17}};
152
      int[] modes  = { PhasedSolver.MODE_ALL_AT_ONCE_OP };
153
      PhasedSolver ps = new PhasedSolver(so,params,modes);
154

    
155
      runOnUiThread(new Runnable()
156
        {
157
        @Override
158
        public void run()
159
          {
160
          int[][] sol = ps.solution(qi);
161
          int numPhases = sol.length;
162
          android.util.Log.e("D", "Solution, num of phases: "+numPhases);
163

    
164
          for(int p=0; p<numPhases; p++)
165
            {
166
            int numMoves = sol[p]==null ? -1 : sol[p].length;
167
            android.util.Log.e("D", "Phase "+p+" numMoves="+numMoves);
168

    
169
            for(int m=0; m<numMoves; m++)
170
              {
171
              android.util.Log.e("D", "move "+m+" : "+sol[p][m]);
172
              }
173
            }
174
          }
175
        });
176
      }
177

    
178
///////////////////////////////////////////////////////////////////////////////////////////////////
179

    
180
    public void Left(View v)
181
      {
182
      mLowerPane.backMove(this);
183
      }
184

    
185
///////////////////////////////////////////////////////////////////////////////////////////////////
186

    
187
    public void Right(View v)
188
      {
189
      mLowerPane.makeMove(this);
190
      }
191
}
(1-1/5)