Skip to content

DCFApixels/DragonECS-ClassicThreads

Repository files navigation

Version License Discord QQ

Classic C# Threads for DragonECS

Languages: Русский English(WIP)

Support for processing entities in multiple threads, based on classic C# threads implementation.

NOTICE: The project is a work in progress, API may change.
While the English version of the README is incomplete, you can view the Russian version.


Installation

Versioning semantics - Open

Environment

Requirements:

  • Dependency: DragonECS
  • Minimum version of C# 7.3;

Optional:

  • Support for NativeAOT
  • Game engines with C#: Unity, Godot, MonoGame, etc.

Tested with:

  • Unity: Minimum version 2020.1.0;

Unity Installation

  • Unity Package

The framework can be installed as a Unity package by adding the Git URL in the PackageManager or manually adding it to Packages/manifest.json:

https://github.com/DCFApixels/DragonECS-ClassicThreads.git
  • Source Code

The framework can also be added to the project as source code.


Parallel iteration

EcsThreadHandler _handler;
public void Run(EcsPipeline pipeline)
{
    var group = _world.Where(out Aspect a);
    void Handler(ReadOnlySpan<int> entities)
    {
        foreach (var e in entities)
        {
            a.poses.Get(e).position += a.velocities.Read(e).value * _time.DeltaTime;
        }
    }
    group.IterateParallel(_handler ??= Handler, 1000);
}

NOTICE: The smaller the minimum size of the group part when dividing, the more threads can be utilized. In some situations, too many threads can negatively impact performance.

NOTICE: Inside the handler, creating/deleting entities, adding/removing components on entities is prohibited. Only modification of data within components is allowed.

About

No description or website provided.

Topics

Resources

License

MIT, Unknown licenses found

Licenses found

MIT
LICENSE
Unknown
LICENSE.meta

Stars

Watchers

Forks

Releases

No releases published

Languages