Revision 1088a219
Added by Leszek Koltunski almost 2 years ago
src/main/java/org/distorted/screens/RubikScreenPlay.java | ||
---|---|---|
40 | 40 |
|
41 | 41 |
import org.distorted.dialogs.RubikDialogUpdates; |
42 | 42 |
import org.distorted.external.RubikNetwork; |
43 |
import org.distorted.external.RubikScores; |
|
43 | 44 |
import org.distorted.external.RubikUpdates; |
44 | 45 |
|
45 | 46 |
import org.distorted.main.R; |
... | ... | |
70 | 71 |
private PopupWindow mObjectPopup, mMenuPopup; |
71 | 72 |
private WeakReference<RubikActivity> mWeakAct; |
72 | 73 |
private TextView mBubbleUpdates; |
74 |
private Button[] mLevel; |
|
73 | 75 |
private int mObjectSize, mMenuLayoutWidth, mMenuLayoutHeight, mMenuButtonHeight, mMenuTextSize; |
74 | 76 |
private int mLevelValue; |
75 | 77 |
private int mColCount, mRowCount, mMaxRowCount; |
... | ... | |
170 | 172 |
{ |
171 | 173 |
View popupView = mMenuPopup.getContentView(); |
172 | 174 |
popupView.setSystemUiVisibility(RubikActivity.FLAGS); |
175 |
setupLevelColors(); |
|
173 | 176 |
displayPopup(act,view,mMenuPopup,mMenuLayoutWidth,mMenuLayoutHeight,(int)(-mMenuLayoutWidth/2 + width/6),0); |
174 | 177 |
} |
175 | 178 |
} |
... | ... | |
235 | 238 |
if( type==MainEntry.TYPE_OBJECT ) |
236 | 239 |
{ |
237 | 240 |
int ordinal = mainEntry.getOrdinal(); |
238 |
RubikObjectList.setCurrObject(act,ordinal);
|
|
241 |
RubikObjectList.setCurrObject(ordinal); |
|
239 | 242 |
act.changeObject(ordinal,true); |
240 |
if( mMenuPopup!=null ) adjustLevels(act);
|
|
243 |
if( mMenuPopup!=null ) setupLevelColors();
|
|
241 | 244 |
mMovesController.clearMoves(act); |
242 | 245 |
} |
243 | 246 |
else if( type==MainEntry.TYPE_CREATOR ) |
... | ... | |
458 | 461 |
levels.setTextSize(TypedValue.COMPLEX_UNIT_PX, mMenuTextSize); |
459 | 462 |
|
460 | 463 |
setupLevelButtons(act,layout,padding); |
464 |
setupLevelColors(); |
|
461 | 465 |
} |
462 | 466 |
|
463 | 467 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
... | ... | |
469 | 473 |
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(sizeW,sizeH); |
470 | 474 |
params.setMargins(padding/2,0,padding/2,0); |
471 | 475 |
|
472 |
Button level1 = layout.findViewById(R.id.level1); |
|
473 |
level1.setTextSize(TypedValue.COMPLEX_UNIT_PX, mMenuTextSize); |
|
474 |
level1.setLayoutParams(params); |
|
475 |
setupLevelButton(act,level1,1); |
|
476 |
Button level2 = layout.findViewById(R.id.level2); |
|
477 |
level2.setTextSize(TypedValue.COMPLEX_UNIT_PX, mMenuTextSize); |
|
478 |
level2.setLayoutParams(params); |
|
479 |
setupLevelButton(act,level2,2); |
|
480 |
Button level3 = layout.findViewById(R.id.level3); |
|
481 |
level3.setTextSize(TypedValue.COMPLEX_UNIT_PX, mMenuTextSize); |
|
482 |
level3.setLayoutParams(params); |
|
483 |
setupLevelButton(act,level3,3); |
|
484 |
Button level4 = layout.findViewById(R.id.level4); |
|
485 |
level4.setTextSize(TypedValue.COMPLEX_UNIT_PX, mMenuTextSize); |
|
486 |
level4.setLayoutParams(params); |
|
487 |
setupLevelButton(act,level4,4); |
|
488 |
Button level5 = layout.findViewById(R.id.level5); |
|
489 |
level5.setTextSize(TypedValue.COMPLEX_UNIT_PX, mMenuTextSize); |
|
490 |
level5.setLayoutParams(params); |
|
491 |
setupLevelButton(act,level5,5); |
|
492 |
Button level6 = layout.findViewById(R.id.level6); |
|
493 |
level6.setTextSize(TypedValue.COMPLEX_UNIT_PX, mMenuTextSize); |
|
494 |
level6.setLayoutParams(params); |
|
495 |
setupLevelButton(act,level6,6); |
|
496 |
Button level7 = layout.findViewById(R.id.level7); |
|
497 |
level7.setTextSize(TypedValue.COMPLEX_UNIT_PX, mMenuTextSize); |
|
498 |
level7.setLayoutParams(params); |
|
499 |
setupLevelButton(act,level7,7); |
|
500 |
Button level8 = layout.findViewById(R.id.level8); |
|
501 |
level8.setTextSize(TypedValue.COMPLEX_UNIT_PX, mMenuTextSize); |
|
502 |
level8.setLayoutParams(params); |
|
503 |
setupLevelButton(act,level8,8); |
|
504 |
Button levelM = layout.findViewById(R.id.levelM); |
|
505 |
levelM.setTextSize(TypedValue.COMPLEX_UNIT_PX, mMenuTextSize); |
|
506 |
levelM.setLayoutParams(params); |
|
507 |
setupLevelButton(act,levelM,9); |
|
508 |
} |
|
476 |
mLevel = new Button[LEVELS_SHOWN+1]; |
|
509 | 477 |
|
510 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
478 |
mLevel[0] = layout.findViewById(R.id.level1); |
|
479 |
mLevel[1] = layout.findViewById(R.id.level2); |
|
480 |
mLevel[2] = layout.findViewById(R.id.level3); |
|
481 |
mLevel[3] = layout.findViewById(R.id.level4); |
|
482 |
mLevel[4] = layout.findViewById(R.id.level5); |
|
483 |
mLevel[5] = layout.findViewById(R.id.level6); |
|
484 |
mLevel[6] = layout.findViewById(R.id.level7); |
|
485 |
mLevel[7] = layout.findViewById(R.id.level8); |
|
486 |
mLevel[8] = layout.findViewById(R.id.levelM); |
|
511 | 487 |
|
512 |
private void setupLevelButton(RubikActivity act, Button button, int level) |
|
513 |
{ |
|
514 |
button.setOnClickListener( new View.OnClickListener() |
|
488 |
for(int i=0; i<=LEVELS_SHOWN; i++) |
|
489 |
{ |
|
490 |
final int ii = i; |
|
491 |
mLevel[i].setTextSize(TypedValue.COMPLEX_UNIT_PX, mMenuTextSize); |
|
492 |
mLevel[i].setLayoutParams(params); |
|
493 |
mLevel[i].setOnClickListener( new View.OnClickListener() |
|
515 | 494 |
{ |
516 | 495 |
@Override |
517 | 496 |
public void onClick(View v) |
... | ... | |
524 | 503 |
|
525 | 504 |
int currObject = RubikObjectList.getCurrObject(); |
526 | 505 |
RubikObject object = RubikObjectList.getObject(currObject); |
527 |
final int scrambles = level<=LEVELS_SHOWN ? level : (object==null ? 0 : object.getNumScramble()); |
|
528 |
|
|
529 |
mLevelValue = level; |
|
506 |
final int scrambles = ii<LEVELS_SHOWN ? ii+1 : (object==null ? 0 : object.getNumScramble()); |
|
507 |
mLevelValue = ii+1; |
|
530 | 508 |
mShouldReactToEndOfScrambling = true; |
531 | 509 |
control.scrambleObject(scrambles); |
532 | 510 |
} |
533 | 511 |
} |
534 | 512 |
}); |
513 |
} |
|
514 |
} |
|
515 |
|
|
516 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
517 |
|
|
518 |
private void setupLevelColors() |
|
519 |
{ |
|
520 |
int currObject = RubikObjectList.getCurrObject(); |
|
521 |
int dbLevel = RubikObjectList.getDBLevel(currObject); |
|
522 |
RubikScores scores = RubikScores.getInstance(); |
|
523 |
|
|
524 |
for(int i=0; i<=LEVELS_SHOWN; i++) |
|
525 |
{ |
|
526 |
int level = i<LEVELS_SHOWN ? i : dbLevel; |
|
527 |
boolean isSolved = scores.isSolved(currObject,level); |
|
528 |
int icon = isSolved ? R.drawable.ui_solved : R.drawable.ui_notsolved; |
|
529 |
mLevel[i].setCompoundDrawablesWithIntrinsicBounds(icon,0,0,0); |
|
530 |
} |
|
535 | 531 |
} |
536 | 532 |
|
537 | 533 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
... | ... | |
561 | 557 |
|
562 | 558 |
public void restorePreferences(SharedPreferences preferences) |
563 | 559 |
{ |
564 |
mLevelValue = preferences.getInt("play_LevelValue", 0); |
|
565 |
} |
|
566 |
|
|
567 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
568 |
|
|
569 |
public void setCurrObject(RubikActivity act) |
|
570 |
{ |
|
571 |
if( mMenuPopup!=null ) adjustLevels(act); |
|
560 |
mLevelValue = preferences.getInt("play_LevelValue", 0); |
|
572 | 561 |
} |
573 | 562 |
|
574 | 563 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
... | ... | |
616 | 605 |
} |
617 | 606 |
} |
618 | 607 |
|
619 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
620 |
/* |
|
621 |
private void adjustSolvedIcons() |
|
622 |
{ |
|
623 |
if( mPlayLayout!=null ) |
|
624 |
{ |
|
625 |
int currObject = RubikObjectList.getCurrObject(); |
|
626 |
int dbLevel = RubikObjectList.getDBLevel(currObject); |
|
627 |
int numLevel= Math.min(dbLevel, LEVELS_SHOWN)+1; |
|
628 |
RubikScores scores = RubikScores.getInstance(); |
|
629 |
|
|
630 |
for(int i=0; i<numLevel; i++) |
|
631 |
{ |
|
632 |
int level = i<numLevel-1 ? i : dbLevel; |
|
633 |
Button button = (Button)mPlayLayout.getChildAt(i); |
|
634 |
boolean isSolved = i>0 ? scores.isSolved(currObject, level-1) : hasBeenPlayed(); |
|
635 |
int icon = isSolved ? R.drawable.ui_solved : R.drawable.ui_notsolved; |
|
636 |
button.setCompoundDrawablesWithIntrinsicBounds(icon,0,0,0); |
|
637 |
} |
|
638 |
} |
|
639 |
} |
|
640 |
*/ |
|
641 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
642 |
|
|
643 |
private void adjustLevels(final RubikActivity act) |
|
644 |
{ |
|
645 |
/* |
|
646 |
int currObject = RubikObjectList.getCurrObject(); |
|
647 |
int dbLevel = RubikObjectList.getDBLevel(currObject); |
|
648 |
RubikObject object = RubikObjectList.getObject(currObject); |
|
649 |
int numScrambles = object==null ? 0 : object.getNumScramble(); |
|
650 |
int numLevel = Math.min(dbLevel, LEVELS_SHOWN)+1; |
|
651 |
String[] levels = new String[numLevel]; |
|
652 |
|
|
653 |
levels[0] = act.getString(R.string.free_play); |
|
654 |
for(int i=1; i<numLevel-1; i++) levels[i] = act.getString(R.string.lv_placeholder,i); |
|
655 |
levels[numLevel-1] = act.getString(R.string.level_full); |
|
656 |
|
|
657 |
if( mLevelValue>dbLevel || mLevelValue<1 || |
|
658 |
(mLevelValue<dbLevel || mLevelValue>LEVELS_SHOWN ) ) mLevelValue=1; |
|
659 |
|
|
660 |
float width = act.getScreenWidthInPixels(); |
|
661 |
int margin = (int)(width*RubikActivity.SMALL_MARGIN); |
|
662 |
int padding = (int)(width*RubikActivity.PADDING); |
|
663 |
int butWidth = 0;//mPlayLayoutWidth - 2*padding; |
|
664 |
int butHeight= (int)mMenuItemSize; |
|
665 |
int bigButH = (int)(mMenuItemSize*BIG_BUTTON) ; |
|
666 |
|
|
667 |
LinearLayout.LayoutParams pM = new LinearLayout.LayoutParams( butWidth, butHeight ); |
|
668 |
pM.setMargins(margin, 0, margin, margin); |
|
669 |
LinearLayout.LayoutParams pB = new LinearLayout.LayoutParams( butWidth, bigButH ); |
|
670 |
pB.setMargins(margin, margin, margin, 2*margin); |
|
671 |
|
|
672 |
mPlayLayout.removeAllViews(); |
|
673 |
|
|
674 |
for(int i=0; i<numLevel; i++) |
|
675 |
{ |
|
676 |
final int level = i<numLevel-1 ? i : dbLevel; |
|
677 |
final int scrambles = i<numLevel-1 ? i : numScrambles; |
|
678 |
Button button = new Button(act); |
|
679 |
button.setLayoutParams(i==0 ? pB : (i==numLevel-1 ? pB : pM)); |
|
680 |
button.setText(levels[i]); |
|
681 |
button.setTextSize(TypedValue.COMPLEX_UNIT_PX, mMenuTextSize); |
|
682 |
|
|
683 |
button.setOnClickListener( new View.OnClickListener() |
|
684 |
{ |
|
685 |
@Override |
|
686 |
public void onClick(View v) |
|
687 |
{ |
|
688 |
ObjectControl control = act.getControl(); |
|
689 |
|
|
690 |
if(control.isUINotBlocked()) |
|
691 |
{ |
|
692 |
if( mPlayPopup!=null ) mPlayPopup.dismiss(); |
|
693 |
|
|
694 |
if( level>0 ) |
|
695 |
{ |
|
696 |
mLevelValue = level; |
|
697 |
mShouldReactToEndOfScrambling = true; |
|
698 |
control.scrambleObject(scrambles); |
|
699 |
} |
|
700 |
else |
|
701 |
{ |
|
702 |
addToPlayedObjects(); |
|
703 |
mShouldReactToEndOfScrambling = false; |
|
704 |
ScreenList.switchScreen(act, ScreenList.FREE); |
|
705 |
} |
|
706 |
} |
|
707 |
} |
|
708 |
}); |
|
709 |
|
|
710 |
mPlayLayout.addView(button); |
|
711 |
} |
|
712 |
|
|
713 |
*/ |
|
714 |
} |
|
715 |
|
|
716 | 608 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
717 | 609 |
|
718 | 610 |
public int getLevel() |
Also available in: Unified diff
Progress with colors in the Menu Level Buttons