Add Developer Experience

Kevin Trogant 2024-06-28 16:21:27 +02:00
parent db38bb26e2
commit b85de84681

35
Developer-Experience.md Normal file

@ -0,0 +1,35 @@
This is the (planned) workflow for engine and game development.
The goal is a smooth experience that reliably delivers stable games.
## Engine
The engine lives inside [this](https://libneat.hopto.org/git/kevin/rtengine) git repository.
It uses [https://mesonbuild.com/](meson) as it's build system and makes use of it's wrap feature to fetch dependencies (except some that are currently vendored-in inside the contrib/ directory).
Code changes are pushed to feature branches and trigger a CI pipeline that builds the engine, runs automatic tests and, if successfull, builds a packaged version as an artifact.
The engine contains **libasset_compiler** for building *resources* from source assets.
A command-line tool **assetc** uses this library to build all (changed) source assets during CI execution.
The packaged build also contains the compiled resources.
**libasset_compiler** can be embedded inside the running game to compile changed assets during runtime for faster iteration speeds.
The resource-system inside the engine notifies other systems about changed resources which can then updated during runtime.
## Game
Games use the engine as an subproject (possibly also via meson-wrap) and fix it to a specific version (to prevent engine bugs from breaking game-dev).
The same CI process as for the engine should also apply to the game, with extended and/or replaced tests.
## Art
Art needs to be put into the game. For the forseeable future, we don't have in-house artists, so this will mostly go through the same process as Code changes.
In the future, it's possible that artists use a packaged (tested) build from CI to put their assets into the game and check in the assets via git (or a GUI frontend for that purpose).
## Engine/Game resources combined
The engine (will) supports a *Virtual File System* that allows us to map multiple "physical" paths to the same "virtual" path.
For example:
> /game/resources -> /resources
>
> /game/submodules/engine/resources -> /resources
Resources in both physical directories will show up in the same virtual directory, allowing the game to use resources without distinguishing between engine and game assets.