Do not permit clicking on the 'play' button if we are currently scrambling an object.
Avoid cutouts in a new way
Avoid the possible cutouts at the top of the screen.
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.
Improve Analytics reports
adjust requesting for review a bit more - now it will happen after a user has launched the app twice and played 7 times.
- after some time using it, request an App review- some tweaking for the way the objects look (set internal_color to something slightly lighter than pure black, round the corners of the stickers better)- set internal_node ratio to 1.42, this way the objects never get cut
Simplify OpenGL error dialog. Show it only once.
Simplify drawing textures.
Minor
Brighter background.
Bigger 'OK' button in Dialogs.
1) report all solved levels to Analytics2) automatically dismiss the NewRecord and Solved dialogs when one backs from the Done state.
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.
Make the top and bottom bars transparent, above the GLSurfaceView.
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.
Compute the size of the Solver icon correctly.
Apply a hack so that the App enters fullscreen modee on some Huawei devices.
Remove LAYOUT_STABLE from the UI flags since that was causing trembling of the Scores dialog in some platforms.
Progress with UI
Make the keyboard visible again
Make it so that the Navigation Bar does not re-appear when we pop up a DialogFragment.
Now there's noly 1 case when it still reappears: it's when we pop up a PopupWindow.
Add hiding the Navigation bar (still unfinished, the bar re-appears when a DialogFragment or a PopupWindow appears)Integrate the Level Spinner and the Play button into oneMove the Menu button up
Correct the Dino mesh.
Skewb Mesh.
Improve Pyraminx Mesh
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.
We need to pause an Activity in the following way:
1) Activity.onPause()2) View.onPause()3) Library.onPause()
otherwise sometimes there are artifacts when pausing!
Display the 'Privacy Policy' dialog (only if locale is set to ZH - chinese requirement)
Correction of the size of '3x3x3 Solver' bitmaps.
Make the Scores Dialog screen-size invariant.
Reinvent the Pattern Dialog (Part 3)
Reinvent the Pattern Dialog (Part 2)
Introduce HUGE ui version.
Catch an error that sometimes happens in the field.
Introduce three sizes of UI images: small, medium, large.
Introduce two-fingered object resize.
Make the margins and paddings proportional to screen size.
Shorten some strings
Object node: size of screenWidth.
Improvements to the Menu.
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).
Improvements to the UI - make it proportional regardless of the physical screen size. (Part 5 - first 3 Dialogs)
Improvements to the UI - make it proportional regardless of the physical screen size. (Part 3)
Improvements to the UI - make it proportional regardless of the physical screen size. (Part 2)
Improvements to the UI - make it proportional regardless of the physical screen size. (Part 1)
Move the 'Effects' thing to a button in the Play state.
On object change, report FPS to Firebase
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: make it possible to begin a rotation during a WIN effect.
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!)
Only compile the Full, Normal & OIT programs when they are actually needed.
Take advantage of recent improvements to the library and stop allocating a queue of 4 FBOs - even if we are running on a Mali r12.
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.
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.
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.
Only show the OpenGL Error dialog when the underlying hardwarre does not support OpenGL ES 3.0.
Add OpenGL Error dialog.
Switch off showing FPS.
Report an Analytics event when a user changes State or Object.
Report a Crashlytics non-fatal if we fail to compile some shaders.
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 a nasty logic error that let people submit bogus results.
- bump version to 1.1.2- fix one crasher observed in the field ( we need to adjust the Levels Spinner in Play state if Object changed in Pattern or Solver states )
Add Crashlytics logs
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.
Do not crash if we are running on device which does not support OpenGL ES 3.0
Improve logging in case the Distorted Library returned an error - add Crashlytics custom keys.
Bugfix in StateSolving upper text - before when we won, and NewRecord dialog was on the screen, and at tis moment we rotated the screen, the uppoer text would revert back to 'Ready?'
Move to AndroidX, target API level 29.
Add a 'withdraw move' button to the Solving UI state.
Bugfix.
Reorganize UI of the Play state.
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.