Home

Awesome

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)

:

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

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

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

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

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