In general, if you are going to call something a mess, especially twice, you should have something substantial to back your claim.
You called it a mess twice. We are all waiting for your reasons why it is a mess and what could be improved. All you have done until now is call his engine architecture a mess and provide almost 2 whole sentences on your “superior” method, without explaining why it is superior or why the alternative is a “mess”.
Ok here it goes:
- Looking at the diagram, I don't see that it follows any standard, when I see a non standard diagram I am looking for an legend or some explanation to what for example arrows and, boxes of different color/shape means.
- Looking at top left corner, the "Utility Library", it has 3 green arrows to something called "System Managers", what this means is not as I said not defined, so I have to "guess" it means some sort of abstraction, that things in the "Utility Library" access "stuff" in "System Managers", probably in a very nested way that they could not draw it.
- To make this worse, looking at their "Job Manager" in "System Managers", it has three green arrows pointing down to nothing... I would consider this as an error in the diagram because I can not see what that notation is supposed to explain.
- They have green boxes, which seems to be classes and grey boxes which seem to be something abstract like an event or data. This is even more confusing since some of the classes are connected with arrows to these abstract things.
- Looking at the higher level, they seem to have divided the engine into different layers, such as "Low level library", "System managers", "Base Services", "Large Scale Architecture", "Plugin Modules" and Application".
- So "Low level library" access stuff in "System Managers", which seems a bit wierd since in my world, high level code, like a "Manager" for would call the low level stuff to get brute work done, while keeping the decision making in the "Manager" classes. Here it seems like the "Low Level Library" seems to decide what the "System Managers" are doing.
- Looking the "Scene Graph" in the "System Managers", it somehow has a grey box called "Sound Sources", i wonder what sound has to do in the Scene Graph, in my world, sound sources does not make sense to have in a Scene Graph, perhaps you would want sound objects in there to trigger sounds in relation to events and proximity, but this the architecture does leave the intepretation in the eye of the observer, I really don't feel I am getting the information I want from this diagram.
- The "Resource Packager", "String Importer" and "Sound Player" does not seem to have any arrows connected from or to anything else, are these things even used? I don't understand.
- What is the difference between the green and red arrows?
- What is the difference between the managers in "Base Services" and "System Managers", why is for example "Resource Manager" a part of "Base Services" and not "System Managers".
- Looking at a class like "Physics Manager", it seems to access the "World Manager" which also seems to access "Game", however it also seems that "Physics Manager" accesses the "Game". I can undestand that "Word Manager" access the "Game", but why does "Physics Manager and "Interface Manager" also need direct access to it?
- There are tons of these questions and ambiguties, this so called architeture diagram gives me an idea of the code layout in general, but it does very little explaining how the engine works, which is what I assume an diagram over the architecture should do. For example, saying that the "Low Level Libraries" access the "System Managers", the "System Managers" accesses the "Large Scale Architecture", the "Large Scale Architecture" access the "Application" and "Plugin Models", the "Base Services" access the "System Managers" and "Plugin Modules" and finally that the "Plugin Modules" access the "Application" tells me just as much of the engine architecture as much and could be depicted on a much smaller package diagram.
I could go on here, hopefully I made my point.
You keep data, logic, and graphics separate. Great. That is quite the common practice these days, and I don’t quite see where C4 Engine violates these practices. Why don’t you provide more details on this “mess”, such as where it violates this principal?
I never made such claim that the C4 Engine does violate practice.
I think part of the problem is that you missed the question being asked.
If I walk up and say, “Hey, tell me about game-engine architecture,” and you say, “Use a modified version of MVC and three-tier system,” I would follow by saying, “Well, data, logic, and graphics are always separate. So what about game-engine architecture? Can you tell me about that?”
No, data, logic and graphics are not always separate, if you played a game that forces you to restart the game because you made some graphical changes, or does not allow you to do some graphical changes while playing, you can be pretty sure the game suffers from mixing graphics either into data or logic.
My modified MVC/three-tier system is basically the high level architecture of my engine, if you go down on a lower level, examining the logic, you will see stuff like a scripting module in inside that, a state manager a number of states etc.
For someone intrested in my engine architecture, I would of course show first the high level design, explaining the purpose of the model, presentation, controller and logic layers and how they interact, and then for each layer show a more detailed view.
The point is that people generally appreciate specific examples of anything that is right or wrong.
If you want to talk trash on someone’s engine design you should probably give us some specific examples of that trash to back your case.
If your design is superior you should probably explain the pros and cons of each alternative so that we the readers—but more importantly the original topic starter—can see your side of things and make our own considerations.
Yes, that would be a good idea, however I am a busy man, so just saying what I could and provided the sources to wikipedia for the OP to read up on the subject him/herself.
I generally get straight to the point and speak frankly, so I will tell you frankly and directly that I think you are making your own engine and have your own ideas as to how it should be done, and it somehow offends you when someone else does things differently. You like your way so much you consider most alternatives to be “messy”.
You have twice called C4 Engine an architectural mess and even gone as far as to call the developer(s) clueless in regards to software development, even though you yourself are not a published author (if you don’t understand why I mentioned that, do some research).
You are obviously offended.
I did not call the developers clueless about software development, I called them clueless about software engineering on very loose basis, perhaps they are awesome software enginners but it does not show on that diagram.
My advice: Get over it. You will be so much happier when you don’t think you are awesome.
I am I just a concerting software engineer. If you think I am being awesome, perhaps you should take a softare engineering class?
I am making a next-gen engine too. I am not offended by his architecture and never though it was a mess even though I wouldn’t do some things the same way. It didn’t offend me that some people might do things differently than I do.
It does not offend me either, but if I think something is wrong, i am not afraid to say so.
So if I think one way is better than another, I am going to explain why. And that is fairly important on a forum whose purpose is to share knowledge.
If you think you can do that, you are welcome to reply one more time to this topic.
L. Spiro
Yeah I agree, I could have explained why I think my architecture is good.