new API to make is possible to adjust default scale factor in each TwistyObjectNode.(and use it in Tutorials, where the object needs to be smaller)
Major change: separate the notion of a TwistyObject and its Node. Now,
1) the Node stays when we change objects (this makes transitions faster)2) it's possible to just create an Object without adding it to the Screen (now app needs to explicitly create the Node and add it to its Screen itself)
Create the 3 Popups only on first button click - this time we can have the final screen dimensions (and also it starts faster ) Before we weree getting the screen size from before hiding navigation bars, which made the height smaller, which made the number of obejcts and levels in the popups sometimes too small!
Minor
Further simplifications.
Remove the concept of a 'TwistyActivity' altogether.
Move RubikControl to objectlib (as 'ObjectAutomator')Hide ObjectPreRender inside objectlib and move its APi to ObjectControl.
Simplifications
Move ObjectControl, the next big chunk of code, to objectlib.
Move PreRender to objectlib.This code is now shared betweeen the Rubik and Tutorial activities.
Move yet more code to objectlib.It's almost possible to move the PreRender to objectlib now.
Simplify TwistyObject's API.
Simplify ObjectList: now there's just one object per size.
Move QuatHelpeer to distorted-library
Remove all files that have been separated into a new library 'objectlib'
Prepare the 'objectlib' package to be separated into a library module
Refactoring: split the 'objects' package into two, 'objects' and 'objectlib'.The point: we're going to need to move the 'objectlib' stuff into its own library module, and that's because we're going to create a new app module which needs access to it.
Major abstraction - automatically compute the 'computeRowFromOffset()' function from CUTS.Still one thing left: it appears like the CUTS of Mega/Kilominxes are not correct.
TwistyObject's ObejctScreenRatio and InitScreenRatio shouldn't be static. Make them non-static.Otherwise, if the current object is, say, a cube (initSR=0.5), we fire up tutorials and start a tutorial for something with vastly different ObjectScreenRatio (Jing- initSR=1.64), then come back to the Main Activity - so there's a cube on the screen again - the ratios stay at their Jing values, which screws up detection of rotations.
Lots of changes :)
Progress with RubikControl.
Fix the reddening the Lock icon.
Give visual indication when dragging is locked.
Change the 'Cube Back' icon when there are no moves to back.
Important bugfix: no we cannot unblock touch when WIN effect finishes, because
1) starting the WIN effect does not block touch in the first place2) it can happen that this unblocking happens when we have started finishing the rotation but haven't removed it yet...
Improve scrambling of the Minx'es and the Redi, which in full scramble mode were frequently leaving large corners unscrambled.
Backing moves: constant angle speed (part 2).
Make it possible for an object to have different 'basicAngles' along each of its axis.
improvements for FactorySticker
Square-1: beginnings
RubikControl: rotate the cube 2.
RubikControl: rotate the cube.
Simplify RubikSurfaceView and the touchscreen control.
Cube Control: step 2.
Rename 'state' to 'screen'
Bugfix for a crasher
Fix movements of objects - before it really worked only when an object's FOV was about 60 degrees.
Beginnings of Megaminx & Gigaminx
Catch exceptions when rotating.
Spearate the concept of number of layers of an object and its size.In case of the Skewb family, this is no longer the same (Master Skewb has 3 layers but it's twice bigger than the 2-layered Skewb)
More debugging for the case of suspicious submits.
Simplify OpenGL error dialog. Show it only once.
Progress with the Diamond. Everything working except for the isSolved(): turns out the center cubits can end up rotated along the face by multitudes of 120 degrees.
Rename some classes.
Rename 'RubikMovement' to 'Movement'
1) correction for Dino4's isSolved() [ remember about the mirror! ]2) beginnings of support for the Skewb Diamond
Add lock button.
Fix for one bug seen in Firebase and additional debugging for another.
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.
Progress with Dino Movement
Introduce separate ROT_AXIS and FACE_AXIS ( step 2 )
Introduce separate ROT_AXIS and FACE_AXIS ( step 1 )
Catch possible exceptions setting up the Renderer (possible on very old devices) and display the OpenGL error popup.
Catch an error that sometimes happens in the field.
Introduce two-fingered object resize.
cube_back and cube_solve buttons.
Remove the 'MAIN' state.Fix one crasher with two-fingered dragging in the View.
Improve setting text size in Spinners (forgotten part).
Two-fingered object rotation seems to be finished.
Progress with dragging.
Simplify dragging. Now there's only 1 Quat, rather than the old way with two (Accumulated, Current).
Progress with improvements for cube manipulation.
Initial attempt at two-finger rotation.Mostly works; still, one corner case doesnt:
- put two fingers down, start rotating- lift one of them up- put it back down
depending if we lifted the first or second finger, weird things may happen.
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.
Make the rotations and drag be independent of physical screen dimensions - take into account pixel density.
Split up the onTouch() part of the View.
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!)
Convert the PostRender to a PreRender, called before we render.This makes more sense as this way things are prepared for the very first render.
Fixes for the fact that one could easily cheat - just pause the app while solving and come back to it, the time would reset to 0 and the object to unscrambled :(
Add two new UI States: Ready and Done.
Add a 'withdraw move' button to the Solving UI state.
Bugfix.
The 3x3x3 Solver finished - here the last piece of work, locking the centers of the 3x3x3 cube in place so that RubikStateSolver's color picker cannot change them ( the CUBE3 solver assumes this )
Progress with the 3x3x3 Solver.
More support for the 3x3x3 Solver: more of the actual 3x3x3 solver mechanism.