nenuacho / ecslite-interval-systems

LeoECS Lite extension

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

ECSLite Interval Systems

Расширение для ecslite, которое позволяет запускать системы с заданным интервалом

Зависимости

ecslite

ecslite-di

Установка

В виде unity модуля

Поддерживается установка в виде unity-модуля через git-ссылку в PackageManager или прямое редактирование Packages/manifest.json:

"com.nenuacho.ecslite.interval-systems": "https://github.com/nenuacho/ecslite-interval-systems.git",

Интеграция

Расширение предоставляет 2 API для создания систем с интервалом.

Первый способ

Создать экземпляр контейнера систем типа EcsRunSystemsWithInterval. При добавлении в него систем, следует использовать метод

Add(IEcsRunSystem system, float interval, bool spreadByTime = true)

Таким образом для каждой системы в контейнере можно установить индивидуальный интервал

            _systemsWithInterval = new EcsRunSystemsWithInterval(world);
            _systemsWithInterval
                .Add(new SampleSystem1(), 5f)
                .Add(new SampleSystem2(), 5f)
                .Add(new SampleSystem3(), 1f, false)
                .Add(new SampleSystem4(), 1f, false)
                .Inject()
                .Init();

interval - система будет отрабатывать 1 раз в этот промежуток

spreadByTime - указывает, нужно ли распределять вызовы по времени или запускать их синхронно. На примере выше SampleSystem1 и SampleSystem2 будут запускатся раз в 5 секунд, но первый запуск будет случайным в этом промежутке, таким образом, они не будут отрабатывать одновременно. Если нужно, чтобы системы выполнялись одновременно, нужно передать в этот параметр false.

Второй способ

Создать обычный контейнер EcsSystems и, после добавления систем(но до вызова Init), вызвать метод расширения

WithInterval(this IEcsSystems systems, float interval, bool spreadByTime = true)

:

            var intervalSystems = new EcsSystems(world)
                .Add(new SampleSystem1())
                .Add(new SampleSystem2())
                .WithInterval(5f)
                .Inject();
                
            intervalSystems.Init();
            _systemsWithInterval = intervalSystems;

При этом все системы в этом контейнере будут иметь один заданный интервал.

Использование

Использование не отличается от основных контейнеров EcsSystems, за исключением того, что вместо метода Run() нужно использовать метод Run(float deltaTime) c актуальным значением deltaTime

        private void Update()
        {
            _systemsWithInterval.Run(_timeService.DeltaTime);
        }

Важно

В расширении пока не поддерживается IEcsPostRunSystem.

About

LeoECS Lite extension

License:MIT License


Languages

Language:C# 100.0%