The v2 branch already includes a lot of features, most of them coming from the actual gsoc.
I would like to use this thread for a discussion how the architecture of the engine should look like in v3.
My main issue with the current project is the size. Everything is in the engine, all in one huge project.
The advantage is obvious, you find everything in one place.
The disadvantage in my opinion: Everything should not be in one place, especially not when building software
We have a lot of subpackages, lets have a look at them:
Of course it will not make sense to do a hard package split, we need to inspect things in detail.
Therefore it will make little sense to do it in one huge change.
What I would propose is the following:
1. Introduce a new layer between modules and the engine: Engine-libs. Move the entire engine project to engine-old and make it depend on the old engine. The code will do the same and be under the same versioning.
2. Start to move small pieces to more engine-libs, e.g. math, physics, ... The code will stay the same and will also be under the same versioning (I think checking out 30 repos to get the engine working is not useful).
This will also reveal architecture isses because the new engine-libs should not depend on engine-old.
If we repeat this for some time, we may end up with a better split based on projects, have the option to throw away entire projects with a new implementation (inventory is next? ) and make it easier for a new developer to get into the code.
Opinions are welcome
I would like to use this thread for a discussion how the architecture of the engine should look like in v3.
My main issue with the current project is the size. Everything is in the engine, all in one huge project.
The advantage is obvious, you find everything in one place.
The disadvantage in my opinion: Everything should not be in one place, especially not when building software
We have a lot of subpackages, lets have a look at them:
- audio: sound stuff
- config: property system, to be extended/exchanged with the flexible config soon
- context: dependency registry
- engine: wiring systems together (oh, we have an engine in the engine - engineception?)
- entitySystem: engine layer above gestalt entitysystem, adds lifecycle and prefab support
- game: data classes for a game (setup, seed, ...)
- i18n: internationalization
- identity: certificate stuff
- input: input and bindings management
- logic: (ranting ) "i don't know where to fit my sources, but it is some kind of logic" - contains a bit of everything
- math: engine math classes, based on TeraMath and bullet
- monitoring: performance monitoring
- network: network logic, also one of the "no one will ever touch it" sections
- particles: particle system
- persistence: serialization of events/entities
- physics: physics system
- reflection: utility classes for reflection
- registry: close to context, holds the dependency injection
- rendering: magic section
- telemetry: telemetry gsoc code
- unicode: i foud no references to any class in this package, looks like dead constants to me
- utilities: close to logic, a bit of everything
- version: version dto
- world: world stuff, like generator logic, block shapes etc.
Of course it will not make sense to do a hard package split, we need to inspect things in detail.
Therefore it will make little sense to do it in one huge change.
What I would propose is the following:
1. Introduce a new layer between modules and the engine: Engine-libs. Move the entire engine project to engine-old and make it depend on the old engine. The code will do the same and be under the same versioning.
2. Start to move small pieces to more engine-libs, e.g. math, physics, ... The code will stay the same and will also be under the same versioning (I think checking out 30 repos to get the engine working is not useful).
This will also reveal architecture isses because the new engine-libs should not depend on engine-old.
If we repeat this for some time, we may end up with a better split based on projects, have the option to throw away entire projects with a new implementation (inventory is next? ) and make it easier for a new developer to get into the code.
Opinions are welcome
Last edited: