From 49495a908ca6ca1d2d51ac9a897ca599ade6eb1b Mon Sep 17 00:00:00 2001 From: Mikhail <99481254+DCFApixels@users.noreply.github.com> Date: Tue, 30 May 2023 03:15:26 +0800 Subject: [PATCH 01/11] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index c1f2338..cd5683d 100644 --- a/README.md +++ b/README.md @@ -4,6 +4,7 @@

Version + GitHub

From 05c8ab38c6be360add638f89647ee6551c83772a Mon Sep 17 00:00:00 2001 From: Mikhail <99481254+DCFApixels@users.noreply.github.com> Date: Wed, 31 May 2023 04:05:21 +0800 Subject: [PATCH 02/11] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index cd5683d..fae725a 100644 --- a/README.md +++ b/README.md @@ -34,7 +34,7 @@ https://github.com/DCFApixels/DragonECS-AutoInjections.git Фреймворк так же может быть добавлен в проект в виде исходников. # Интеграция -Добавьте вызов метода `AutoInject()` для фабрики Pipeline. Пример: +Добавьте вызов метода `AutoInject()` для Builder-а пайплайна. Пример: ```csharp _pipeline = EcsPipeline.New() .Inject(world) From 43799f4e8404f1ed058753510cac078308048914 Mon Sep 17 00:00:00 2001 From: Mikhail <99481254+DCFApixels@users.noreply.github.com> Date: Wed, 31 May 2023 04:06:42 +0800 Subject: [PATCH 03/11] add README-RU --- README-RU.md | 133 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 133 insertions(+) create mode 100644 README-RU.md diff --git a/README-RU.md b/README-RU.md new file mode 100644 index 0000000..fae725a --- /dev/null +++ b/README-RU.md @@ -0,0 +1,133 @@ +

+ +

+ +

+Version + GitHub + +

+ +# Auto Injections for [DragonECS](https://github.com/DCFApixels/DragonECS) +Расширение призвано сократить объем кода, упростив инъекцию зависимостей, делая их автоматически. +> **ВАЖНО!** Проект в стадии разработки. API может меняться. +# Оглавление +* [Установка](#Установка) + * [Зависимости](#Зависимости) + * [Unity-модуль](#Unity-модуль) + * [В виде исходников](#В-виде-иходников) +* [Интеграция](#Интеграция) +* [Инъекция зависимостей](#Инъекция-зависимостей) +* [Auto Builder субъектов](#Auto-Builder-субъектов) +* [Пример кода](#Пример-кода) +* [Не null инъекции](#Не-null-инъекции) + +# Установка +### Зависимости +Убедитесь что в проекте установлен фреймворк [DragonECS](https://github.com/DCFApixels/DragonECS). +* ### Unity-модуль +Поддерживается установка в виде Unity-модуля в при помощи добавления git-URL [в PackageManager](https://docs.unity3d.com/2023.2/Documentation/Manual/upm-ui-giturl.html) или ручного добавления в `Packages/manifest.json`: +``` +https://github.com/DCFApixels/DragonECS-AutoInjections.git +``` +* ### В виде исходников +Фреймворк так же может быть добавлен в проект в виде исходников. + +# Интеграция +Добавьте вызов метода `AutoInject()` для Builder-а пайплайна. Пример: +```csharp +_pipeline = EcsPipeline.New() + .Inject(world) + .Inject(_timeService) + .Add(new TestSystem()) + .Add(new VelocitySystem()) + .Add(new ViewSystem()) + .AutoInject() + .BuildAndInit(); +``` + +# Инъекция зависимостей +Атрибут `[EcsInject]` убирает необходимость использования интерфейса `IEcsInject`, поля помеченные таким атрибутом автоматически подхватят зависимости внедренные в Pipeline. Пример: +```csharp +[EcsInject] EcsDefaultWorld _world; +``` +# Auto Builder субъектов +Так же AutoInjections упрощает построение субъектов. Для начала наследуйте субъект не от `EcsSubject`, а от `EcsSubjectDI`, а далее добавьте специальные атрибуты. + +Атрибуты для инициализации полей с пулами: +* `[Inc]` - кеширует пул и добавит тип компонента в включающее ограничение субъекта, аналог метода `Include`; +* `[Exc]` - кеширует пул и добавит тип компонента в исключающее ограничение субъекта, аналог метода `Exclude`; +* `[Opt]` - только кеширует пул, аналог метода `Optional`; + +Дополнительные атрибуты только для задания ограничений субъекта. Их можно применить к самому субъекту, либо к любому полю внутри. Используйте атрибуты: +* `[IncImplicit(type)]` - добавит в включающее ограничение указанный в конструкторе тип `type`, аналог метода `Include`; +* `[ExcImplicit(type)]` - добавит в исключающее ограничение указанный в конструкторе тип `type`, аналог метода `Exclude`; + +# Пример кода +```csharp +class VelocitySystemDI : IEcsRunProcess +{ + class Subject : EcsSubjectDI + { + [ExcImplicit(typeof(FreezedTag))] + [Inc] public EcsPool poses; + [Inc] public EcsPool velocities; + } + + [EcsInject] EcsDefaultWorld _world; + [EcsInject] TimeService _time; + + public void Run(EcsPipeline pipeline) + { + foreach (var e in _world.Where(out Subject s)) + { + s.poses.Write(e).position += s.velocities.Read(e).value * _time.DeltaTime; + } + } +} +``` +
+Тот же код но без AutoInjections + +```csharp +class VelocitySystem : IEcsRunProcess, IEcsInject, IEcsInject +{ + class Subject : EcsSubject + { + public EcsPool poses; + public EcsPool velocities; + public Subject(Builder b) + { + b.Exclude(); + poses = b.Include(); + velocities = b.Include(); + } + } + + EcsDefaultWorld _world; + TimeService _time; + + public void Inject(EcsDefaultWorld obj) => _world = obj; + public void Inject(TimeService obj) => _time = obj; + + public void Run(EcsPipeline pipeline) + { + foreach (var e in _world.Where(out Subject s)) + { + s.poses.Write(e).position += s.velocities.Read(e).value * _time.DeltaTime; + } + } +} +``` + +
+ +# Не null инъекции + +Чтобы поле помеченное `[EcsInject]` было проинициализированно даже в случае отстувия инъекции, в конструктор атрибута можно передать тип болванку. В примере ниже поле `foo` получит экземпляр класса `Foo` из инъекции или экземпляр `FooDummy : Foo` если инъекции небыло. +``` csharp +[EcsInject(typeof(FooDummy))] Foo foo; +``` +> Для корректной работы переданный тип должен иметь конструктор без парамтров и быть либо того же типа что и поле, либо производного типа. + +Расширение так же сообщит если по завершению предварительной инъекции, остались не проинициализированные поля с `[EcsInject]`. From 40c8242c97a824134c311f65665df2f49e903c72 Mon Sep 17 00:00:00 2001 From: Mikhail <99481254+DCFApixels@users.noreply.github.com> Date: Wed, 31 May 2023 04:20:54 +0800 Subject: [PATCH 04/11] Update README.md --- README.md | 70 ++++++------------------------------------------------- 1 file changed, 7 insertions(+), 63 deletions(-) diff --git a/README.md b/README.md index fae725a..56a7d4a 100644 --- a/README.md +++ b/README.md @@ -9,61 +9,15 @@

# Auto Injections for [DragonECS](https://github.com/DCFApixels/DragonECS) -Расширение призвано сократить объем кода, упростив инъекцию зависимостей, делая их автоматически. -> **ВАЖНО!** Проект в стадии разработки. API может меняться. -# Оглавление -* [Установка](#Установка) - * [Зависимости](#Зависимости) - * [Unity-модуль](#Unity-модуль) - * [В виде исходников](#В-виде-иходников) -* [Интеграция](#Интеграция) -* [Инъекция зависимостей](#Инъекция-зависимостей) -* [Auto Builder субъектов](#Auto-Builder-субъектов) -* [Пример кода](#Пример-кода) -* [Не null инъекции](#Не-null-инъекции) -# Установка -### Зависимости -Убедитесь что в проекте установлен фреймворк [DragonECS](https://github.com/DCFApixels/DragonECS). -* ### Unity-модуль -Поддерживается установка в виде Unity-модуля в при помощи добавления git-URL [в PackageManager](https://docs.unity3d.com/2023.2/Documentation/Manual/upm-ui-giturl.html) или ручного добавления в `Packages/manifest.json`: -``` -https://github.com/DCFApixels/DragonECS-AutoInjections.git -``` -* ### В виде исходников -Фреймворк так же может быть добавлен в проект в виде исходников. +| Languages: | [Русский](https://github.com/DCFApixels/DragonECS-AutoInjections/blob/main/README-RU.md) | [English(WIP)](https://github.com/DCFApixels/DragonECS-AutoInjections) | +| :--- | :--- | :--- | -# Интеграция -Добавьте вызов метода `AutoInject()` для Builder-а пайплайна. Пример: -```csharp -_pipeline = EcsPipeline.New() - .Inject(world) - .Inject(_timeService) - .Add(new TestSystem()) - .Add(new VelocitySystem()) - .Add(new ViewSystem()) - .AutoInject() - .BuildAndInit(); -``` - -# Инъекция зависимостей -Атрибут `[EcsInject]` убирает необходимость использования интерфейса `IEcsInject`, поля помеченные таким атрибутом автоматически подхватят зависимости внедренные в Pipeline. Пример: -```csharp -[EcsInject] EcsDefaultWorld _world; -``` -# Auto Builder субъектов -Так же AutoInjections упрощает построение субъектов. Для начала наследуйте субъект не от `EcsSubject`, а от `EcsSubjectDI`, а далее добавьте специальные атрибуты. +The extension is designed to reduce the amount of code by simplifying dependency injection by doing injections automatically. +> **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](https://github.com/DCFApixels/DragonECS/blob/main/README-RU.md). -Атрибуты для инициализации полей с пулами: -* `[Inc]` - кеширует пул и добавит тип компонента в включающее ограничение субъекта, аналог метода `Include`; -* `[Exc]` - кеширует пул и добавит тип компонента в исключающее ограничение субъекта, аналог метода `Exclude`; -* `[Opt]` - только кеширует пул, аналог метода `Optional`; - -Дополнительные атрибуты только для задания ограничений субъекта. Их можно применить к самому субъекту, либо к любому полю внутри. Используйте атрибуты: -* `[IncImplicit(type)]` - добавит в включающее ограничение указанный в конструкторе тип `type`, аналог метода `Include`; -* `[ExcImplicit(type)]` - добавит в исключающее ограничение указанный в конструкторе тип `type`, аналог метода `Exclude`; - -# Пример кода +# Code Example ```csharp class VelocitySystemDI : IEcsRunProcess { @@ -87,7 +41,7 @@ class VelocitySystemDI : IEcsRunProcess } ```
-Тот же код но без AutoInjections +Same code but without AutoInjections ```csharp class VelocitySystem : IEcsRunProcess, IEcsInject, IEcsInject @@ -121,13 +75,3 @@ class VelocitySystem : IEcsRunProcess, IEcsInject, IEcsInject - -# Не null инъекции - -Чтобы поле помеченное `[EcsInject]` было проинициализированно даже в случае отстувия инъекции, в конструктор атрибута можно передать тип болванку. В примере ниже поле `foo` получит экземпляр класса `Foo` из инъекции или экземпляр `FooDummy : Foo` если инъекции небыло. -``` csharp -[EcsInject(typeof(FooDummy))] Foo foo; -``` -> Для корректной работы переданный тип должен иметь конструктор без парамтров и быть либо того же типа что и поле, либо производного типа. - -Расширение так же сообщит если по завершению предварительной инъекции, остались не проинициализированные поля с `[EcsInject]`. From fdc727cff4a2c1aad72eecec1407840592869aaf Mon Sep 17 00:00:00 2001 From: Mikhail <99481254+DCFApixels@users.noreply.github.com> Date: Wed, 31 May 2023 04:21:17 +0800 Subject: [PATCH 05/11] Update README-RU.md --- README-RU.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README-RU.md b/README-RU.md index fae725a..e2021b0 100644 --- a/README-RU.md +++ b/README-RU.md @@ -9,6 +9,10 @@

# Auto Injections for [DragonECS](https://github.com/DCFApixels/DragonECS) + +| Languages: | [Русский](https://github.com/DCFApixels/DragonECS-AutoInjections/blob/main/README-RU.md) | [English(WIP)](https://github.com/DCFApixels/DragonECS-AutoInjections) | +| :--- | :--- | :--- | + Расширение призвано сократить объем кода, упростив инъекцию зависимостей, делая их автоматически. > **ВАЖНО!** Проект в стадии разработки. API может меняться. # Оглавление From 879dff700b95c32c8de816c251488d928bde2667 Mon Sep 17 00:00:00 2001 From: Mikhail <99481254+DCFApixels@users.noreply.github.com> Date: Wed, 31 May 2023 04:23:11 +0800 Subject: [PATCH 06/11] Update README.md --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index 56a7d4a..73e3137 100644 --- a/README.md +++ b/README.md @@ -17,6 +17,9 @@ The extension is designed to reduce the amount of code by simplifying dependency > **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](https://github.com/DCFApixels/DragonECS/blob/main/README-RU.md). +# Versioning +DragonECS uses this versioning semantics: [Open](https://gist.github.com/DCFApixels/c3b178a308b411f530361d1d56f1f929#versioning) + # Code Example ```csharp class VelocitySystemDI : IEcsRunProcess From 58d0d55b29d71130b2fcd98ad22e76f17ac3a08c Mon Sep 17 00:00:00 2001 From: Mikhail <99481254+DCFApixels@users.noreply.github.com> Date: Wed, 31 May 2023 04:24:47 +0800 Subject: [PATCH 07/11] Update README-RU.md --- README-RU.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README-RU.md b/README-RU.md index e2021b0..5064902 100644 --- a/README-RU.md +++ b/README-RU.md @@ -37,6 +37,9 @@ https://github.com/DCFApixels/DragonECS-AutoInjections.git * ### В виде исходников Фреймворк так же может быть добавлен в проект в виде исходников. +### Версионирование +В DragonECS применяется следующая семантика версионирования: [Открыть](https://gist.github.com/DCFApixels/e53281d4628b19fe5278f3e77a7da9e8#%D0%B2%D0%B5%D1%80%D1%81%D0%B8%D0%BE%D0%BD%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5) + # Интеграция Добавьте вызов метода `AutoInject()` для Builder-а пайплайна. Пример: ```csharp From 2049c59beb14418d83343bf664c0a7a29657a055 Mon Sep 17 00:00:00 2001 From: Mikhail <99481254+DCFApixels@users.noreply.github.com> Date: Wed, 31 May 2023 04:46:51 +0800 Subject: [PATCH 08/11] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 73e3137..f22bbd8 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@

- +

From 6404ba480b285720ffbda995c9ae38b8520f6214 Mon Sep 17 00:00:00 2001 From: Mikhail <99481254+DCFApixels@users.noreply.github.com> Date: Wed, 31 May 2023 04:47:15 +0800 Subject: [PATCH 09/11] Update README-RU.md --- README-RU.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README-RU.md b/README-RU.md index 5064902..7dab106 100644 --- a/README-RU.md +++ b/README-RU.md @@ -1,5 +1,5 @@

- +

From 85189c422d2343cc93439310d3b99691408a72ca Mon Sep 17 00:00:00 2001 From: Mikhail <99481254+DCFApixels@users.noreply.github.com> Date: Wed, 31 May 2023 04:50:35 +0800 Subject: [PATCH 10/11] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index f22bbd8..1492b4a 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@

Version - GitHub +License

From e8b466cc9bfc9cc4203f774c53b14135ad467f25 Mon Sep 17 00:00:00 2001 From: Mikhail <99481254+DCFApixels@users.noreply.github.com> Date: Wed, 31 May 2023 04:50:49 +0800 Subject: [PATCH 11/11] Update README-RU.md --- README-RU.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README-RU.md b/README-RU.md index 7dab106..ff6e9cb 100644 --- a/README-RU.md +++ b/README-RU.md @@ -4,7 +4,7 @@

Version - GitHub +License