Revision 3f372405
Added by Leszek Koltunski over 4 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.