Annwvyn Experimental 0.2.1 Happily Refactoring!
Pre-releaseAnnwvyn 0.2.1
This is an API breaking release, as more or less everything until 0.3 will be.
The goal is to refactor AnnEngine into separate modules. The AnnEngine object is too much of a god object, and that's no good for obvious architectural reason. Plus this class is getting too complex and I had no idea on top of my head in what order the game internal systems were refreshed.
So I'm doing some refactoring work. I'm moving methods from AnnEngine to new classes.
The "Annwvyn SubSystem" framework is the new way Annwvyn functionalities have to be implemented. AnnEngine will instantiate it's subsystems at init time (as always)
The subsystem are stored in an std::list, and they are processed in that order, both during refresh and during engine destruction. Some of them are inter-dependent (this is a bit annoying, I have to think about it) so they have to be created in a somewhat rigid order.
Moving things inside the list will change the initialization order, update order and deletion order.
Changelog:
- Removed AnnTools
- Distance function useless because AnnVect3 has it's own
- stringToPhyShapeType has been moved to the only piece of code it's used in (XML reader)
- Fixed clean-up of OgreOculusRender where a shared pointer wasn't put to NULL
- GameObjects uses AudioSources instead of ALuints (raw OpenAL handles)
- AnnLightObject uses type descriptor defined by Annwvyn (Directional light, Point Light, or Spot Light)
- Created macros to get address of all Annwvyn subsystems
- Corected console display with VS2015 toolkit
- Added colored output on console
- App now quit when ovrSessionStatus.ShouldQuit is true
- App now stop running when user wants to get back to Oculus Home
- loadBuffer logging don't tell "Error : No Error" when loading some OGG files
- SubSystem base class for all sub systems (audio, physics, event, object management, resource management...=
- AnnEngine::Refresh() now goes through the list of sub systems instead of doing the refresh one by one
- AnnEngine destructor code simplified and cleaned. Because content are stored in lists instead of vector, there's no need of using the old "deletion queue"
- Added a ResourceManager class. Code to add resource to application is no longer part of AnnEngine
- Added a GameObjectManager class. Code to create, destroy, fetch and update state of GameObject is no longer part of AnnEngine
This is already enough significant changes to call this a release. Engine is still not "real game developement ready" but it's definitively nicer.
I expect to finish cleaning AnnEngine in the next few weeks. Some changes aren't as straightforward as the "game object manager" and the "resource manager". They are still functionality that I'm not sure about where to put it.