Arch ECS - Received Improvements, EventBus instance support and its own discord! Check it out!

Arch is a high-performance c# entity component system for game dev and data-oriented programming. It offers incredible performance combined with a simple API. The best part is that it already has a big ecosystem with additional tools and even source generators to aid development!

It recently received some more improvements, features, and its own Discord.

It’s also now considered “battle tested”, there actually several projects already using it. One is already linked in the Readme, a vampire survivor clone.

The most significant new feature is instance support for the Arch.Extended source generated EventBus, which allows high-performance event dispatching to static and instance receivers with ordering, inlining, and without boxing or lookups. It’s incredibly fast and can also be used outside of Arch.

public partial class MyReceiver{  // Can also be a struct, but structs does not make that much sense due to... being structs

   public MyReceiver(){ 
      Hook();  // Automatic generated method to hook into the event bus and receive methods, Unhook for stop listening.
   }

   [Event(order:0)]
   public void OnShootEvent(ref ShootEvent @event){
      // Handle
   }

   [Event(order:...)]
   public void OnHitEvent(ref HitEvent @event){
      // Handle
   }

   .. Other event receiving methods or 
}

// Static... 
public static class MyStaticReceiver{

   [Event(order:2)]
   public static void OnShootEvent(ref ShootEvent @event){
      // Handle
   }
}

var shootEvent = new ShootEvent();
EventBus.Send(ref shootEvent);  // Notifies listeners in order

Check it out, and leave some feedback, contribution, or star! <3

1 Like

Why do you keep creating new threads for this? Why not just update an existing thread?

  1. Arch (ECS) received another few updates! Check them out! :slight_smile:

  2. “Arch” entity component system - Received new features, Check it out ! :slight_smile:

  3. “Arch” entity component system - New API and code generation update. Check it out ! :slight_smile:

  4. “Arch” ECS for monogame received “pure ecs” support and its 1.1.0 Update, check it out ! :slight_smile:

  5. “Arch” ECS - Update : Less boilerplate, systems and code generation. Check it out ! :slight_smile:

  6. “Arch” - ECS for monogame received CommandBuffers and exclusive queries ! :slight_smile: Check it out !

  7. Archetype ECS for C# and MonoGame, check it out ! :slight_smile:

Good question actually. I thought this is more like a “fire and forget” forum ^^
So i should rather post updates in one existing thread?

Yes. Any new activity brings it back to the top of the list in the Community home page as well, so it’s not as though you’re sacrificing any visibility or the like. Quite the opposite in fact, because people will manually subscribe to threads they’re interested in and get notifications when there is new activity in them. Furthermore, having it all in one thread makes it easy for anyone to see the context/history of a given topic.

Even after months, Arch is still being worked on to improve it and add more features.

        // 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});
        
        // Query and modify entities ( There are also alternatives without lambdas ;) ) 
        var query = new QueryDescription().WithAll<Position,Velocity>(); // Targets entities with Position AND Velocity.
        world.Query(in query, (ref Position pos, ref Velocity vel) => {
            pos.X += vel.Dx;
            pos.Y += vel.Dy;
        });

Recently, improvements have been made and Arch has also received more LowLevel Unsafe Collections, a Persistence Package and also a Relationship Package.

Thanks to the LowLevel package, native memory can be used to avoid GC preassure. By means of the persistence package single entities and whole Arch worlds can be converted to JSON and back. Through the Relationship package simple relations between entities are possible.

Arch is building a multi-faceted ecosystem, try it out and be part of it! We cheerfully accept any help :slight_smile:

Uhm… Have you read the comments… Or looked at the implementation?

Arch is a full ECS that uses tightly packed arrays internally. The High-Level API might not look like this, but it is. Take a look at the wiki, there also lowlevel ways to acess archetype, chunks and chunk-arrays. Furthermore its one of the fastest (if not THE fastest) out there according to some benchmarks.

So please inform yourself before posting such comments.

2 Likes

My apologies.

You are absolutely correct. My misinterpreted(wholly on my part) point was that the C# Event system(you are not using) is much slower the manual calls.