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 statics from the Redi class.
Convert the Redi to the new scrambling paradigm.
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.
Add flag of Madagascar.
Finally remove cubit creation from the implementation classes and move it to the TwistyObject.
Convert Redi Cube to the new 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.
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.
Correct the Redmi mesh to eliminate the visible seams.
Minor.
Improve scrambling of the Minx'es and the Redi, which in full scramble mode were frequently leaving large corners unscrambled.
Preparation for 'smart scrambling' : introduce the total number of scrambles to the 'randomizeNewScramble' function.
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.
Hide more stuff in the TwistyObject class.
Remove the need for RowChances.
Square-1: beginnings
Simplify.
Convert the Redi Cube to the new engine.
Convert the first object, the Cube, to the new Cubit-creating engine.
Move Factories to the 'helpers' package.
Refactor the automatic scrambling. From now on, it is not needed to care about single and double turns when randomizing a new turn.
Change the automatic scramble API in the TwistyObject - in preparation for automatic scrambles in the 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.
Add Gigaminx dmesh.
Beginnings of Megaminx & Gigaminx
Make the color scheme more standard.
Preparation for the Object Info popup: add the name, inventor, complexity info to each object.
Make the texture multi-row: avoid the maximum texture size.
Progress with Skewb familty; separate StickerFactory class.
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)
Objects must explicitly provide a list of offsets specifying where the cut planes are (rather than just a BASIC_STEP - the width of the layer - which is insufficient in case of objects which have layers of vastly different width, like the Master Skewb)
Beginnings of support for any-sized Skewb.
The Redi Cube should be finished now.
Add the Redi Cube: part2.
Add the Redi Cube: part1.