Revision 2e8ec627
Added by Leszek Koltunski over 5 years ago
| src/main/java/org/distorted/dialogs/RubikDialogPatternView.java | ||
|---|---|---|
| 159 | 159 |
RubikObjectList list = RubikPatternList.getObject(mTab); |
| 160 | 160 |
int size = RubikPatternList.getSize(mTab); |
| 161 | 161 |
|
| 162 |
act.changeObject( list, size, moves);
|
|
| 162 |
act.setupObject( list, size, moves);
|
|
| 163 | 163 |
|
| 164 | 164 |
RubikStatePattern state = (RubikStatePattern) RubikState.PATT.getStateClass(); |
| 165 | 165 |
state.setPattern(act, mTab, category, ii); |
| src/main/java/org/distorted/main/RubikActivity.java | ||
|---|---|---|
| 102 | 102 |
if( sizeIndex>=0 && sizeIndex<sizes.length ) |
| 103 | 103 |
{
|
| 104 | 104 |
success = true; |
| 105 |
view.getPostRender().changeObject( obj, size, null );
|
|
| 105 |
view.getPostRender().changeObject(obj,size);
|
|
| 106 | 106 |
} |
| 107 | 107 |
|
| 108 | 108 |
} |
| ... | ... | |
| 113 | 113 |
int s = RubikStatePlay.DEF_SIZE; |
| 114 | 114 |
|
| 115 | 115 |
play.setObjectAndSize(obj,s); |
| 116 |
view.getPostRender().changeObject(obj,s, null);
|
|
| 116 |
view.getPostRender().changeObject(obj,s); |
|
| 117 | 117 |
} |
| 118 | 118 |
} |
| 119 | 119 |
|
| ... | ... | |
| 193 | 193 |
|
| 194 | 194 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
| 195 | 195 |
|
| 196 |
public void changeObject(RubikObjectList object, int size, int[][] moves)
|
|
| 196 |
public void changeObject(RubikObjectList object, int size) |
|
| 197 | 197 |
{
|
| 198 | 198 |
RubikSurfaceView view = findViewById(R.id.rubikSurfaceView); |
| 199 | 199 |
RubikPostRender post = view.getPostRender(); |
| 200 |
post.changeObject(object,size,moves); |
|
| 200 |
post.changeObject(object,size); |
|
| 201 |
} |
|
| 202 |
|
|
| 203 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
| 204 |
|
|
| 205 |
public void setupObject(RubikObjectList object, int size, int[][] moves) |
|
| 206 |
{
|
|
| 207 |
RubikSurfaceView view = findViewById(R.id.rubikSurfaceView); |
|
| 208 |
RubikPostRender post = view.getPostRender(); |
|
| 209 |
post.setupObject(object,size,moves); |
|
| 201 | 210 |
} |
| 202 | 211 |
|
| 203 | 212 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
| src/main/java/org/distorted/main/RubikPostRender.java | ||
|---|---|---|
| 43 | 43 |
|
| 44 | 44 |
private RubikSurfaceView mView; |
| 45 | 45 |
private boolean mFinishRotation, mRemoveRotation, mRemovePatternRotation, mAddRotation, |
| 46 |
mSetQuatCurrent, mSetQuatAccumulated, mChangeObject, mSolveObject, |
|
| 46 |
mSetQuatCurrent, mSetQuatAccumulated, mChangeObject, mSetupObject, mSolveObject,
|
|
| 47 | 47 |
mScrambleObject, mInitializeObject, mSetTextureMap, mResetAllTextureMaps; |
| 48 | 48 |
private boolean mCanRotate, mCanPlay; |
| 49 | 49 |
private boolean mIsSolved; |
| ... | ... | |
| 77 | 77 |
mSetQuatCurrent = false; |
| 78 | 78 |
mSetQuatAccumulated = false; |
| 79 | 79 |
mChangeObject = false; |
| 80 |
mSetupObject = false; |
|
| 80 | 81 |
mSolveObject = false; |
| 81 | 82 |
mScrambleObject = false; |
| 82 | 83 |
|
| ... | ... | |
| 233 | 234 |
{
|
| 234 | 235 |
mChangeObject = false; |
| 235 | 236 |
|
| 237 |
if ( mNewObject==null || mNewObject.getObjectList()!=mNextObject || mNewObject.getSize()!=mNextSize) |
|
| 238 |
{
|
|
| 239 |
mCanRotate= false; |
|
| 240 |
mCanPlay = false; |
|
| 241 |
createObjectNow(mNextObject, mNextSize, null); |
|
| 242 |
doEffectNow( BaseEffect.Type.SIZECHANGE ); |
|
| 243 |
} |
|
| 244 |
} |
|
| 245 |
|
|
| 246 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
| 247 |
|
|
| 248 |
private void setupObjectNow() |
|
| 249 |
{
|
|
| 250 |
mSetupObject = false; |
|
| 251 |
|
|
| 236 | 252 |
if ( mNewObject==null || mNewObject.getObjectList()!=mNextObject || mNewObject.getSize()!=mNextSize) |
| 237 | 253 |
{
|
| 238 | 254 |
mCanRotate= false; |
| ... | ... | |
| 352 | 368 |
|
| 353 | 369 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
| 354 | 370 |
|
| 355 |
void changeObject(RubikObjectList object, int size, int[][] moves)
|
|
| 371 |
void changeObject(RubikObjectList object, int size) |
|
| 356 | 372 |
{
|
| 357 | 373 |
if( size>0 ) |
| 358 | 374 |
{
|
| 359 | 375 |
mChangeObject = true; |
| 360 | 376 |
mNextObject = object; |
| 361 | 377 |
mNextSize = size; |
| 378 |
} |
|
| 379 |
} |
|
| 380 |
|
|
| 381 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
| 382 |
|
|
| 383 |
void setupObject(RubikObjectList object, int size, int[][] moves) |
|
| 384 |
{
|
|
| 385 |
if( size>0 ) |
|
| 386 |
{
|
|
| 387 |
mSetupObject= true; |
|
| 388 |
mNextObject = object; |
|
| 389 |
mNextSize = size; |
|
| 362 | 390 |
mNextMoves = moves; |
| 363 | 391 |
} |
| 364 | 392 |
} |
| ... | ... | |
| 412 | 440 |
if( mRemoveRotation ) removeRotationNow(); |
| 413 | 441 |
if( mRemovePatternRotation ) removePatternRotationNow(); |
| 414 | 442 |
if( mChangeObject ) changeObjectNow(); |
| 443 |
if( mSetupObject ) setupObjectNow(); |
|
| 415 | 444 |
if( mSolveObject ) solveObjectNow(); |
| 416 | 445 |
if( mScrambleObject ) scrambleObjectNow(); |
| 417 | 446 |
if( mAddRotation ) addRotationNow(); |
| src/main/java/org/distorted/main/RubikSurfaceView.java | ||
|---|---|---|
| 375 | 375 |
|
| 376 | 376 |
if( RubikState.getCurrentState()==RubikState.READ ) |
| 377 | 377 |
{
|
| 378 |
RubikStateSolving solving = (RubikStateSolving)RubikState.SOLV.getStateClass(); |
|
| 379 |
solving.resetElapsed(); |
|
| 380 |
|
|
| 378 | 381 |
final RubikActivity act = (RubikActivity)getContext(); |
| 379 | 382 |
|
| 380 | 383 |
act.runOnUiThread(new Runnable() |
| ... | ... | |
| 385 | 388 |
RubikState.switchState( act, RubikState.SOLV); |
| 386 | 389 |
} |
| 387 | 390 |
}); |
| 388 |
|
|
| 389 |
RubikStateSolving solving = (RubikStateSolving)RubikState.SOLV.getStateClass(); |
|
| 390 |
solving.startCounting( (RubikActivity)getContext() ); |
|
| 391 | 391 |
} |
| 392 | 392 |
|
| 393 | 393 |
mBeginningRotation = false; |
| src/main/java/org/distorted/states/RubikStatePattern.java | ||
|---|---|---|
| 71 | 71 |
int objectPlay= play.getObject(); |
| 72 | 72 |
int sizePlay = play.getSize(); |
| 73 | 73 |
|
| 74 |
act.changeObject(RubikObjectList.getObject(objectPlay),sizePlay,null);
|
|
| 74 |
act.changeObject(RubikObjectList.getObject(objectPlay),sizePlay); |
|
| 75 | 75 |
} |
| 76 | 76 |
} |
| 77 | 77 |
|
| src/main/java/org/distorted/states/RubikStatePlay.java | ||
|---|---|---|
| 280 | 280 |
{
|
| 281 | 281 |
mObject = obj; |
| 282 | 282 |
mSize = sizes[size]; |
| 283 |
act.changeObject(list,sizes[size],null);
|
|
| 283 |
act.changeObject(list,sizes[size]); |
|
| 284 | 284 |
|
| 285 | 285 |
int sizeIndex = RubikObjectList.getSizeIndex(mObject,mSize); |
| 286 | 286 |
int maxLevel = RubikObjectList.getMaxLevel(mObject, sizeIndex); |
| src/main/java/org/distorted/states/RubikStateSolver.java | ||
|---|---|---|
| 81 | 81 |
mCurrentObject = ImplementedSolversList.getObject(0); |
| 82 | 82 |
mCurrentObjectSize = ImplementedSolversList.getObjectSize(0); |
| 83 | 83 |
|
| 84 |
act.changeObject(mCurrentObject, mCurrentObjectSize, null);
|
|
| 84 |
act.setupObject(mCurrentObject, mCurrentObjectSize, null);
|
|
| 85 | 85 |
RubikStatePlay play = (RubikStatePlay)RubikState.PLAY.getStateClass(); |
| 86 | 86 |
play.setObjectAndSize(mCurrentObject, mCurrentObjectSize); |
| 87 | 87 |
|
| src/main/java/org/distorted/states/RubikStateSolving.java | ||
|---|---|---|
| 53 | 53 |
private ImageButton mPrevButton; |
| 54 | 54 |
private boolean mCanPrevMove; |
| 55 | 55 |
private ArrayList<Move> mMoves; |
| 56 |
private long mElapsed; |
|
| 56 | 57 |
|
| 57 | 58 |
private static class Move |
| 58 | 59 |
{
|
| ... | ... | |
| 86 | 87 |
{
|
| 87 | 88 |
mCanPrevMove = true; |
| 88 | 89 |
|
| 90 |
startCounting(act); |
|
| 91 |
|
|
| 89 | 92 |
if( mMoves==null ) mMoves = new ArrayList<>(); |
| 90 | 93 |
else mMoves.clear(); |
| 91 | 94 |
|
| ... | ... | |
| 97 | 100 |
LinearLayout layoutTop = act.findViewById(R.id.upperBar); |
| 98 | 101 |
layoutTop.removeAllViews(); |
| 99 | 102 |
mTime = (TextView)inflater.inflate(R.layout.upper_text, null); |
| 100 |
mTime.setText(act.getString(R.string.tm_placeholder,0,0)); |
|
| 103 |
int elapsed = (int)mElapsed/1000; |
|
| 104 |
mTime.setText(act.getString(R.string.tm_placeholder,elapsed/60,elapsed%60)); |
|
| 101 | 105 |
layoutTop.addView(mTime); |
| 102 | 106 |
|
| 103 | 107 |
// BOT //////////////////////////// |
| ... | ... | |
| 212 | 216 |
{
|
| 213 | 217 |
mPrevButton = null; |
| 214 | 218 |
|
| 215 |
editor.putLong("stateSolving_startTime" , mStartTime);
|
|
| 219 |
mElapsed = System.currentTimeMillis()-mStartTime; |
|
| 220 |
editor.putLong("stateSolving_elapsed" , mElapsed);
|
|
| 216 | 221 |
mScores.savePreferences(editor); |
| 217 | 222 |
} |
| 218 | 223 |
|
| ... | ... | |
| 220 | 225 |
|
| 221 | 226 |
public void restorePreferences(SharedPreferences preferences) |
| 222 | 227 |
{
|
| 223 |
mStartTime = preferences.getLong("stateSolving_startTime" , 0 );
|
|
| 228 |
mElapsed = preferences.getLong("stateSolving_elapsed" , 0 );
|
|
| 224 | 229 |
mScores.restorePreferences(preferences); |
| 225 | 230 |
} |
| 226 | 231 |
|
| 227 | 232 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
| 228 | 233 |
|
| 229 |
public void startCounting(final RubikActivity act)
|
|
| 234 |
private void startCounting(final RubikActivity act)
|
|
| 230 | 235 |
{
|
| 231 | 236 |
if( !mRunning ) |
| 232 | 237 |
{
|
| 233 | 238 |
mRunning = true; |
| 234 |
mStartTime = System.currentTimeMillis(); |
|
| 239 |
mStartTime = System.currentTimeMillis() - mElapsed;
|
|
| 235 | 240 |
mTimer = new Timer(); |
| 236 | 241 |
|
| 237 | 242 |
mTimer.scheduleAtFixedRate(new TimerTask() |
| ... | ... | |
| 266 | 271 |
} |
| 267 | 272 |
mRunning = false; |
| 268 | 273 |
|
| 269 |
long timeTaken = System.currentTimeMillis()-mStartTime;
|
|
| 274 |
mElapsed = System.currentTimeMillis()-mStartTime;
|
|
| 270 | 275 |
|
| 271 | 276 |
RubikStatePlay play = (RubikStatePlay)RubikState.PLAY.getStateClass(); |
| 272 | 277 |
int object = play.getObject(); |
| ... | ... | |
| 274 | 279 |
int level = play.getLevel(); |
| 275 | 280 |
int realSize= RubikObjectList.getSizeIndex(object,size); |
| 276 | 281 |
|
| 277 |
boolean isNew = mScores.setRecord(object, realSize, level, timeTaken);
|
|
| 282 |
boolean isNew = mScores.setRecord(object, realSize, level, mElapsed);
|
|
| 278 | 283 |
|
| 279 |
return isNew ? timeTaken : -timeTaken;
|
|
| 284 |
return isNew ? mElapsed : -mElapsed;
|
|
| 280 | 285 |
} |
| 281 | 286 |
|
| 282 | 287 |
return 0; |
| 283 | 288 |
} |
| 284 | 289 |
|
| 290 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
| 291 |
|
|
| 292 |
public void resetElapsed() |
|
| 293 |
{
|
|
| 294 |
mElapsed = 0; |
|
| 295 |
} |
|
| 296 |
|
|
| 285 | 297 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
| 286 | 298 |
|
| 287 | 299 |
public void onActionFinished(final long effectID) |
Also available in: Unified diff
Fixes for the fact that one could easily cheat - just pause the app while solving and come back to it, the time would reset to 0 and the object to unscrambled :(