Project

General

Profile

« Previous | Next » 

Revision 473611ee

Added by Leszek Koltunski about 4 years ago

Progress with the 3x3x3 Solver.

View differences:

src/main/java/org/distorted/main/RubikPostRender.java
451 451

  
452 452
///////////////////////////////////////////////////////////////////////////////////////////////////
453 453

  
454
  public void setTextureMap(int cubit, int face, int newColor)
454
  void setTextureMap(int cubit, int face, int newColor)
455 455
    {
456 456
    mSetTextureMap = true;
457 457

  
src/main/java/org/distorted/main/RubikSurfaceView.java
32 32
import org.distorted.objects.RubikObject;
33 33
import org.distorted.objects.RubikObjectMovement;
34 34
import org.distorted.states.RubikState;
35
import org.distorted.states.RubikStateSolver;
35 36
import org.distorted.states.RubikStateSolving;
36 37

  
37 38
///////////////////////////////////////////////////////////////////////////////////////////////////
38 39

  
39 40
public class RubikSurfaceView extends GLSurfaceView
40 41
{
42
    public static final int MODE_ROTATE  = 0;
43
    public static final int MODE_DRAG    = 1;
44
    public static final int MODE_REPLACE = 2;
45

  
41 46
    // Moving the finger from the middle of the vertical screen to the right edge will rotate a
42 47
    // given face by SWIPING_SENSITIVITY/2 degrees.
43 48
    private final static int SWIPING_SENSITIVITY  = 240;
......
170 175

  
171 176
    private void setUpDragOrRotate(float x, float y)
172 177
      {
173
      if( !RubikState.canRotate() )
178
      int mode = RubikState.getMode();
179

  
180
      if( mode==MODE_DRAG )
174 181
        {
175 182
        mDragging           = true;
176 183
        mBeginningRotation  = false;
......
185 192
        if( mMovement!=null && mMovement.faceTouched(rotatedTouchPoint1,rotatedCamera) )
186 193
          {
187 194
          mDragging           = false;
188
          mBeginningRotation  = mPostRender.canRotate();
189 195
          mContinuingRotation = false;
196

  
197
          if( mode==MODE_ROTATE )
198
            {
199
            mBeginningRotation= mPostRender.canRotate();
200
            }
201
          else if( mode==MODE_REPLACE )
202
            {
203
            mBeginningRotation= false;
204
            RubikStateSolver solver = (RubikStateSolver) RubikState.SVER.getStateClass();
205
            int cubit = mMovement.getTouchedCubit();
206
            int face  = mMovement.getTouchedFace();
207
            int color = solver.getCurrentColor();
208
            mPostRender.setTextureMap( cubit, face, color );
209
            }
190 210
          }
191 211
        else
192 212
          {
src/main/java/org/distorted/objects/RubikObjectMovement.java
283 283

  
284 284
    return new Static2D(rotIndex,offset);
285 285
    }
286

  
287
///////////////////////////////////////////////////////////////////////////////////////////////////
288

  
289
  public int getTouchedFace()
290
    {
291
    return mLastTouchedAxis*mNumFacesPerAxis + mLastTouchedLR;
292
    }
293

  
294
///////////////////////////////////////////////////////////////////////////////////////////////////
295
// TODO
296

  
297
  public int getTouchedCubit()
298
    {
299
    return 0;
300
    }
286 301
  }
src/main/java/org/distorted/states/RubikState.java
21 21

  
22 22
import android.content.SharedPreferences;
23 23
import org.distorted.main.RubikActivity;
24
import static org.distorted.main.RubikSurfaceView.*;
24 25

  
25 26
///////////////////////////////////////////////////////////////////////////////////////////////////
26 27

  
27 28
public enum RubikState
28 29
  {
29
  MAIN ( null , false, new RubikStateMain()      ),
30
  PLAY ( MAIN , true , new RubikStatePlay()      ),
31
  SOLV ( PLAY , true , new RubikStateSolving()   ),
32
  PATT ( MAIN , false, new RubikStatePattern()   ),
33
  SVER ( MAIN , false, new RubikStateSolver()    ),
34
  SOLU ( SVER , false, new RubikStateSolution()  ),
30
  MAIN ( null , MODE_DRAG   , new RubikStateMain()     ),
31
  PLAY ( MAIN , MODE_ROTATE , new RubikStatePlay()     ),
32
  SOLV ( PLAY , MODE_ROTATE , new RubikStateSolving()  ),
33
  PATT ( MAIN , MODE_DRAG   , new RubikStatePattern()  ),
34
  SVER ( MAIN , MODE_REPLACE, new RubikStateSolver()   ),
35
  SOLU ( SVER , MODE_DRAG   , new RubikStateSolution() ),
35 36
  ;
36 37

  
37 38
  public static final int LENGTH = values().length;
38 39
  private final RubikState mBack;
39
  private boolean mCanRotate;
40
  private int mMode;
40 41
  private final RubikStateAbstract mClass;
41 42
  private static final RubikState[] sizes;
42 43

  
......
70 71

  
71 72
///////////////////////////////////////////////////////////////////////////////////////////////////
72 73

  
73
  public static boolean canRotate()
74
  public static int getMode()
74 75
    {
75
    return mCurrState.mCanRotate;
76
    return mCurrState.mMode;
76 77
    }
77 78

  
78 79
///////////////////////////////////////////////////////////////////////////////////////////////////
......
122 123

  
123 124
///////////////////////////////////////////////////////////////////////////////////////////////////
124 125

  
125
  RubikState(RubikState back, boolean canRotate, RubikStateAbstract clazz)
126
  RubikState(RubikState back, int mode, RubikStateAbstract clazz)
126 127
    {
127
    mBack      = back;
128
    mCanRotate = canRotate;
129
    mClass     = clazz;
128
    mBack = back;
129
    mMode = mode;
130
    mClass= clazz;
130 131
    }
131 132

  
132 133
///////////////////////////////////////////////////////////////////////////////////////////////////
src/main/java/org/distorted/states/RubikStateSolver.java
24 24
import android.graphics.Bitmap;
25 25
import android.graphics.Canvas;
26 26
import android.graphics.Paint;
27
import android.graphics.PorterDuff;
28
import android.graphics.drawable.Drawable;
29
import android.support.v4.content.ContextCompat;
27 30
import android.util.DisplayMetrics;
28 31
import android.view.View;
29 32
import android.widget.Button;
......
32 35

  
33 36
import org.distorted.main.R;
34 37
import org.distorted.main.RubikActivity;
35
import org.distorted.objects.RubikObject;
38
import org.distorted.main.RubikPostRender;
36 39
import org.distorted.objects.RubikObjectList;
37 40

  
38 41
///////////////////////////////////////////////////////////////////////////////////////////////////
......
123 126

  
124 127
  void leaveState(RubikActivity act)
125 128
    {
126
    RubikObject object = act.getObject();
127
    object.resetAllTextureMaps();
129
    RubikPostRender post = act.getPostRender();
130
    post.resetAllTextureMaps();
128 131
    }
129 132

  
130 133
///////////////////////////////////////////////////////////////////////////////////////////////////
......
134 137
    mSolving = false;
135 138

  
136 139
    act.changeObject(RubikObjectList.CUBE,3,null);
140
    RubikStatePlay play = (RubikStatePlay)RubikState.PLAY.getStateClass();
141
    play.setObjectAndSize(RubikObjectList.CUBE,3);
137 142

  
138 143
    DisplayMetrics metrics = act.getResources().getDisplayMetrics();
139 144
    final float scale = metrics.density;
......
145 150
    if( mBitmap     ==null ) setupBitmaps(scale);
146 151
    if( mColorButton==null ) setupColorButtons(act,scale);
147 152

  
153
    markButton(act);
154

  
148 155
    for(ImageButton button: mColorButton) layoutTop.addView(button);
149 156

  
150 157
    // BOT ////////////////////////////
......
222 229
        @Override
223 230
        public void onClick(View view)
224 231
          {
225
          android.util.Log.e("solver", "button "+FACE_COLORS[ii]+" clicked");
232
          mCurrentColor = ii;
233
          markButton(act);
226 234
          }
227 235
        });
228 236
      }
......
276 284
      });
277 285
    }
278 286

  
287
///////////////////////////////////////////////////////////////////////////////////////////////////
288

  
289
  private void markButton(RubikActivity act)
290
    {
291
    for(int b=0; b<NUM_FACES; b++)
292
      {
293
      Drawable d = mColorButton[b].getBackground();
294

  
295
      if( b==mCurrentColor )
296
        {
297
        d.setColorFilter(ContextCompat.getColor(act,R.color.red), PorterDuff.Mode.MULTIPLY);
298
        }
299
      else
300
        {
301
        d.clearColorFilter();
302
        }
303
      }
304
    }
305

  
279 306
///////////////////////////////////////////////////////////////////////////////////////////////////
280 307

  
281 308
  public void savePreferences(SharedPreferences.Editor editor)
......
293 320
    {
294 321
    mCurrentColor = preferences.getInt("stateSolver_color", 0);
295 322
    }
323

  
324
///////////////////////////////////////////////////////////////////////////////////////////////////
325

  
326
  public int getCurrentColor()
327
    {
328
    return mCurrentColor;
329
    }
296 330
  }

Also available in: Unified diff