Project

General

Profile

« Previous | Next » 

Revision ce0c7ca8

Added by Leszek Koltunski over 4 years ago

RubikCube: major progress with a separate RubikSettingsEnum enum - almost finished.

View differences:

src/main/java/org/distorted/magic/RubikRenderer.java
56 56
    private RubikCube mOldCube, mNewCube;
57 57
    private int mScreenWidth, mScreenHeight;
58 58
    private MeshFlat mMesh;
59
    private int[] mPos;
60
    private int[] mType;
61 59

  
62 60
///////////////////////////////////////////////////////////////////////////////////////////////////
63 61

  
......
90 88
      mCanScramble = true;
91 89
      mCanSolve    = true;
92 90

  
93
      mPos  = new int[RubikSettingsEnum.LENGTH];
94
      mType = new int[RubikSettingsEnum.LENGTH];
95

  
96
      for (int i=0; i<RubikSettingsEnum.LENGTH; i++)
97
        {
98
        mPos[i] = 1000;
99
        }
100

  
101 91
      mMesh= new MeshFlat(20,20);
102 92
      mNextCubeSize =RubikActivity.getSize();
103 93
      }
......
144 134
        mCanDrag   = false;
145 135
        mCanRotate = false;
146 136
        mNextCubeSize = 0;
147

  
148
        sizeChangeEffect();
137
        changeSizeNow();
149 138
        }
150 139

  
151 140
      if( mSolveCube )
......
239 228
       }
240 229
     }
241 230

  
242
///////////////////////////////////////////////////////////////////////////////////////////////////
243

  
244
   private void sizeChangeEffect()
245
     {
246
     try
247
       {
248
       SizeChangeEffect effect = SizeChangeEffect.create(mType[0]);
249
       mSizeChangeEffectID = effect.start(mPos[0],mScreen,mOldCube,mNewCube,this);
250
       }
251
     catch(Exception ex)
252
       {
253
       android.util.Log.e("Renderer", "failed to create SizeChangeEffect, exception: "+ex.getMessage());
254

  
255
       if( mOldCube!=null ) mScreen.detach(mOldCube);
256
       mScreen.attach(mNewCube);
257
       mCanRotate = true;
258
       mCanDrag   = true;
259
       }
260
     }
261

  
262 231
///////////////////////////////////////////////////////////////////////////////////////////////////
263 232

  
264 233
   private float computeFOV(float cameraDistance, int screenHeight)
......
275 244
     mFinishRotation = true;
276 245
     }
277 246

  
278
///////////////////////////////////////////////////////////////////////////////////////////////////
279

  
280
   void setPos(int index, int pos)
281
     {
282
     if( index>=0 && index<RubikSettingsEnum.LENGTH )  mPos[index] = pos;
283
     }
284

  
285
///////////////////////////////////////////////////////////////////////////////////////////////////
286

  
287
   void setType(int index, int type)
288
     {
289
     if( index>=0 && index<RubikSettingsEnum.LENGTH )  mType[index] = type;
290
     }
291

  
292 247
///////////////////////////////////////////////////////////////////////////////////////////////////
293 248

  
294 249
   boolean createCube(int newSize)
......
304 259

  
305 260
///////////////////////////////////////////////////////////////////////////////////////////////////
306 261

  
307
   private void createCubeNow(int newSize)
262
   private void recomputeScaleFactor(int screenWidth, int screenHeight)
308 263
     {
309
     if( mOldCube!=null ) mOldCube.releaseResources();
310
     mOldCube = mNewCube;
264
     mCubeSizeInScreenSpace = CUBE_SCREEN_RATIO*(screenWidth>screenHeight ? screenHeight:screenWidth);
311 265

  
312
     DistortedTexture texture = new DistortedTexture(TEXTURE_SIZE,TEXTURE_SIZE);
313
     DistortedEffects effects = new DistortedEffects();
266
     if( mNewCube!=null )
267
       {
268
       mNewCube.recomputeScaleFactor(screenWidth, screenHeight, mCubeSizeInScreenSpace);
269
       }
270
     }
314 271

  
315
     mNewCube = new RubikCube(newSize, mQuatCurrent, mQuatAccumulated, texture, mMesh, effects);
316
     mNewCube.createTexture();
272
///////////////////////////////////////////////////////////////////////////////////////////////////
317 273

  
318
     if( mScreenWidth!=0 )
274
   void scrambleCube(int num)
275
     {
276
     if( mCanScramble )
319 277
       {
320
       recomputeScaleFactor(mScreenWidth,mScreenHeight);
278
       mScrambleCube = true;
279
       mScrambleCubeNum = num;
321 280
       }
322 281
     }
323 282

  
324 283
///////////////////////////////////////////////////////////////////////////////////////////////////
325 284

  
326
   private void recomputeScaleFactor(int screenWidth, int screenHeight)
285
   void solveCube()
327 286
     {
328
     mCubeSizeInScreenSpace = CUBE_SCREEN_RATIO*(screenWidth>screenHeight ? screenHeight:screenWidth);
329

  
330
     if( mNewCube!=null )
287
     if( mCanSolve )
331 288
       {
332
       mNewCube.recomputeScaleFactor(screenWidth, screenHeight, mCubeSizeInScreenSpace);
289
       mSolveCube = true;
333 290
       }
334 291
     }
335 292

  
336 293
///////////////////////////////////////////////////////////////////////////////////////////////////
337 294

  
338
   void scrambleCube(int num)
295
   private void createCubeNow(int newSize)
339 296
     {
340
     if( mCanScramble )
297
     if( mOldCube!=null ) mOldCube.releaseResources();
298
     mOldCube = mNewCube;
299

  
300
     DistortedTexture texture = new DistortedTexture(TEXTURE_SIZE,TEXTURE_SIZE);
301
     DistortedEffects effects = new DistortedEffects();
302

  
303
     mNewCube = new RubikCube(newSize, mQuatCurrent, mQuatAccumulated, texture, mMesh, effects);
304
     mNewCube.createTexture();
305

  
306
     if( mScreenWidth!=0 )
341 307
       {
342
       mScrambleCube = true;
343
       mScrambleCubeNum = num;
308
       recomputeScaleFactor(mScreenWidth,mScreenHeight);
344 309
       }
345 310
     }
346 311

  
347 312
///////////////////////////////////////////////////////////////////////////////////////////////////
348 313

  
349
   private void scrambleCubeNow()
314
   private void changeSizeNow()
350 315
     {
351 316
     try
352 317
       {
353
       ScrambleEffect effect = ScrambleEffect.create(mType[2]);
354
       mScrambleEffectID = effect.start(mPos[2],mNewCube,mScrambleCubeNum,this);
318
       int pos0 = RubikSettingsEnum.getEnum(0).getCurrentPos();
319
       int typ0 = RubikSettingsEnum.getEnum(0).getCurrentType();
320
       int pos = RubikSettingsEnum.translatePos(pos0)+1;
321
       SizeChangeEffect effect = SizeChangeEffect.create(typ0);
322
       mSizeChangeEffectID = effect.start(pos,mScreen,mOldCube,mNewCube,this);
355 323
       }
356 324
     catch(Exception ex)
357 325
       {
358
       android.util.Log.e("Renderer", "failed to create ScrambleEffect, exception: "+ex.getMessage());
326
       android.util.Log.e("Renderer", "failed to create SizeChangeEffect, exception: "+ex.getMessage());
359 327

  
328
       if( mOldCube!=null ) mScreen.detach(mOldCube);
329
       mScreen.attach(mNewCube);
360 330
       mCanRotate = true;
361 331
       mCanDrag   = true;
362 332
       }
......
364 334

  
365 335
///////////////////////////////////////////////////////////////////////////////////////////////////
366 336

  
367
   void solveCube()
337
   private void solveCubeNow()
368 338
     {
369
     if( mCanSolve )
339
     try
370 340
       {
371
       mSolveCube = true;
341
       int pos1 = RubikSettingsEnum.getEnum(1).getCurrentPos();
342
       int typ1 = RubikSettingsEnum.getEnum(1).getCurrentType();
343
       int pos = RubikSettingsEnum.translatePos(pos1)+1;
344
       SolveEffect effect = SolveEffect.create(typ1);
345
       mSolveEffectID = effect.start(pos,mScreen,mNewCube,this);
346
       }
347
     catch(Exception ex)
348
       {
349
       android.util.Log.e("Renderer", "failed to create SolveEffect, exception: "+ex.getMessage());
350

  
351
       mNewCube.solve();    //
352
       mCanRotate = true;   // just solve the cube
353
       mCanDrag   = true;   //
372 354
       }
373 355
     }
374 356

  
375 357
///////////////////////////////////////////////////////////////////////////////////////////////////
376 358

  
377
   private void solveCubeNow()
359
   private void scrambleCubeNow()
378 360
     {
379 361
     try
380 362
       {
381
       SolveEffect effect = SolveEffect.create(mType[1]);
382
       mSolveEffectID = effect.start(mPos[1],mScreen,mNewCube,this);
363
       int pos2 = RubikSettingsEnum.getEnum(2).getCurrentPos();
364
       int typ2 = RubikSettingsEnum.getEnum(2).getCurrentType();
365
       int pos = RubikSettingsEnum.translatePos(pos2)+1;
366
       ScrambleEffect effect = ScrambleEffect.create(typ2);
367
       mScrambleEffectID = effect.start(pos,mNewCube,mScrambleCubeNum,this);
383 368
       }
384 369
     catch(Exception ex)
385 370
       {
386
       android.util.Log.e("Renderer", "failed to create SolveEffect, exception: "+ex.getMessage());
371
       android.util.Log.e("Renderer", "failed to create ScrambleEffect, exception: "+ex.getMessage());
387 372

  
388
       mNewCube.solve();    //
389
       mCanRotate = true;   // just solve the cube
390
       mCanDrag   = true;   //
373
       mCanRotate = true;
374
       mCanDrag   = true;
391 375
       }
392 376
     }
393 377

  

Also available in: Unified diff