Table of Contents
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 git repository. It uses https://mesonbuild.com/ 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.