1 Developer Experience
Kevin Trogant edited this page 2024-06-28 16:21:27 +02:00

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.