Project

General

Profile

« Previous | Next » 

Revision 55e6be1d

Added by Leszek Koltunski almost 3 years ago

Abstract the part that controls the 'Locked' and 'Back Moves' buttons from the two activities: the main one and the tutorial one.
This code had been duplicated there.

View differences:

src/main/java/org/distorted/tutorials/TutorialPreRender.java
24 24

  
25 25
import org.distorted.effects.BaseEffect;
26 26
import org.distorted.effects.EffectController;
27
import org.distorted.helpers.MovesFinished;
28
import org.distorted.helpers.TwistyPreRender;
27 29
import org.distorted.objects.ObjectList;
28 30
import org.distorted.objects.TwistyObject;
29
import org.distorted.main.RubikPreRender.ActionFinishedListener;
30
import org.distorted.network.RubikScores;
31 31

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

  
34
public class TutorialPreRender implements EffectController
34
public class TutorialPreRender implements EffectController, TwistyPreRender
35 35
  {
36
  private ActionFinishedListener mAddActionListener;
36
  private MovesFinished mAddActionListener;
37 37
  private final TutorialSurfaceView mView;
38 38
  private boolean mFinishRotation, mRemoveRotation, mAddRotation,
39 39
                  mSetQuat, mChangeObject, mSetupObject, mSolveObject, mScrambleObject,
40 40
                  mInitializeObject, mResetAllTextureMaps, mRemovePatternRotation;
41
  private boolean mCanPlay, mCanRotate;
41
  private boolean mUIBlocked, mTouchBlocked;
42 42
  private boolean mIsSolved;
43 43
  private ObjectList mNextObject;
44 44
  private int mNextSize;
45 45
  private long mRotationFinishedID;
46 46
  private int mScreenWidth;
47
  private int[][] mNextMoves;
48 47
  private TwistyObject mOldObject, mNewObject;
49 48
  private int mAddRotationAxis, mAddRotationRowBitmap, mAddRotationAngle;
50 49
  private long mAddRotationDuration;
......
67 66
    mSolveObject    = false;
68 67
    mScrambleObject = false;
69 68

  
70
    mCanRotate      = true;
71
    mCanPlay        = true;
69
    unblockEverything();
70

  
72 71
    mOldObject      = null;
73 72
    mNewObject      = null;
74 73

  
......
80 79

  
81 80
///////////////////////////////////////////////////////////////////////////////////////////////////
82 81

  
83
  private void createObjectNow(ObjectList object, int size, int[][] moves)
82
  private void createObjectNow(ObjectList object, int size)
84 83
    {
85 84
    if( mOldObject!=null ) mOldObject.releaseResources();
86 85
    mOldObject = mNewObject;
......
88 87
    Context con = mView.getContext();
89 88
    Resources res = con.getResources();
90 89

  
91
    mNewObject = object.create(size, mView.getQuat(), moves, res, mScreenWidth);
90
    mNewObject = object.create(size, mView.getQuat(), null, res, mScreenWidth);
92 91

  
93 92
    if( mNewObject!=null )
94 93
      {
......
114 113
      }
115 114
    catch( Exception ex )
116 115
      {
117
      mCanPlay  = true;
118
      mCanRotate= true;
116
      android.util.Log.e("renderer", "exception starting effect: "+ex.getMessage());
117
      unblockEverything();
119 118
      }
120 119
    }
121 120

  
......
143 142
    mNewObject.removeRotationNow();
144 143

  
145 144
    boolean solved = mNewObject.isSolved();
146

  
147
    if( solved && !mIsSolved )
148
      {
149
      doEffectNow( BaseEffect.Type.WIN );
150
      }
151
    else
152
      {
153
      mCanPlay = true;
154
      }
145
    unblockEverything();
146
    if( solved && !mIsSolved ) doEffectNow( BaseEffect.Type.WIN );
155 147

  
156 148
    mIsSolved = solved;
157 149
    }
......
173 165

  
174 166
    if( mAddRotationID==0 ) // failed to add effect - should never happen
175 167
      {
176
      mCanPlay  = true;
177
      mCanRotate= true;
168
      unblockEverything();
178 169
      }
179 170
    }
180 171

  
......
183 174
  private void finishRotationNow()
184 175
    {
185 176
    mFinishRotation = false;
186
    mCanPlay        = false;
177
    blockEverything();
187 178
    mRotationFinishedID = mNewObject.finishRotationNow(this, mNearestAngle);
188 179

  
189 180
    if( mRotationFinishedID==0 ) // failed to add effect - should never happen
190 181
      {
191
      mCanPlay = true;
182
      unblockEverything();
192 183
      }
193 184
    }
194 185

  
......
200 191

  
201 192
    if ( mNewObject==null || mNewObject.getObjectList()!=mNextObject || mNewObject.getNumLayers()!=mNextSize)
202 193
      {
203
      mCanPlay  = false;
204
      createObjectNow(mNextObject, mNextSize, null);
194
      blockEverything();
195
      createObjectNow(mNextObject, mNextSize);
205 196
      doEffectNow( BaseEffect.Type.SIZECHANGE );
206 197
      }
207 198
    }
......
214 205

  
215 206
    if ( mNewObject==null || mNewObject.getObjectList()!=mNextObject || mNewObject.getNumLayers()!=mNextSize)
216 207
      {
217
      mCanPlay  = false;
218
      createObjectNow(mNextObject, mNextSize, mNextMoves);
208
      blockEverything();
209
      createObjectNow(mNextObject, mNextSize);
219 210
      doEffectNow( BaseEffect.Type.SIZECHANGE );
220 211
      }
221 212
    else
222 213
      {
223
      mNewObject.initializeObject(mNextMoves);
214
      mNewObject.initializeObject(null);
224 215
      }
225 216
    }
226 217

  
227 218
///////////////////////////////////////////////////////////////////////////////////////////////////
228 219

  
229
  private void solveObjectNow()
220
  private void scrambleObjectNow()
230 221
    {
231
    mSolveObject = false;
232
    mCanPlay     = false;
233
    doEffectNow( BaseEffect.Type.SOLVE );
222
    mScrambleObject = false;
223
    mIsSolved       = false;
224
    blockEverything();
225
    doEffectNow( BaseEffect.Type.SCRAMBLE );
234 226
    }
235 227

  
236 228
///////////////////////////////////////////////////////////////////////////////////////////////////
237 229

  
238
  private void scrambleObjectNow()
230
  private void solveObjectNow()
239 231
    {
240
    mScrambleObject = false;
241
    mCanPlay        = false;
242
    mCanRotate      = false;
243
    mIsSolved       = false;
244

  
245
    doEffectNow( BaseEffect.Type.SCRAMBLE );
232
    mSolveObject = false;
233
    blockEverything();
234
    doEffectNow( BaseEffect.Type.SOLVE );
246 235
    }
247 236

  
248 237
///////////////////////////////////////////////////////////////////////////////////////////////////
......
250 239
  private void initializeObjectNow()
251 240
    {
252 241
    mInitializeObject = false;
253
    mNewObject.initializeObject(mNextMoves);
242
    mNewObject.initializeObject(null);
254 243
    }
255 244

  
256 245
///////////////////////////////////////////////////////////////////////////////////////////////////
......
333 322
// PUBLIC API
334 323
///////////////////////////////////////////////////////////////////////////////////////////////////
335 324

  
336
  public void addRotation(ActionFinishedListener listener, int axis, int rowBitmap, int angle, long duration)
325
  boolean isTouchBlocked()
326
    {
327
    return mTouchBlocked;
328
    }
329

  
330
///////////////////////////////////////////////////////////////////////////////////////////////////
331

  
332
  public boolean isUINotBlocked()
333
    {
334
    return !mUIBlocked;
335
    }
336

  
337
///////////////////////////////////////////////////////////////////////////////////////////////////
338

  
339
  public void blockEverything()
340
    {
341
    mUIBlocked   = true;
342
    mTouchBlocked= true;
343
    }
344

  
345
///////////////////////////////////////////////////////////////////////////////////////////////////
346

  
347
  public void blockTouch()
348
    {
349
    mTouchBlocked= true;
350
    }
351

  
352
///////////////////////////////////////////////////////////////////////////////////////////////////
353

  
354
  public void unblockEverything()
355
    {
356
    mUIBlocked   = false;
357
    mTouchBlocked= false;
358
    }
359

  
360
///////////////////////////////////////////////////////////////////////////////////////////////////
361

  
362
  public void unblockTouch()
363
    {
364
    mTouchBlocked= false;
365
    }
366

  
367
///////////////////////////////////////////////////////////////////////////////////////////////////
368

  
369
  public void addRotation(MovesFinished listener, int axis, int rowBitmap, int angle, long duration)
337 370
    {
338 371
    mAddRotation = true;
339 372

  
......
344 377
    mAddRotationDuration  = duration;
345 378
    }
346 379

  
347
///////////////////////////////////////////////////////////////////////////////////////////////////
348

  
349
  boolean canRotate()
350
    {
351
    return mCanRotate;
352
    }
353

  
354 380
///////////////////////////////////////////////////////////////////////////////////////////////////
355 381

  
356 382
  public int getNumScrambles()
......
362 388

  
363 389
  public void solveObject()
364 390
    {
365
    if( mCanPlay )
391
    if( !mUIBlocked )
366 392
      {
367 393
      mSolveObject = true;
368 394
      }
......
372 398

  
373 399
  public void scrambleObject(int num)
374 400
    {
375
    if( mCanPlay )
401
    if( !mUIBlocked )
376 402
      {
377 403
      mScrambleObject = true;
378 404
      mScrambleObjectNum = num;
......
417 443
      }
418 444
    else
419 445
      {
420
      mCanPlay   = true;
421
      mCanRotate = true;
446
      unblockEverything();  // buggy? I think we shouldn't do it if the effect is of type 'WIN'
422 447
      }
423 448
    }
424 449
  }

Also available in: Unified diff