genaray / Arch

A high-performance C# based Archetype & Chunks Entity Component System (ECS) with optional multithreading.
Apache License 2.0
921 stars 78 forks source link
csharp dotnet dotnet-core ecs entity-component-system entity-framework fast game game-development gamedev godot monogame monogame-community monogame-framework multithreading net7 net8 netstandard21 stride unity

Arch

Discord Maintenance Nuget License C#

A high-performance C# based Archetype & Chunks Entity Component System (ECS) for game development and data-oriented programming.

Download the package, get started today and join the Discord!

dotnet add PROJECT package Arch --version 1.3.0-alpha

⏩ Quickstart

Arch is bare minimum, easy to use, and efficient. Let's say you want to create some game entities and make them move based on their velocity... sounds complicated? It's not! Arch does everything for you, you only need to define the entities and the logic.

I bet you don't want to read tons of documentation, theory, and other boring stuff right?
Let's just ignore all that deep knowledge and jump in directly to get something done.

// Components ( ignore the formatting, this saves space )
public struct Position{ float X, Y };
public struct Velocity{ float Dx, Dy };

public sealed class Game 
{
    public static void Main(string[] args) 
    {     
        // Create a world and entities with position and velocity.
        var world = World.Create();
        for (var index = 0; index < 1000; index++) 
            world.Create(new Position{ X = 0, Y = 0}, new Velocity{ Dx = 1, Dy = 1});

        // Enumerate entities with Position AND Velocity to modify them
        var query = new QueryDescription().WithAll<Position,Velocity>();
        world.Query(in query, (Entity entity, ref Position pos, ref Velocity vel) => {
            pos.X += vel.Dx;
            pos.Y += vel.Dy;
            Console.WriteLine($"Moved: {entity.Id}"); 
        }); 
    }
}

[!NOTE] The example is very simple. There more features including queries without lambda or an API without generics and much more. Checkout the Documentation!

💡 Highlights

This is all you need to know, with this little knowledge you are already able to bring your worlds to life.
However, if you want to take a closer look at Arch's features and performance techniques, check out the Wiki! There's more to explore, for example...

🤝 Our promise

🚀 Features

🧩 Extensions

Arch has some extensions that add more features and tools. Among them for example :

🚀 Performance

Arch is already one of the fastest ECS and uses the best techniques under the hood to achieve maximum performance and efficiency. Care is always taken to find a healthy balance between CPU performance and ram utilization.

If you are more interested, have a look at the benchmark!

📖 Documentation

Were we able to convince you? If so, let's get started. We have prepared a whole wiki to explain all the important aspects and provide examples. Click here for the documentation!

💻 Projects using Arch

Arch is already used in some projects, for a more detailed look, take a look at the wiki!

Space Station 14

Space Station 14 is inspired by the cult classic Space Station 13 and tells the extraordinary story of everything that can go wrong on a shift at a space station. You take on a role and complete your tasks so that the space station doesn't go to the dogs... or do the exact opposite. Prepare yourself for chaos and the finest roleplay. Best of all, SS14 is open-source and anyone can play!

Roguelite-Survivor

An action-packed c# clone of the hit "vampire survivor" based on monogame and arch! Fight your way through hordes of different enemies, level up your character, collect permanent items and explore various maps! Try it out!

EquilibriumEngine-CSharp

Equilibrium Engine is a data-oriented C# game engine that takes advantage of ECS pattern followed by Hot-Reloading of your libraries which allows you to quickly iterate on different aspects of your projects.