Minecraft-like game made in one week. The game world is procedurally generated and composed of sectors. Each sector is loaded when the player comes close to it and unloaded when the player is far away from it.
Sectors are composed of chunks, with each chunk having its own mesh. Meshes are created using the greedy meshing algorithm, which attempts to create as large stripe as possible for each face of every block.
Chunks are saved to a file upon the destruction of any block. When the player enters the chunk for the first time, all chunks are randomly generated. Upon subsequent visits, the chunk is loaded from the file.
Each chunk is composed of blocks, which can be destroyed and placed. Different blocks have varying destruction times.
This solution measures the performance of entity-component-system (ECS) libraries for C# using a concrete game. It is divided into two projects: the game and the benchmark.
The game simulates a world with villagers who have simple AI utilizing behavior trees. The terrain is procedurally generated at runtime using pixel and compute shaders.
The game uses an abstract layer instead of a specific ECS library. This allows the game to run with different ECS libraries, which is necessary for benchmarking. The main challenge in designing the abstract layer was creating a common interface for different ECS libraries while ensuring that the abstract layer does not harm the performance of any measured ECS library.
The benchmark measures how quickly the game can simulate worlds of different sizes using various ECS libraries. Benchmark results can be found in the thesis or poster (both available in the GitHub repository, though currently only in Czech). In the future, I plan to add more ECS libraries, expand game features, refactor the code, and create a tutorial for adding ECS libraries.