Got back to work on my demo, and really made some progress on one of the systems that's been holding me back a bit: user input. I've coded an input reader class and input listener interface, similar to the system employed in OGRE. Classes that want to recieve input information inherit from the listener interface, and hook themselves into the input reader. This gets messages from the OS, packages them, and dispatches them to the hooked classes. This should be finished in the next few days.
Also nearing completion is the hierarchical scene graph manager. I decided to use scene objects to represent things. A scene object class has standard SRT (Scaling, Rotation and Translation) attributes, along with a few base member functions, for adding child objects and performing scaling, rotation and translation. Anything that wants to be in a scene, like an instance of a mesh, a camera or a light, is derived from a scene object. This means that complex objects, like vehicles (with doors which open, wheels which turn and lights that illuminate their environment) can be loaded and manipulated quite easily by the higher level classes that represent actual game objects, built on top of this architecture.
I'm still working on actually loading models, however. The lack of documentation for the XSI file transfer kit has somewhat blunted my attack on that for the time being, and I'm gathering more information to code the whole thing in one go next week. Hopefully. Plus, my trial version of 3DS Max 6 has run out, so I need to buy it if I want to any more messing about with the automatic gun model that is forming the basis of this demo. I shouldn't need to (I saved the model in four formats just in case), but you never can be sure.