Component based game engine design
Update 2013-01-07: If you want to see a good mix of component-based game engine with the (in my opinion) superior approach of reactive programming take a look at the V-Play engine. It very well integrates QTs QML property binding functionality.
We did some research on CBSE in games at our university and I collected some material over the years:
CBSE in games literature:
- Game Engine Architecture
- Game Programming Gems 4: A System for Managin Game Entities Game
- Game Programming Gems 5: Component Based Object Management
- Game Programming Gems 5: A Generic Component Library
- Game Programming Gems 6: Game Object Component System
- Object-Oriented Game Development
- Architektur des Kerns einer Game-Engine und Implementierung mit Java (german)
A very good and clean example of a component-based game-engine in C# is the Elephant game framework.
If you really want to know what components are read: Component-based Software Engineering! They define a component as:
A software component is a software element that conforms to a component model and can be independently deployed and composed without modification according to a composition standard.
A component model defines specific interaction and composition standards. A component model implementation is the dedicated set of executable software elements required to support the execution of components that conform to the model.
A software component infrastructure is a set of interacting software components designed to ensure that a software system or subsystem constructed using those components and interfaces will satisfy clearly defined performance specifications.
My opinions after 2 years of experience with CBSE in games thought are that object-oriented programming is simply a dead-end. Remember my warning as you watch your components become smaller and smaller, and more like functions packed in components with a lot of useless overhead. Use functional-reactive programming instead. Also take a look at my fresh blog post (which lead me to this question while writing it :)) about Why I switched from component-based game engine architecture to FRP.
CBSE in games papers:
- Component Based Game Development – A Solution to Escalating Costs and Expanding Deadlines?
A Flexible And Expandable Architecture For Computer Games(404)- A Software Architecture for Games
- A Generic Framework For Game Development (WebArchive)
- Smart Composition Of Game Objects Using Dependency Injection
CBSE in games web-links (sorted by relevancy):
Component based objects Wiki(Empty wiki)- Evolve Your Hierachy
- Game Object Structure: Inheritance vs. Aggregation
- A Data-Driven Game Object System (PDF)
- A Data-Driven Game Object System (PPT)
- Component-based prototyping tool for flash
Theory and Practice of Game Object Component Architecture(404)- Entity Systems are the Future of MMOs
- ogre3d.org forum: Component Based Objects
- gamedev.net: Outboard component-based entity system architecture
- gamedev.net: Entity System question
- Brainfold entity-system blog (WebArchive)
There does seem to be a lack of information on the subject. I recently implemented this system, and I found a really good GDC Powerpoint that explained the details that are often left behind quite well. That document is here: Theory and Practice of Game Object Component Architecture
In addition to that Powerpoint, there are some good resources and various blogs. PurplePwny has a good discussion and links to some other resources. Ugly Baby Studios has a bit of a discussion around the idea of how components interact with each other. Good luck!
While not a complete tutorial on the subject of game engine design, I have found that this page has some good detail and examples on use of the component architecture for games.