I've started writing a game engine for PC (initially Linux only) for fun and giggles, and would appreciate some feedback on the design I've chosen. I've started writing some simple functionality (C++, OpenGL), but I think it's time to hear what you guys have to say. I've written a game (ish) for Android using OpenGL, but it turned out to be such spaghetti that I abandoned the project before I was even close to a releasable product. I found this article, and that's what I'm trying to achieve in my current engine.
As you can see in the sloppy UML diagram below, I've not really implemented much at all (empty classes aren't even created yet).
I have a couple of questions on how to proceed accordingly to the article I linked previously. HiminbjorgRoot is obviously the heart of the engine. This is the class that every game will inherit in order to create a game. In order to drive the game forward, is it "OK" for HiminbjorgRoot to keep an reference to each one of the Core* and *Manager objects and simply call their respective update methods, or does that go againt the principle of avoiding unnecessary coupling? Should the root class instead spam update messages on the bus?
I also wonder how each 3D model gets rendered to the screen. More specifically, I wan't to know about the relationship between the SceneManager and the RenderManager. Does the RenderManager keep a reference to every mesh (which then is sent to my non-existing draw() function in CoreDraw) or do the entities themselves in SceneManager listen on the message bus for a draw message, and then call CoreDraw->draw()?
The above questions are my main concern right now. I have a ton of questions, but they can wait until I've read your replies.