Quick update!
I am still lurking these boards. This project went on a brief hiatus, but is now in total rewrite to clean things up and bring in some better solutions.
Here's a brief overview:
class FrameworkDoes basic initialization and game loop. Has a stack holding all active game states. Each State on the stack will receive an update every frame, unless paused. I'm hoping this makes it easier for things like in-game menus, minigames, and popup bonus levels. Pause the current state, push a new state, then pop/unpause when done.
class StateA pure-virtual base class. User derives from this to create a game state, which is loosely defined as receiving updates, and hosting Actors/game objects. A menu, a game level, or a lobby would all be derived from State. Each State has it's own Event queue, but can also send to other States by signaling the Framework with a global Event. Events are processed through a multimap that signals any callbacks registered to the event name.
class ModulePure-virtual base class. Basically any Actor/game object behavior is extracted into a module. A 3d model, the ability to jump, or firing a weapon could be distinct modules. The user derives from Module, implements the behavior, and thereafter it can simply be 'plugged in' to any game object. One Module might contain the behavior to trigger one of several animations based on the Event received. 'Inventory' could be a module. The ability for an object to be picked up and placed in inventory, could also be a Module. Modules live inside State objects, and communicate with each other through Events.
PatternA pattern is parsed from XML, and represents a template for a game object. It defines a type of Actor by what modules they make use of, and what the initial data should be for those modules. The Knight or the Chicago man could be expressed as Patterns (given that the user has written appropriate Modules).
ActorAn Actor is an instance of a Pattern. An Actor is just an ID -- all behaviors exist in modules, all static or shared data exists in the Pattern, and all dynamic data is handled by the appropriate module.
Most of this has been written in a marathon-codedump, so I'm in the process of making sure everything works as intended. I may add a Plugin class so that Framework can call arbitrary user stuff during init (other libraries, etc). I'm also considering adding an input handling class. When things are more stable I'll write up some demos for 'proof of concept', and Modules for easy Horde3d integration.
Eventually the goal is that non-programmers be able to import modules into a GUI tool and compose new types of Patterns/Actors through the magic of 'drag and drop', and by setting a few attributes. The tool will export into XML, and then these new patterns can appear in-game, fully functional, without touching any code or recompiling. New functionality is added by writing new Modules, and does not interfere with existing code.
That's the goal anyway!
I'll make a new post when I'm happy with the rewrite (2wks?). I'll also be changing the name and moving it to Googlecode under a dual license GPL/talk to me.