Revision 41748f19
Added by Leszek Koltunski over 5 years ago
| src/main/java/org/distorted/states/RubikStateSolver.java | ||
|---|---|---|
| 45 | 45 |
|
| 46 | 46 |
public class RubikStateSolver extends RubikStateAbstract |
| 47 | 47 |
{
|
| 48 |
private static final int NUM_FACES = 6; |
|
| 49 | 48 |
private static final int BITMAP_SIZE = 35; |
| 50 | 49 |
|
| 51 |
private static final int[] FACE_COLORS = new int[] |
|
| 52 |
{
|
|
| 53 |
0xffffff00, 0xffffffff, |
|
| 54 |
0xff0000ff, 0xff00ff00, |
|
| 55 |
0xffff0000, 0xffb5651d |
|
| 56 |
}; |
|
| 50 |
private static final RubikObjectList OBJECT = RubikObjectList.CUBE; |
|
| 51 |
private static final int SIZE = 3; |
|
| 57 | 52 |
|
| 58 | 53 |
private static Bitmap[] mBitmap; |
| 59 | 54 |
private ImageButton[] mColorButton; |
| 60 | 55 |
private Button mBackButton, mSolveButton; |
| 61 | 56 |
private boolean mSolving; |
| 62 | 57 |
private int mCurrentColor; |
| 58 |
private int[] mFaceColors; |
|
| 59 |
private int mNumFaces; |
|
| 63 | 60 |
|
| 64 | 61 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
| 65 | 62 |
|
| ... | ... | |
| 74 | 71 |
{
|
| 75 | 72 |
mSolving = false; |
| 76 | 73 |
|
| 77 |
act.changeObject(RubikObjectList.CUBE,3,null);
|
|
| 74 |
act.changeObject(OBJECT,SIZE,null);
|
|
| 78 | 75 |
RubikStatePlay play = (RubikStatePlay)RubikState.PLAY.getStateClass(); |
| 79 |
play.setObjectAndSize(RubikObjectList.CUBE,3);
|
|
| 76 |
play.setObjectAndSize(OBJECT,SIZE);
|
|
| 80 | 77 |
|
| 81 |
int[] colors = RubikObjectList.retFaceColors(RubikObjectList.CUBE); |
|
| 82 |
|
|
| 83 |
if( colors != null ) |
|
| 84 |
{
|
|
| 85 |
int len = colors.length; |
|
| 86 |
|
|
| 87 |
android.util.Log.e("solver", "retColors len="+len+" first: "+colors[0]);
|
|
| 88 |
} |
|
| 89 |
else |
|
| 90 |
{
|
|
| 91 |
android.util.Log.e("solver", "retColors null");
|
|
| 92 |
} |
|
| 78 |
mFaceColors = RubikObjectList.retFaceColors(OBJECT); |
|
| 79 |
mNumFaces = mFaceColors!=null ? mFaceColors.length : 0; |
|
| 93 | 80 |
|
| 94 | 81 |
DisplayMetrics metrics = act.getResources().getDisplayMetrics(); |
| 95 | 82 |
final float scale = metrics.density; |
| ... | ... | |
| 98 | 85 |
LinearLayout layoutTop = act.findViewById(R.id.upperBar); |
| 99 | 86 |
layoutTop.removeAllViews(); |
| 100 | 87 |
|
| 101 |
if( mBitmap ==null ) setupBitmaps(scale); |
|
| 102 |
if( mColorButton==null ) setupColorButtons(act,scale); |
|
| 88 |
if( mNumFaces>0 ) |
|
| 89 |
{
|
|
| 90 |
if( mBitmap ==null ) setupBitmaps(scale); |
|
| 91 |
if( mColorButton==null ) setupColorButtons(act,scale); |
|
| 103 | 92 |
|
| 104 |
markButton(act); |
|
| 93 |
markButton(act); |
|
| 94 |
} |
|
| 105 | 95 |
|
| 106 | 96 |
for(ImageButton button: mColorButton) layoutTop.addView(button); |
| 107 | 97 |
|
| ... | ... | |
| 127 | 117 |
final float R = SIZE*0.10f; |
| 128 | 118 |
final float M = SIZE*0.05f; |
| 129 | 119 |
|
| 130 |
mBitmap = new Bitmap[NUM_FACES];
|
|
| 120 |
mBitmap = new Bitmap[mNumFaces];
|
|
| 131 | 121 |
|
| 132 | 122 |
Paint paint = new Paint(); |
| 133 | 123 |
paint.setColor(0xff008800); |
| ... | ... | |
| 137 | 127 |
paint.setTextAlign(Paint.Align.CENTER); |
| 138 | 128 |
paint.setStyle(Paint.Style.FILL); |
| 139 | 129 |
|
| 140 |
for(int i=0; i<NUM_FACES; i++)
|
|
| 130 |
for(int i=0; i<mNumFaces; i++)
|
|
| 141 | 131 |
{
|
| 142 | 132 |
mBitmap[i] = Bitmap.createBitmap(SIZE, SIZE, Bitmap.Config.ARGB_8888); |
| 143 | 133 |
Canvas canvas = new Canvas(mBitmap[i]); |
| ... | ... | |
| 145 | 135 |
paint.setColor(0xff000000); |
| 146 | 136 |
canvas.drawRect(0, 0, SIZE, SIZE, paint); |
| 147 | 137 |
|
| 148 |
paint.setColor(FACE_COLORS[i]);
|
|
| 138 |
paint.setColor(mFaceColors[i]);
|
|
| 149 | 139 |
canvas.drawRoundRect( M, M, SIZE-M, SIZE-M, R, R, paint); |
| 150 | 140 |
} |
| 151 | 141 |
} |
| ... | ... | |
| 154 | 144 |
|
| 155 | 145 |
private void setupColorButtons(final RubikActivity act, final float scale) |
| 156 | 146 |
{
|
| 157 |
mColorButton = new ImageButton[NUM_FACES];
|
|
| 147 |
mColorButton = new ImageButton[mNumFaces];
|
|
| 158 | 148 |
|
| 159 |
for(int i=0; i<NUM_FACES; i++)
|
|
| 149 |
for(int i=0; i<mNumFaces; i++)
|
|
| 160 | 150 |
{
|
| 161 | 151 |
final int ii = i; |
| 162 | 152 |
int padding = (int)(3*scale + 0.5f); |
| ... | ... | |
| 233 | 223 |
|
| 234 | 224 |
private void markButton(RubikActivity act) |
| 235 | 225 |
{
|
| 236 |
for(int b=0; b<NUM_FACES; b++)
|
|
| 226 |
for(int b=0; b<mNumFaces; b++)
|
|
| 237 | 227 |
{
|
| 238 | 228 |
Drawable d = mColorButton[b].getBackground(); |
| 239 | 229 |
|
Also available in: Unified diff
Progress making the Solver state more abstract.