Revision 3f372405
Added by Leszek Koltunski over 3 years ago
src/main/java/org/distorted/main/RubikPreRender.java | ||
---|---|---|
97 | 97 |
mSolveObject = false; |
98 | 98 |
mScrambleObject = false; |
99 | 99 |
|
100 |
mCanRotate = true; |
|
101 |
mCanPlay = true; |
|
100 |
unblockEverything(); |
|
102 | 101 |
|
103 | 102 |
mOldObject = null; |
104 | 103 |
mNewObject = null; |
... | ... | |
146 | 145 |
|
147 | 146 |
private void doEffectNow(BaseEffect.Type type) |
148 | 147 |
{ |
149 |
int index = type.ordinal(); |
|
150 |
|
|
151 | 148 |
try |
152 | 149 |
{ |
150 |
int index = type.ordinal(); |
|
153 | 151 |
mEffectID[index] = type.startEffect(mView.getRenderer().getScreen(),this); |
154 | 152 |
} |
155 | 153 |
catch( Exception ex ) |
156 | 154 |
{ |
157 | 155 |
android.util.Log.e("renderer", "exception starting effect: "+ex.getMessage()); |
158 |
|
|
159 |
mCanPlay = true; |
|
160 |
mCanRotate = true; |
|
156 |
unblockEverything(); |
|
161 | 157 |
} |
162 | 158 |
} |
163 | 159 |
|
... | ... | |
188 | 184 |
} |
189 | 185 |
} |
190 | 186 |
|
191 |
mCanRotate = true; |
|
192 |
mCanPlay = true; |
|
187 |
unblockEverything(); |
|
193 | 188 |
doEffectNow( BaseEffect.Type.WIN ); |
194 | 189 |
} |
195 | 190 |
else |
196 | 191 |
{ |
197 |
mCanRotate = true; |
|
198 |
mCanPlay = true; |
|
192 |
unblockEverything(); |
|
199 | 193 |
} |
200 | 194 |
|
201 | 195 |
mIsSolved = solved; |
... | ... | |
234 | 228 |
|
235 | 229 |
if( mAddRotationID==0 ) // failed to add effect - should never happen |
236 | 230 |
{ |
237 |
mCanRotate = true; |
|
238 |
mCanPlay = true; |
|
231 |
unblockEverything(); |
|
239 | 232 |
} |
240 | 233 |
} |
241 | 234 |
|
... | ... | |
244 | 237 |
private void finishRotationNow() |
245 | 238 |
{ |
246 | 239 |
mFinishRotation = false; |
247 |
mCanRotate = false; |
|
248 |
mCanPlay = false; |
|
240 |
blockEverything(); |
|
249 | 241 |
mRotationFinishedID = mNewObject.finishRotationNow(this, mNearestAngle); |
250 | 242 |
|
251 | 243 |
if( mRotationFinishedID==0 ) // failed to add effect - should never happen |
252 | 244 |
{ |
253 |
mCanRotate = true; |
|
254 |
mCanPlay = true; |
|
245 |
unblockEverything(); |
|
255 | 246 |
} |
256 | 247 |
} |
257 | 248 |
|
... | ... | |
263 | 254 |
|
264 | 255 |
if ( mNewObject==null || mNewObject.getObjectList()!=mNextObject || mNewObject.getNumLayers()!=mNextSize) |
265 | 256 |
{ |
266 |
mCanRotate= false; |
|
267 |
mCanPlay = false; |
|
257 |
blockEverything(); |
|
268 | 258 |
createObjectNow(mNextObject, mNextSize, null); |
269 | 259 |
doEffectNow( BaseEffect.Type.SIZECHANGE ); |
270 | 260 |
} |
... | ... | |
278 | 268 |
|
279 | 269 |
if ( mNewObject==null || mNewObject.getObjectList()!=mNextObject || mNewObject.getNumLayers()!=mNextSize) |
280 | 270 |
{ |
281 |
mCanRotate= false; |
|
282 |
mCanPlay = false; |
|
271 |
blockEverything(); |
|
283 | 272 |
createObjectNow(mNextObject, mNextSize, mNextMoves); |
284 | 273 |
doEffectNow( BaseEffect.Type.SIZECHANGE ); |
285 | 274 |
} |
... | ... | |
294 | 283 |
private void scrambleObjectNow() |
295 | 284 |
{ |
296 | 285 |
mScrambleObject = false; |
297 |
mCanRotate = false; |
|
298 |
mCanPlay = false; |
|
299 | 286 |
mIsSolved = false; |
287 |
blockEverything(); |
|
300 | 288 |
RubikScores.getInstance().incrementNumPlays(); |
301 | 289 |
doEffectNow( BaseEffect.Type.SCRAMBLE ); |
302 | 290 |
} |
... | ... | |
306 | 294 |
private void solveObjectNow() |
307 | 295 |
{ |
308 | 296 |
mSolveObject = false; |
309 |
mCanRotate = false; |
|
310 |
mCanPlay = false; |
|
297 |
blockEverything(); |
|
311 | 298 |
doEffectNow( BaseEffect.Type.SOLVE ); |
312 | 299 |
} |
313 | 300 |
|
... | ... | |
697 | 684 |
{ |
698 | 685 |
if( effectID == mEffectID[i] ) |
699 | 686 |
{ |
700 |
mCanRotate = true; |
|
701 |
mCanPlay = true; |
|
687 |
unblockEverything(); |
|
702 | 688 |
|
703 | 689 |
if( i==BaseEffect.Type.SCRAMBLE.ordinal() ) |
704 | 690 |
{ |
src/main/java/org/distorted/screens/RubikScreenBase.java | ||
---|---|---|
34 | 34 |
|
35 | 35 |
abstract class RubikScreenBase extends RubikScreenAbstract implements RubikPreRender.ActionFinishedListener |
36 | 36 |
{ |
37 |
private static final int DURATION_MILLIS = 750;
|
|
37 |
private static final int REVOLUTION_MILLIS = 2000;
|
|
38 | 38 |
|
39 | 39 |
private ImageButton mPrevButton, mLockButton; |
40 |
|
|
41 | 40 |
private boolean mCanPrevMove; |
42 | 41 |
|
43 | 42 |
private static class Move |
... | ... | |
65 | 64 |
if( numMoves>0 ) |
66 | 65 |
{ |
67 | 66 |
RubikScreenBase.Move move = mMoves.remove(numMoves-1); |
68 |
TwistyObject object = pre.getObject(); |
|
69 |
|
|
70 | 67 |
int axis = move.mAxis; |
71 | 68 |
int row = (1<<move.mRow); |
72 | 69 |
int angle = move.mAngle; |
73 |
int basic = object.getBasicAngle()[axis]; |
|
74 |
int numRot= Math.abs(angle*basic/360); |
|
70 |
int duration= (int)(Math.abs(angle/360.0f)*REVOLUTION_MILLIS); |
|
75 | 71 |
|
76 | 72 |
if( angle!=0 ) |
77 | 73 |
{ |
78 | 74 |
mCanPrevMove = false; |
79 |
pre.addRotation(this, axis, row, -angle, numRot*DURATION_MILLIS);
|
|
75 |
pre.addRotation(this, axis, row, -angle, duration);
|
|
80 | 76 |
} |
81 | 77 |
else |
82 | 78 |
{ |
Also available in: Unified diff
Backing moves: constant angle speed.