Join GitHub today
GitHub is home to over 28 million developers working together to host and review code, manage projects, and build software together.Sign up
Clone this wiki locally
For game developers who risk being made obsolete by “The Next Big Thing” (TNBT) - awe6, the inverted game framework, is a development tool focused on Future Proofing. It provides a shared language for all team members, for any game, for any platform. It embraces TNBT, is open source, and is designed to power any genre of game.
This framework adopts an entity component approach (rather than a deep heirarchy structure). For merits of such an approach please read Britt L Hannah's article. Additional benefits can be found here.
All components are created using factory methods, and each component provides further methods to allow injection of child components. Thus an inversion of control is achieved: a Factory populates components based on starting state (configuration) and subsequent controllers defined within those components (reacting to user input). A new "game" is defined by a new configuration. Therefore reuse of modular code is achieved. Crucially, automated reuse of modular code becomes possible - including runtime adaptation.
The interface has been designed to encourage entities to extend existing libraries whenever possible - awe6 is a framework rather than a games development kit so (with the exception of the batteries included) should normally be considered a facade or the "cement between the bricks".
The framework is open source, while the option for proprietary components is unrestricted. The adoption and upgrade rates of the framework is benefited by a permissive license, thus expanding the market opportunity for commercial components.
High level concepts must be balanced by deployable practical tools. So this framework comes "ready to run" with a shallow heirarchy providing easy access to frequently required services (e.g. user input, assets and audio). The heirarchy and associated concepts are:
- Factory: creates all subsequent components based on configuration.
Kernel: handles updates and services. The "main loop" in gaming terms.
- Preloader: loads initial resources.
- Assets: handles access to resources.
- Session: maintains and arbitrates state.
- Audio: handles multi-channel music and sounds.
- Inputs: handles UI input: keyboard, mouse, other virtual devices.
- Overlay: provides application chrome (including: exit, pause, mute controllers) and view.
Scenes: state machine for collections of active Entities.
- Entities: Tree of related and non related components, highly versatile in their purpose. Additional heirarchy is determined by Factory or Entity design.
The framework uses synchronous state throughout all default components. So the game could be serialised, paused, rewound or double timed.
The independent casual game developer / small team represents the target user of awe6. Currently the primary targets for casual games are the web via HTML5 or Flash / SWF and mobile via HTML5 or Flash / AIR.
The Next Big Thing comes along too often to develop specifically for it. Therefore awe6 is a collection of declarative interfaces, intended to be platform agnostic. For practical purposes there is a working implementation targeting today's Big Things (HTML5, SWF, Android, iOS).
- Cross platform interfaces defining top level game functionality. All public signatures are platform agnostic.
- Haxe implementation of all model and controller functionality. All code runs on supported haxe targets (swf, js, cpp).
- Platform specific implementation of view and input functionality using custom driver packages (flash, openFL, createJS are included, kha is under development).