One of the details that's faked is that while you can see the individual pieces rotate when you do a rotation instruction, the model itself doesn't store the rotations. Instead it swaps the textures and texture coordinates. This avoids numerical instability compared with actually keeping the accumulated transformations around. Also, registering the pieces with their new orientations is approximately the same amount of work as swapping the textures, so it's a gain pretty much across the board.
So right now, the following user interface features are in: rotating the faces, arcball rotation for the model itself, single step undo, automatic solving and randomization of the model.
I'm working on a mouse gesture system so that it can be played somewhat intuitively without the keyboard. Eventually I may add some GUI components such as buttons for less common tasks.
So the current todo list is:
- Configuration file
- Remappable keyboard input system
- Fix some of the textures (I'm never satisfied with my art)
- Mouse gestures
Also, one of the known issues with SDL with OpenGL in Windows is really starting to annoy me. According to the SDL mailing list, this issue may not be allowed to be resolved until the SDL 2.0, since the resolution may break existing code. So I can either wait or I may rip out SDL and replace it with raw Win32 code.