With the physics out of the way, I'm now looking into completing the game mechanics, with a view to complete the 'fluff' elements once the core gameplay is complete, this will give me a much better idea of a direction for the project giving me time to make core changes without having to drastically rehash the project.
So my next aim is to facilitate the smooth display of bitmapped text so that I can show when a goal has been scored, what the score is, button names and so on. Now this is not a core gameplay mechanic in itself, but without the ability to display the score, there wouldn't be much of a game. Now I already have a working bitmap font class in place, but I want to be able to have the text perform different movement effects such as the text flying onto the screen character by character, or spiralling onto the screen from a distance, zooming in over the course of the animation while rotating. To allow this, I have started work on a texteffect class which is maintained externally to the bitmapfont class. The texteffect class can be passed into the print function to slap the effect onto any given text. So now, if I want to print the score, I make a call to Font->Print() each frame specifying zero duration so the text is overwritten every frame with the updated text. I supply an externally maintained texteffect class which keeps track of what point the animation is up to. For one off pieces of text like a fly-in "Goooooal!!!" piece of text, I can make a one-off call to print and supply it with a set duration and relevant text effect.
The print command stores the texteffect class in the relevant textbox and obtains a matrix to apply translation/rotation/scaling either to the whole string, or to an individual character. The text effect class maintains it's own timer and automatically interpolates rotation/scaling/translation using a standard LERP.
Once I have completed the text effects, I think the next natural step will be to implement the final scoring scheme. Once the scoring scheme is complete I will implement powerups and then I will look at implementing the game flow (start game sequence, game, end game sequence, high score table, movement between levels, etc). Then I will update my rudimentary AI scheme to work in a more professional manner. This should bring me up to a level where I have a complete game that just needs polish, like rollover effects for the UI, a complete set of game options, ironing out bugs, improving the speed and adding fancy graphics effects like shadows, lighting, motion blur and reflection. I may also need to look into allowing the game to run on older graphics cards without pixel shaders. I know there is still a lot of work ahead of me, but I feel like I'm finally getting each component of my game up to a moe professional standard, the bulk of my work has been having to rehash older ideas for components because, although they work well in isolation, they did not fit into the grand design as fluidly as they should.
If I'm lucky, this professional appoach will allow me to reuse or adapt a lot of my existing code in future projects (namely Orbs: Battle Arena).
Speaking of which, I've had a new idea for the Orb game. In order to set it apart from my Airhockey game in terms of complexity, I'm going to throw in elements of another game... Bomberman. A bomberman game using rolling robotic orbs armed with a variety of powerups where players can be destroyed by bombs or forced out of an arena by being either knocked out or blown out, but players respawn to continue play once destroyed albeit at a score penalty. Adding the element of Arena knock-outs should add an extra strategic element to the bomberman genre without making the game too complex. I like the idea because like a move in chess, the move itself is simple, but combined with the ability to drop bombs, the strategic options multiply. I wonder if I can think up any further simple additions that would work in the same vein.
Something for me to think on anyhoo!