Fix detecting if an Object is solved. Before, the generic Cubit.thereIsNoVisibleDifference(0 would not work correctly in case of the Dino.
Adjust randomizing new rotations so that:
1) it works for basicAngle=5 (Megaminx) (so now basicAngle=2,3,4,5 supported)2) it leaves the decision as to what can be the next rotation to the Object class, as in case of certain Objects (the Dino, or the Helicopter, the Megaminx) the next rotation doesn't have to 'intersect' the old rotation always when oldRotAxis != newRotAxis (that's so simple only in case of the Cube and - only partly - the Pyraminx!)
Add the Dino dmesh file.
Fix the way we continue rotation: when rotating a layer, we need to be doing it with respect to the RotAxis which has been first casted to the touched face, and only then this casted one is casted to the surface of the screen.
Before we were casting the rotAxis directly to the screen without the intermediate casting to the face, which doesn't really work in case of the Dino: if the touched face is rotated away by quite a lot, the rotAxis is then completely counterintuitive.
Major progress with Dino; rotations (almost?) work now.
A bit less Sink effect (1.25) when creating the individual cubits of the Dino - with the previous 1.30 there was a bit of an artifact visible when rotating.
Fix the bug reported by Antonio Campos Galán: sometimes the app would not detect that the Cube is solved.
Progress with Dino Movement
Introduce separate ROT_AXIS and FACE_AXIS ( step 2 )
Introduce separate ROT_AXIS and FACE_AXIS ( step 1 )
Correct Dino row chances ( the middle row should never move! )
New Dino images.
Move the knowledge about colors of individual cubit faces down to each Object subclass.
Stop crashing when the last installed version has an Object remembered, then we install a new version without this Object in the RubikObjectList.
Progress with RubikDino.
Progress with the Dino.
Beginnings of support for a new Object: the Dino.
Introduce HUGE ui version.
Introduce three sizes of UI images: small, medium, large.
Re-introduce possibility to dynamically create object mesh: part 2.
Re-introduce possibility to dynamically create object mesh.
Introduce two-fingered object resize.
Object node: size of screenWidth.
Remove the 'MAIN' state.Fix one crasher with two-fingered dragging in the View.
Improve rotations of the Pyraminx; synchronize begin/add/finish Rotation in the RubikObject (now it is possible to begin new rotation when an old one didn't finish yet!)
Progress with dragging.
Simplify dragging. Now there's only 1 Quat, rather than the old way with two (Accumulated, Current).
Further improve rotations of a Object layer - make them independent of physical screen size (now it depends on the angle of rotation and, if that's 0, on the speed (in inches of second) of the finger swipe done by the user.
Improvements for the way we rotate layers of Objects. (take the speed into account - so even if we rotated a layer of a Cube to less than 45 degrees, but we did it fast, do a 90 degree rotation!)
Read the meshes from .dmesh files (rather than compute them dynamically).This (along with single-mesh mode) hopefully makes the rendering much faster, while keeping the time needed for Object Change low.
The only downside: this increases the size of the release APK from 6 MB to 9.6 MB.
Speedup for rendering: cubes 2,3 contain better quality cubit faces (more vertices) than cubes 4,5.
Bugfixes.
Minor speedup
Bump version to 1.2.2
More progreess porting RubikCube. Rotation mostly working now.
More progreess porting RubikCube.
Progreess porting RubikCube to the new SingleMesh mode.
Begin porting RubikCube to the new SingleMesh library. This will make rendering much faster - e.g. in case of Cube 5, instead of 98 renders of individual Cubits, there will be one render of the whole Mesh.
Port RubikCube to the new library.
Progress making it possible to apply Vertex Effects only to some Components of a Mesh.
1) Cube: convert it to the latest library. Main difference: objects are rendered better, individual cubits have rounded corners.2) Examples: some adjustments to MeshJoin & Predeform3) Library: fix a bug in main_vertex_shader's 'degree' function, which didn't work proprely in case of a vertex which was exactly at the center (i.e. vector PS was zero)
In library: allow a mixture of a deep and shallow copy of a Mesh ( mVertAttribs1 might be copied deeply or shallowly, mVertAttribs2 are always copied deeeply).Port RubikCube to the new library.
Fix for the next crash seen in the field.
Fix for the next crasher from the field.
Fix for the previous fix :)
Fix a potential crasher ( do not set up a callback for end of rotation effect on the very first cubit that belongs to a rotation if all belonging cubits have not been set up yet )
There's a real crash from the field in Firebase Crashlytics which must mean that Cubit.returnRotationAngle() returned null.Leave some message in case this happens again.
Change the format of moves in Pretty Patterns to more terse, so that patterns of objects with 4 axis of rotation ( Pyraminx!) fit into 3 digits.
PYRAMINX: swap the red and blue face colors so that the whole thing matches randelshofer.ch
Add a 'withdraw move' button to the Solving UI state.
Make chances to randimoze a given row when scrambling dependant on the type of Object.
The point: in case of the Cube, all rows should have equal chances. In case of the Pyraminx, the smaller the row, the smaller the chance should be. In particular the trivial 4 corners of the tetraherdon should have a very small chance to be selected.
Each object size now has its own number of levels (not always 18!)
Progress with the Solver - RubikCube.retObjectString() finished.
What remains to be done here: ban changing colors of the centers of 3x3x3 faces, this shouldn't be allowed!
Progress implementing RubikCube.retObjectString()
Progress making the Solver state more abstract.
Make the Solver state more abstract.
Progress with the 3x3x3 Solver.
More support for the 3x3x3 Solver: more of the actual 3x3x3 solver mechanism.