The Stage Implementation

The class hierarchy and API is designed to be modular and readily extensible, so that additional puppet and joint types can be supported. Both Puppet and Joint are abstract classes that real entities derive from, and the modifications that need to be inserted into Puppet and Stage to accommodate these additional types are minimal and clearly labeled. So if the Stage is implemented in a new graphics engine with additional capabilities, new types of Puppets can be made without damaging old code.

Our current implementation is written in C++, and uses the LithTech gaming engine. LithTech provides excellent support for dynamic lights, skeletal animation through model node control, and particle systems. It's also immensely stable.

The only downside we found was a small bug that prevented models and cameras from being moved correctly outside of LithTech's full-scale physics engine, a bug that the LithTech team swears will be fixed with the next release. We worked around the movement problem with models by using nodal animation, but as of yet, proper camera support for the Stage remains unwritten. (We got around that this cycle by using a smaller version of their physics system for the camera... the code for it was readily available, but this means the camera right now can only be controlled from the displaying computer.)