Revision ff60e713
Added by Leszek Koltunski about 2 years ago
src/main/java/org/distorted/objectlib/helpers/FactorySticker.java | ||
---|---|---|
23 | 23 |
import static org.distorted.objectlib.main.TwistyObject.TEXTURE_HEIGHT; |
24 | 24 |
|
25 | 25 |
import android.graphics.Canvas; |
26 |
import android.graphics.Color; |
|
26 | 27 |
import android.graphics.Paint; |
28 |
import android.graphics.PorterDuff; |
|
27 | 29 |
|
28 | 30 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
29 | 31 |
|
... | ... | |
368 | 370 |
|
369 | 371 |
canvas.restore(); |
370 | 372 |
} |
373 |
|
|
374 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
375 |
|
|
376 |
public void drawSolidColor(Canvas canvas, Paint paint, int left, int bottom, int color) |
|
377 |
{ |
|
378 |
canvas.save(); |
|
379 |
canvas.clipRect(left,bottom-TEXTURE_HEIGHT,left+TEXTURE_HEIGHT,bottom); |
|
380 |
|
|
381 |
if( (color>>24) != 0 ) |
|
382 |
{ |
|
383 |
paint.setStyle(Paint.Style.FILL); |
|
384 |
paint.setColor(color); |
|
385 |
canvas.drawRect(left,bottom-TEXTURE_HEIGHT,left+TEXTURE_HEIGHT,bottom,paint); |
|
386 |
} |
|
387 |
else |
|
388 |
{ |
|
389 |
canvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR); |
|
390 |
} |
|
391 |
|
|
392 |
canvas.restore(); |
|
393 |
} |
|
371 | 394 |
} |
src/main/java/org/distorted/objectlib/helpers/ObjectStickerOverride.java | ||
---|---|---|
21 | 21 |
|
22 | 22 |
public class ObjectStickerOverride |
23 | 23 |
{ |
24 |
private final int mCubit; |
|
25 |
private final int mFace; |
|
24 |
private final int[] mCubitFace; |
|
26 | 25 |
private final int mColor; |
27 | 26 |
|
28 | 27 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
29 | 28 |
|
30 |
public ObjectStickerOverride(int cubit, int face, int color)
|
|
29 |
public ObjectStickerOverride(int[] cubitface, int color)
|
|
31 | 30 |
{ |
32 |
mCubit = cubit; |
|
33 |
mFace = face; |
|
34 | 31 |
mColor = color; // ARGB |
32 |
mCubitFace = cubitface; |
|
35 | 33 |
} |
36 | 34 |
|
37 | 35 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
38 | 36 |
|
39 |
public int getCubit()
|
|
37 |
public int[] getCubitFaces()
|
|
40 | 38 |
{ |
41 |
return mCubit; |
|
42 |
} |
|
43 |
|
|
44 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
45 |
|
|
46 |
public int getFace() |
|
47 |
{ |
|
48 |
return mFace; |
|
39 |
return mCubitFace; |
|
49 | 40 |
} |
50 | 41 |
|
51 | 42 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
src/main/java/org/distorted/objectlib/json/JsonReader.java | ||
---|---|---|
200 | 200 |
mCubitFaceColor[i] = new int[numColor]; |
201 | 201 |
for(int j=0; j<numColor; j++) mCubitFaceColor[i][j] = jsonColor.getInt(j); |
202 | 202 |
|
203 |
mCubitType[i] = (int)jsonCubit.optInt("type", Cubit.TYPE_NORMAL);
|
|
203 |
mCubitType[i] = jsonCubit.optInt("type", Cubit.TYPE_NORMAL); |
|
204 | 204 |
float xoff = (float)jsonCubit.optDouble("offsetX", 0 ); |
205 | 205 |
float yoff = (float)jsonCubit.optDouble("offsetY", 0 ); |
206 | 206 |
float zoff = (float)jsonCubit.optDouble("offsetZ", 0 ); |
... | ... | |
383 | 383 |
|
384 | 384 |
for(int i=0; i<numOverrides; i++) |
385 | 385 |
{ |
386 |
JSONObject override = object.getJSONObject(i); |
|
387 |
int cubit = override.getInt("cubit"); |
|
388 |
int face = override.getInt("face"); |
|
386 |
JSONObject override = object.getJSONObject(i); |
|
387 |
JSONArray cubitArray = override.getJSONArray("cubitfaces"); |
|
389 | 388 |
int color = override.getInt("color"); |
390 |
mStickerOverrides[i] = new ObjectStickerOverride(cubit,face,color); |
|
389 |
int numCubits = cubitArray.length(); |
|
390 |
int[] cubitface = new int[numCubits]; |
|
391 |
for(int j=0; j<numCubits; j++) cubitface[j] = cubitArray.getInt(j); |
|
392 |
mStickerOverrides[i] = new ObjectStickerOverride(cubitface,color); |
|
391 | 393 |
} |
392 | 394 |
} |
393 | 395 |
|
src/main/java/org/distorted/objectlib/json/JsonWriter.java | ||
---|---|---|
353 | 353 |
for (ObjectStickerOverride objectStickerOverride : overrides) |
354 | 354 |
{ |
355 | 355 |
JSONObject override = new JSONObject(); |
356 |
int cubit = objectStickerOverride.getCubit(); |
|
357 |
int face = objectStickerOverride.getFace(); |
|
358 |
int color = objectStickerOverride.getColor(); |
|
356 |
int[] cubfac = objectStickerOverride.getCubitFaces(); |
|
357 |
int color = objectStickerOverride.getColor(); |
|
358 |
JSONArray cubfacArray = new JSONArray(); |
|
359 |
for (int cf : cubfac) cubfacArray.put(cf); |
|
359 | 360 |
|
360 |
override.put("cubit", cubit); |
|
361 |
override.put("face" , face ); |
|
361 |
override.put("cubitfaces", cubfacArray); |
|
362 | 362 |
override.put("color", color); |
363 | 363 |
|
364 | 364 |
overrideArray.put(override); |
src/main/java/org/distorted/objectlib/main/TwistyObject.java | ||
---|---|---|
1723 | 1723 |
paint.setAntiAlias(true); |
1724 | 1724 |
paint.setTextAlign(Paint.Align.CENTER); |
1725 | 1725 |
paint.setStyle(Paint.Style.FILL); |
1726 |
|
|
1727 | 1726 |
paint.setColor(getInternalColor()); |
1728 | 1727 |
canvas.drawRect(0, 0, mNumTexCols*TEXTURE_HEIGHT, mNumTexRows*TEXTURE_HEIGHT, paint); |
1729 | 1728 |
|
... | ... | |
1736 | 1735 |
if( texture<mNumTextures-mNumOverrides ) |
1737 | 1736 |
{ |
1738 | 1737 |
ObjectSticker sticker = retSticker(texture/mNumFaceColors); |
1739 |
int color = getColor(texture% mNumFaceColors);
|
|
1738 |
int color = getColor(texture%mNumFaceColors); |
|
1740 | 1739 |
factory.drawRoundedPolygon(canvas, paint, col*TEXTURE_HEIGHT, (mNumTexRows-row)*TEXTURE_HEIGHT, color, sticker); |
1741 |
texture++; |
|
1742 | 1740 |
} |
1743 |
else if( texture<mNumTextures )
|
|
1741 |
else if( texture>mNumTextures-mNumOverrides && texture<=mNumTextures )
|
|
1744 | 1742 |
{ |
1745 |
int color = mStickerOverrides[mNumTextures-texture-1].getColor(); |
|
1746 |
int left = col*TEXTURE_HEIGHT; |
|
1747 |
int bottom = (mNumTexRows-row)*TEXTURE_HEIGHT; |
|
1748 |
paint.setColor(color); |
|
1749 |
canvas.drawRect(left,bottom-TEXTURE_HEIGHT,left+TEXTURE_HEIGHT,bottom,paint); |
|
1743 |
int color = mStickerOverrides[mNumTextures-texture].getColor(); |
|
1744 |
factory.drawSolidColor(canvas, paint, col*TEXTURE_HEIGHT, (mNumTexRows-row)*TEXTURE_HEIGHT, color); |
|
1750 | 1745 |
} |
1746 |
|
|
1747 |
texture++; |
|
1751 | 1748 |
} |
1752 | 1749 |
} |
1753 | 1750 |
|
src/main/java/org/distorted/objectlib/objects/TwistyCrazy3x3.java | ||
---|---|---|
20 | 20 |
package org.distorted.objectlib.objects; |
21 | 21 |
|
22 | 22 |
import java.io.InputStream; |
23 |
import java.util.ArrayList; |
|
23 | 24 |
|
24 | 25 |
import org.distorted.library.type.Static3D; |
25 | 26 |
import org.distorted.library.type.Static4D; |
... | ... | |
100 | 101 |
}; |
101 | 102 |
} |
102 | 103 |
|
104 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
105 |
|
|
106 |
private boolean cubitIsOverriden(int cubit) |
|
107 |
{ |
|
108 |
float[] offset = getCubitRowOffset(cubit); |
|
109 |
return offset[0]*offset[0]+offset[1]*offset[1]+offset[2]*offset[2] == 0; |
|
110 |
} |
|
103 | 111 |
|
104 | 112 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
105 | 113 |
|
106 | 114 |
@Override |
107 | 115 |
public ObjectStickerOverride[] getStickerOverrides() |
108 | 116 |
{ |
109 |
ObjectStickerOverride[] overrides = new ObjectStickerOverride[6];
|
|
117 |
ArrayList<Integer> cubits = new ArrayList<>();
|
|
110 | 118 |
|
111 | 119 |
for(int i=0; i<6; i++) |
120 |
if( cubitIsOverriden(20+i) ) cubits.add(20+i); |
|
121 |
|
|
122 |
int numOverrides = cubits.size(); |
|
123 |
|
|
124 |
if( numOverrides>0 ) |
|
112 | 125 |
{ |
113 |
int cubit = 20+i; |
|
114 |
float[] offset = getCubitRowOffset(cubit); |
|
115 |
float isX = offset[0]*offset[0]+offset[1]*offset[1]+offset[2]*offset[2]; |
|
116 |
overrides[i] = new ObjectStickerOverride(cubit,6,isX==0 ? 0xff0f0000 : 0xff000000 ); |
|
126 |
ObjectStickerOverride[] overrides = new ObjectStickerOverride[1]; |
|
127 |
int[] cubfac = new int[2*numOverrides]; |
|
128 |
for(int i=0; i<numOverrides; i++) |
|
129 |
{ |
|
130 |
cubfac[2*i ] = cubits.get(i); |
|
131 |
cubfac[2*i+1] = 6; |
|
132 |
} |
|
133 |
overrides[0] = new ObjectStickerOverride(cubfac,0x00ffffff); |
|
134 |
return overrides; |
|
117 | 135 |
} |
118 | 136 |
|
119 |
return overrides;
|
|
137 |
return null;
|
|
120 | 138 |
} |
121 | 139 |
|
122 | 140 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
Also available in: Unified diff
Progress with sticker overrides.