Add Mirror Cube 2x2 and 3x3.
Make object scrambling abstract (well, almost - with exception of Square-1 - this theoretically could also be done the generic way, but this would require almost 20000 'ScrambleStates')
Remove more statics from the Bandaged Cube classes.
Remove statics from the Bandaged Cube classes.
Introduce pseudorandom balancing into scrambling to all the other already converted objects, i.e. everytihng except for Pyraminxes, Squares, Minxes and the Redi.
Introduce pseudorandom balancing into scrambling in case of the two Dinos (from now on, the more times a particular (ax,layer) combination has been chosen already in the scrambling sequence, the less likely it is to be chosen next).Fix Dino6 - isSolved(). Sadly, it cannot be the geeneric function - it needs to be another special case.
Unify scrambling across all 4 bandaged objects.
auto-compute the bandaged status from dimension of the CENTERS. Make 'computeBitmapFromRow' generic for bandageed and not bandaged objects.
Remove the last 'isSolved()' (from Dino4) and put it to the parent class as a special case.
Standarize the 'isSolved()' method: now all objects, except one (Dino4) have a standard isSolved().This incidentally also fixes detection of the solved state in case of Diamond4, i.e. a Master FTO.
Finally remove cubit creation from the implementation classes and move it to the TwistyObject.
Move 1) bandaged 3x3 2) normals cubes 3) octahedrons 4) both dinos to the new cubit creation scheme.
Important step towards making the implementation of an individual puzzle code-free (i.e. data-only): move the 'MeshBase[] mMeshes' variable from the individual classes to the parent TwistyObject.
Convert the Ivy corner cubit to the new, 'universal' cubit creation method.
This forces deep changes to 'createRoundSolid' and the underlying 'MeshPolygon' class to make them support arbitrary Polygon 'centers of face convexity'.
Reason: the faces of this cubit are concave and such default 'center of face convexity' (which by default used to be (0,0)) turned to lie outside the face - which produces strange visual artifacts.
Corrections for the Bandaged cubit creation.
Convert bandaged Cubes to the standard mesh creation code.
Move the TwistyObject.retCubePosition() to the solver.
Standarize drawing stickers of a twisty puzzle. From now on, there's no 'sticker drawing' code in the individual classes, only some constants.
Convert the last 'special' case, the Rex edge sticker, to the generic sticker mechanism.
Generalize FactorySticker - make it possible to draw stickers whose sides are curved.Convert the Ivy to use this new functionality.
Square-1: implement the fact that corners might bandage the puzzle.
Square-1: this is a shape-shifter; we cannot just clamp the Cubit positions to the initial list of positions.Do so only if the minError is appropriately low.
Make it possible for an object to have different 'cuts' along each of its axis.
Make it possible for an object to have different 'basicAngles' along each of its axis.
Remove the need for RowChances.
Move all the special cubit-creating code out of FactoryCubit and to the Object classes, and thus hopefully finish implementing the new cubit creating engine.
Move Factories to the 'helpers' package.
Bugfix.
Simplify the 'bandaged' class API.
Minor
Bandaged objects: first step making automatic scrambling work.
Make manual scrambling work.
Progress with bandaged objects.
Change the Cubit center from a Static3D to a float[].The point: now we can have more than one center, and bandaged objects need more than one, because in this way they are going to fill up their RotationRow bitmaps.
Change Cubit.mRotationRow[] from an index pointing at a single rotating layer to a bitmap potentially pointing at several layers.(in preparation for bandaged objects)
Simplifications.
Simplification with objects.
Progress with bandaged cubes.