Revision 7aae846c
Added by Leszek Koltunski over 3 years ago
| src/main/java/org/distorted/objectlib/json/JsonReader.java | ||
|---|---|---|
| 32 | 32 |
|
| 33 | 33 |
import org.distorted.objectlib.helpers.ObjectFaceShape; |
| 34 | 34 |
import org.distorted.objectlib.helpers.ObjectSignature; |
| 35 |
import org.distorted.objectlib.main.Cubit; |
|
| 35 | 36 |
import org.distorted.objectlib.objects.TwistyBandagedCuboid; |
| 36 | 37 |
import org.json.JSONArray; |
| 37 | 38 |
import org.json.JSONException; |
| ... | ... | |
| 81 | 82 |
private String mTutorialObject; |
| 82 | 83 |
private String[][] mTutorials; |
| 83 | 84 |
private ObjectSignature mSignature; |
| 85 |
private int[] mCubitType; |
|
| 86 |
private float[][] mCubitRowOffset; |
|
| 84 | 87 |
|
| 85 | 88 |
private static JsonReader mThis; |
| 86 | 89 |
|
| ... | ... | |
| 128 | 131 |
|
| 129 | 132 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
| 130 | 133 |
|
| 131 |
private void parseMetadata2or3(JSONObject object) throws JSONException |
|
| 134 |
private void parseMetadata2or3or4(JSONObject object) throws JSONException
|
|
| 132 | 135 |
{
|
| 133 | 136 |
mLongName = object.getString("longname");
|
| 134 | 137 |
mShortName = object.getString("shortname");
|
| ... | ... | |
| 170 | 173 |
mCubitVariant = new int[numCubits]; |
| 171 | 174 |
mPositions = new float[numCubits][]; |
| 172 | 175 |
mCubitFaceColor = new int[numCubits][]; |
| 176 |
mCubitType = new int[numCubits]; |
|
| 177 |
mCubitRowOffset = new float[numCubits][]; |
|
| 173 | 178 |
|
| 174 | 179 |
for(int i=0; i<numCubits; i++) |
| 175 | 180 |
{
|
| ... | ... | |
| 192 | 197 |
int numColor = jsonColor.length(); |
| 193 | 198 |
mCubitFaceColor[i] = new int[numColor]; |
| 194 | 199 |
for(int j=0; j<numColor; j++) mCubitFaceColor[i][j] = jsonColor.getInt(j); |
| 200 |
|
|
| 201 |
mCubitType[i] = (int)jsonCubit.optInt("type", Cubit.TYPE_NORMAL);
|
|
| 202 |
float xoff = (float)jsonCubit.optDouble("offsetX", 0 );
|
|
| 203 |
float yoff = (float)jsonCubit.optDouble("offsetY", 0 );
|
|
| 204 |
float zoff = (float)jsonCubit.optDouble("offsetZ", 0 );
|
|
| 205 |
mCubitRowOffset[i] = new float[] {xoff,yoff,zoff};
|
|
| 195 | 206 |
} |
| 196 | 207 |
} |
| 197 | 208 |
|
| ... | ... | |
| 412 | 423 |
|
| 413 | 424 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
| 414 | 425 |
|
| 415 |
private void parseAxis2or3(JSONArray object) throws JSONException |
|
| 426 |
private void parseAxis2or3or4(JSONArray object) throws JSONException
|
|
| 416 | 427 |
{
|
| 417 | 428 |
int numAxis = object.length(); |
| 418 | 429 |
|
| ... | ... | |
| 611 | 622 |
|
| 612 | 623 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
| 613 | 624 |
|
| 614 |
private void parseVersion2or3(JSONObject object) throws JSONException |
|
| 625 |
private void parseVersion2or3or4(JSONObject object) throws JSONException
|
|
| 615 | 626 |
{
|
| 616 | 627 |
JSONObject metadata = object.getJSONObject("metadata");
|
| 617 |
parseMetadata2or3(metadata); |
|
| 628 |
parseMetadata2or3or4(metadata);
|
|
| 618 | 629 |
JSONObject mesh = object.getJSONObject("mesh");
|
| 619 | 630 |
parseMesh(mesh); |
| 620 | 631 |
JSONArray axis = object.getJSONArray("axis");
|
| 621 |
parseAxis2or3(axis); |
|
| 632 |
parseAxis2or3or4(axis);
|
|
| 622 | 633 |
JSONArray quats = object.getJSONArray("quats");
|
| 623 | 634 |
parseQuats(quats); |
| 624 | 635 |
JSONObject scrambling = object.getJSONObject("scrambling");
|
| ... | ... | |
| 661 | 672 |
|
| 662 | 673 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
| 663 | 674 |
|
| 664 |
private void parseVersion2or3Metadata(JSONObject object) throws JSONException |
|
| 675 |
private void parseVersion2or3or4Metadata(JSONObject object) throws JSONException
|
|
| 665 | 676 |
{
|
| 666 | 677 |
JSONObject metadata = object.getJSONObject("metadata");
|
| 667 |
parseMetadata2or3(metadata); |
|
| 678 |
parseMetadata2or3or4(metadata);
|
|
| 668 | 679 |
} |
| 669 | 680 |
|
| 670 | 681 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
| ... | ... | |
| 688 | 699 |
{
|
| 689 | 700 |
parseVersion1(object); |
| 690 | 701 |
} |
| 691 |
else if( major==2 || major==3 ) |
|
| 702 |
else if( major==2 || major==3 || major==4 )
|
|
| 692 | 703 |
{
|
| 693 |
parseVersion2or3(object); |
|
| 704 |
parseVersion2or3or4(object);
|
|
| 694 | 705 |
} |
| 695 | 706 |
else |
| 696 | 707 |
{
|
| ... | ... | |
| 728 | 739 |
{
|
| 729 | 740 |
parseVersion1Metadata(object); |
| 730 | 741 |
} |
| 731 |
else if( major==2 || major==3 ) |
|
| 742 |
else if( major==2 || major==3 || major==4 )
|
|
| 732 | 743 |
{
|
| 733 |
parseVersion2or3Metadata(object); |
|
| 744 |
parseVersion2or3or4Metadata(object);
|
|
| 734 | 745 |
} |
| 735 | 746 |
else |
| 736 | 747 |
{
|
| ... | ... | |
| 766 | 777 |
stream.close(); |
| 767 | 778 |
|
| 768 | 779 |
JSONObject object = new JSONObject(contents.toString()); |
| 769 |
int major = object.getInt("major");
|
|
| 770 |
|
|
| 771 |
if( major==1 || major==2 || major==3 ) |
|
| 772 |
{
|
|
| 773 |
JSONObject metadata = object.getJSONObject("metadata");
|
|
| 774 |
return metadata.getInt("scrambles");
|
|
| 775 |
} |
|
| 776 |
else |
|
| 777 |
{
|
|
| 778 |
android.util.Log.e("readNumScrambles", "Unknown version "+major);
|
|
| 779 |
} |
|
| 780 |
JSONObject metadata = object.getJSONObject("metadata");
|
|
| 781 |
return metadata.getInt("scrambles");
|
|
| 780 | 782 |
} |
| 781 | 783 |
catch(FileNotFoundException ex) |
| 782 | 784 |
{
|
| ... | ... | |
| 964 | 966 |
return colors.length>face ? colors[face] : -1; |
| 965 | 967 |
} |
| 966 | 968 |
|
| 969 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
| 970 |
|
|
| 971 |
public int[] getCubitTypes() |
|
| 972 |
{
|
|
| 973 |
return mCubitType; |
|
| 974 |
} |
|
| 975 |
|
|
| 976 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
| 977 |
|
|
| 978 |
public float[][] getCubitOffsets() |
|
| 979 |
{
|
|
| 980 |
return mCubitRowOffset; |
|
| 981 |
} |
|
| 982 |
|
|
| 967 | 983 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
| 968 | 984 |
|
| 969 | 985 |
public int getCubitFaceFace(int cubit, int face) |
| src/main/java/org/distorted/objectlib/json/JsonWriter.java | ||
|---|---|---|
| 43 | 43 |
|
| 44 | 44 |
public class JsonWriter |
| 45 | 45 |
{
|
| 46 |
public static final int VERSION_OBJECT_MAJOR = 3;
|
|
| 46 |
public static final int VERSION_OBJECT_MAJOR = 4;
|
|
| 47 | 47 |
public static final int VERSION_OBJECT_MINOR = 0; |
| 48 | 48 |
public static final int VERSION_EXTRAS_MAJOR = 1; |
| 49 | 49 |
public static final int VERSION_EXTRAS_MINOR = 0; |
| ... | ... | |
| 71 | 71 |
for(int c=0; c<numCubits; c++) |
| 72 | 72 |
{
|
| 73 | 73 |
JSONObject cubit = new JSONObject(); |
| 74 |
Static4D rotQuat = object.getCubitQuats(c,numLayers); |
|
| 75 |
int variant = object.getCubitVariant(c,numLayers); |
|
| 74 |
Static4D rotQuat = object.getCubitQuats(c,numLayers); |
|
| 75 |
int variant = object.getCubitVariant(c,numLayers); |
|
| 76 |
int type = object.getCubitType(c); |
|
| 77 |
float[] offset = object.getCubitOffset(c); |
|
| 76 | 78 |
|
| 77 | 79 |
JSONArray pos = new JSONArray(); |
| 78 | 80 |
int numPos = positions[c].length; |
| ... | ... | |
| 83 | 85 |
cubit.put("qz", rotQuat.get2() );
|
| 84 | 86 |
cubit.put("qw", rotQuat.get3() );
|
| 85 | 87 |
cubit.put("variant", variant );
|
| 88 |
cubit.put("type", type);
|
|
| 89 |
cubit.put("offsetX", offset[0]);
|
|
| 90 |
cubit.put("offsetY", offset[1]);
|
|
| 91 |
cubit.put("offsetZ", offset[2]);
|
|
| 86 | 92 |
|
| 87 | 93 |
JSONArray colors = new JSONArray(); |
| 88 | 94 |
|
| src/main/java/org/distorted/objectlib/main/Cubit.java | ||
|---|---|---|
| 259 | 259 |
|
| 260 | 260 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
| 261 | 261 |
|
| 262 |
public int getCubitType()
|
|
| 262 |
public int getType() |
|
| 263 | 263 |
{
|
| 264 | 264 |
return mCubitType; |
| 265 | 265 |
} |
| 266 | 266 |
|
| 267 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
| 268 |
|
|
| 269 |
public float[] getOffset() |
|
| 270 |
{
|
|
| 271 |
return mRowOffset; |
|
| 272 |
} |
|
| 273 |
|
|
| 267 | 274 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
| 268 | 275 |
|
| 269 | 276 |
public int getRotRow(int axisIndex) |
| src/main/java/org/distorted/objectlib/main/ObjectSignatures.java | ||
|---|---|---|
| 75 | 75 |
public static final int MIXU_3 = ObjectType.MIXU_3.ordinal(); |
| 76 | 76 |
public static final int MIXP_3 = ObjectType.MIXP_3.ordinal(); |
| 77 | 77 |
public static final int CRA1_3 = ObjectType.CRA1_3.ordinal(); |
| 78 |
public static final int CRA2_3 = ObjectType.CRA2_3.ordinal(); |
|
| 79 |
public static final int CRA3_3 = ObjectType.CRA3_3.ordinal(); |
|
| 80 |
public static final int CRA4_3 = ObjectType.CRA4_3.ordinal(); |
|
| 81 |
public static final int CRA5_3 = ObjectType.CRA5_3.ordinal(); |
|
| 82 |
public static final int CRA6_3 = ObjectType.CRA6_3.ordinal(); |
|
| 83 |
public static final int CRA7_3 = ObjectType.CRA7_3.ordinal(); |
|
| 84 |
public static final int CRA8_3 = ObjectType.CRA8_3.ordinal(); |
|
| 85 |
public static final int CRA9_3 = ObjectType.CRA9_3.ordinal(); |
|
| 78 | 86 |
} |
| src/main/java/org/distorted/objectlib/main/TwistyJson.java | ||
|---|---|---|
| 43 | 43 |
super(jsonStream, meshState, iconMode, quat, move, scale, meshStream); |
| 44 | 44 |
} |
| 45 | 45 |
|
| 46 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
| 47 |
|
|
| 48 |
@Override |
|
| 49 |
public int getCubitRotationType(int cubitIndex) |
|
| 50 |
{
|
|
| 51 |
return mReader.getCubitTypes()[cubitIndex]; |
|
| 52 |
} |
|
| 53 |
|
|
| 54 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
| 55 |
|
|
| 56 |
@Override |
|
| 57 |
public float[] getCubitRowOffset(int cubitIndex) |
|
| 58 |
{
|
|
| 59 |
return mReader.getCubitOffsets()[cubitIndex]; |
|
| 60 |
} |
|
| 61 |
|
|
| 46 | 62 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
| 47 | 63 |
|
| 48 | 64 |
@Override |
| src/main/java/org/distorted/objectlib/main/TwistyObject.java | ||
|---|---|---|
| 1134 | 1134 |
index = mCubits[j].postRotateCubit(quat); |
| 1135 | 1135 |
setCubitQuat(j,mCubits[j].computeAssociation(),index); |
| 1136 | 1136 |
} |
| 1137 |
else if( mCubits[j].getCubitType()==Cubit.TYPE_FOLLOWER )
|
|
| 1137 |
else if( mCubits[j].getType()==Cubit.TYPE_FOLLOWER ) |
|
| 1138 | 1138 |
{
|
| 1139 | 1139 |
mCubits[j].adjustRotRowPostRotateADecider(); |
| 1140 | 1140 |
setCubitQuat(j,mCubits[j].computeAssociation(),mCubits[j].mQuatIndex); |
| ... | ... | |
| 1336 | 1336 |
int index = mCubits[i].postRotateCubit(quat); |
| 1337 | 1337 |
setCubitQuat(i,mCubits[i].computeAssociation(),index); |
| 1338 | 1338 |
} |
| 1339 |
else if( mCubits[i].getCubitType()==Cubit.TYPE_FOLLOWER )
|
|
| 1339 |
else if( mCubits[i].getType()==Cubit.TYPE_FOLLOWER ) |
|
| 1340 | 1340 |
{
|
| 1341 | 1341 |
mCubits[i].adjustRotRowPostRotateADecider(); |
| 1342 | 1342 |
setCubitQuat(i,mCubits[i].computeAssociation(),mCubits[i].mQuatIndex); |
| ... | ... | |
| 1811 | 1811 |
return mEffects; |
| 1812 | 1812 |
} |
| 1813 | 1813 |
|
| 1814 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
| 1815 |
|
|
| 1816 |
public int getCubitType(int cubit) |
|
| 1817 |
{
|
|
| 1818 |
return mCubits[cubit].getType(); |
|
| 1819 |
} |
|
| 1820 |
|
|
| 1821 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
| 1822 |
|
|
| 1823 |
public float[] getCubitOffset(int cubit) |
|
| 1824 |
{
|
|
| 1825 |
return mCubits[cubit].getOffset(); |
|
| 1826 |
} |
|
| 1827 |
|
|
| 1814 | 1828 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
| 1815 | 1829 |
// PUBLIC API |
| 1816 | 1830 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
Also available in: Unified diff
Crazy Planets: introduce cubit type and offset to the JSON; create (shared) mesh and all the JSONs.