Game Development Reference
The definition of what constitutes an engine varies across the industry. At its most
basic, the term describes a code base that provides common functionality across
multiple projects. The aim is to share the cost in resources required to develop
this functionality. More advanced engines provide a platform and tools that can
have a substantial impact on the game development process. The architecture of
an engine determines how flexible, functional, reliable, and extensible that engine
is and thus how successfully it can be used across multiple projects.
With an emphasis on modularity and encapsulation to divide large systems
into more manageable components, the principles of object-oriented program-
ming (OOP) embody many of these attributes. As games tend to center on a
simulation made up of objects, most engines apply these principles on an object
level, creating various classes of object, often in an inheritance hierarchy, with
progressively complex functionality.
Aspect-based engines instead apply these principles on an engine level. Using
aggregation the engine is constructed of modules, called aspects ,eachofwhich
supplies a strict subset of the required functionality such as rendering, audio, or
physics simulation. These aspects share a common interface allowing them to
communicate with the core of the engine and access shared data describing the
current game state. In theory each aspect is a separate engine with a very specific
task, interpreting the shared data in the core via a narrow viewpoint that best
fits the functionality it provides.
Engine design and development is not just a problem of programming, it is also
one of management. For developers who have limited resources in both staff and