Revision 55e6be1d
Added by Leszek Koltunski almost 3 years ago
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
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.