From e453ec529bfeb4e21867aa7160d758bf604ccbab Mon Sep 17 00:00:00 2001 From: Mikhail <99481254+DCFApixels@users.noreply.github.com> Date: Sun, 16 Jun 2024 01:08:25 +0800 Subject: [PATCH 1/6] Update README.md --- README.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 275ba6b..a38dbde 100644 --- a/README.md +++ b/README.md @@ -5,8 +5,9 @@

Version License -Discord -QQ + +Discord +QQ

# DragonECS - C# Entity Component System Framework From 75e893701178cc75e1c1dc5aa0c8ab670e32027b Mon Sep 17 00:00:00 2001 From: Mikhail <99481254+DCFApixels@users.noreply.github.com> Date: Sun, 16 Jun 2024 01:22:16 +0800 Subject: [PATCH 2/6] update readme --- README-RU.md | 4 ++-- README.md | 3 ++- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/README-RU.md b/README-RU.md index 06471a8..869424c 100644 --- a/README-RU.md +++ b/README-RU.md @@ -5,8 +5,8 @@

Version License -Discord -QQ +Discord +QQ

# DragonECS - C# Entity Component System Framework diff --git a/README.md b/README.md index a38dbde..ab3bb40 100644 --- a/README.md +++ b/README.md @@ -2,10 +2,11 @@

+ +

Version License - Discord QQ

From 31e315dfb6da4e31b7a4281e6ff84fff4990eab4 Mon Sep 17 00:00:00 2001 From: Mikhail <99481254+DCFApixels@users.noreply.github.com> Date: Sun, 16 Jun 2024 12:39:04 +0800 Subject: [PATCH 3/6] Update README-RU.md --- README-RU.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/README-RU.md b/README-RU.md index 869424c..431f77a 100644 --- a/README-RU.md +++ b/README-RU.md @@ -42,6 +42,7 @@ DragonECS - это [ECS](https://en.wikipedia.org/wiki/Entity_component_system) - [Мета-Атрибуты](#мета-атрибуты) - [EcsDebug](#ecsdebug) - [Профилирование](#профилирование) +- [Define Symbols](#define-symbols) - [Расширение фреймворка](#расширение-фреймворка) - [Компоненты мира](#компоненты-мира) - [Конфиги](#конфиги) @@ -722,6 +723,17 @@ using (marker.Auto())
+# Define Symbols ++ `DISABLE_POOLS_EVENTS` - выключает реактивное поведение в пулах. ++ `ENABLE_DRAGONECS_DEBUGGER` - включает работу EcsDebug в релизном билде. ++ `ENABLE_DRAGONECS_ASSERT_CHECKS` - включает опускаемые в релизном билде проверки. ++ `REFLECTION_DISABLED` - Полностью ограничивает работу фреймворка с Reflection. ++ `DISABLE_DEBUG` - Для среды где не поддерживается ручное отключение DEBUG, например Unity. ++ `ENABLE_DUMMY_SPAN` - На случай если в среде не поддерживаются Span типы, включает его замену. ++ `DISABLE_CATH_EXCEPTIONS` - Выключает поведение по умолчанию по обработке исключений. По умолчанию фреймворк будет ловить исключения с выводом информации из исключений через EcsDebug и продолжать работу. + +
+ # Расширение фреймворка Для большей расширемости фреймворкеа есть дополнительные инструменты. From 5e61ee115453322c8d276766257734d021a8e7fd Mon Sep 17 00:00:00 2001 From: Mikhail <99481254+DCFApixels@users.noreply.github.com> Date: Sun, 16 Jun 2024 15:17:33 +0800 Subject: [PATCH 4/6] correct spelling --- README-RU.md | 52 +++++++++++++++++++++++++++------------------------- 1 file changed, 27 insertions(+), 25 deletions(-) diff --git a/README-RU.md b/README-RU.md index 431f77a..67f9637 100644 --- a/README-RU.md +++ b/README-RU.md @@ -13,11 +13,11 @@ | Languages: | [Русский](https://github.com/DCFApixels/DragonECS/blob/main/README-RU.md) | [English(WIP)](https://github.com/DCFApixels/DragonECS) | | :--- | :--- | :--- | -DragonECS - это [ECS](https://en.wikipedia.org/wiki/Entity_component_system) фреймворк нацеленный на максимальную удобность, модульность, расширяемость и производительность динамического изменения сущностей. Разработан на чистом C#, без зависимостей и генерации кода. Вднохновлен [LeoEcs](https://github.com/Leopotam/ecslite). +DragonECS - это [ECS](https://en.wikipedia.org/wiki/Entity_component_system) фреймворк нацеленный на максимальную удобность, модульность, расширяемость и производительность динамического изменения сущностей. Разработан на чистом C#, без зависимостей и генерации кода. Вдохновлен [LeoEcs](https://github.com/Leopotam/ecslite). > [!WARNING] -> Проект предрелизной версии, поэтому API может меняться. В ветке main акутальная и рабочая версия.
-> Readme еще не завершен, если есть не ястные моменты, вопросы можно задать тут [Обратная связь](#обратная-связь) +> Проект предрелизной версии, поэтому API может меняться. В ветке main актуальная и рабочая версия.
+> Readme еще не завершен, если есть не ясные моменты, вопросы можно задать тут [Обратная связь](#обратная-связь) ## Оглавление - [Установка](#установка) @@ -63,7 +63,7 @@ DragonECS - это [ECS](https://en.wikipedia.org/wiki/Entity_component_system) + Поддержка NativeAOT + Игровые движки с C#: Unity, Godot, MonoGame и т.д. -Протестированно: +Протестировано: + **Unity:** Минимальная версия 2020.1.0; ## Установка для Unity @@ -73,7 +73,7 @@ DragonECS - это [ECS](https://en.wikipedia.org/wiki/Entity_component_system) ``` https://github.com/DCFApixels/DragonECS.git ``` -* ### В виде иходников +* ### В виде исходников Фреймворк так же может быть добавлен в проект в виде исходников.
@@ -121,7 +121,7 @@ if (entity.TryGetID(out int entityID)) { } > **NOTICE:** Сущности не могут существовать без компонентов, пустые сущности будут автоматически удаляться сразу после удаления последнего компонента либо в конце тика. ## Component -**Компоненты** - это данные для сущностей. Обязаны реализовывать интерфейс `IEcsComponent` или другой указываюший вид компонента. +**Компоненты** - это данные для сущностей. Обязаны реализовывать интерфейс `IEcsComponent` или другой указывающий вид компонента. ```c# struct Health : IEcsComponent { @@ -158,7 +158,7 @@ class SomeSystem : IEcsPreInit, IEcsInit, IEcsRun, IEcsDestroy # Концепции фреймворка ## Пайплайн -Контейнер и движок систем. Отвечает за настройку поочередности вызова систем, предоставляет механизм для сообщений между системами и механизм внедрения зависимостей. Реализован в виде класса `EcsPipeline`. +Контейнер и движок систем. Отвечает за настройку очереди вызова систем, предоставляет механизм для сообщений между системами и механизм внедрения зависимостей. Реализован в виде класса `EcsPipeline`. ### Построение За построение пайплайна отвечает Builder. В Builder добавляются системы, а в конце строится пайплайн. Пример: ```c# @@ -217,6 +217,7 @@ class SomeSystem : IEcsInject, IEcsRun } } ``` + ### Модули Группы систем реализующие общую фичу можно объединять в модули, и просто добавлять модули в Pipeline. ``` c# @@ -238,6 +239,7 @@ EcsPipelone pipeline = EcsPipeline.New() //... .BuildAndInit(); ``` + ### Слои Очередь систем можно разбить на слои. Слой определяет место в очереди для вставки систем. Если необходимо чтобы какая-то система была вставлена в конце очереди, вне зависимости от места добавления, эту систему можно добавить в слой EcsConsts.END_LAYER. ``` c# @@ -252,17 +254,17 @@ EcsPipelone pipeline = EcsPipeline.New() Встроенные слои расположены в следующем порядке: * `EcsConst.PRE_BEGIN_LAYER` * `EcsConst.BEGIN_LAYER` -* `EcsConst.BASIC_LAYER` (Если при добавблении системы не указать слой, то она будет доавблена сюда) +* `EcsConst.BASIC_LAYER` (Если при добавлении системы не указать слой, то она будет добавлена сюда) * `EcsConst.END_LAYER` * `EcsConst.POST_END_LAYER` ## Процессы -Процессы - это очереди систем реализующие общий интерфейс, например `IEcsRun`. Для запуска процессов используются Runner-ы. Втроенные процессы запускаются автоматически. Есть возможность реализации пользовательских процессов. +Процессы - это очереди систем реализующие общий интерфейс, например `IEcsRun`. Для запуска процессов используются Runner-ы. Встроенные процессы запускаются автоматически. Есть возможность реализации пользовательских процессов.
Встроенные процессы -* `IEcsPreInit`, `IEcsInit`, `IEcsRun`, `IEcsDestroy` - процессы жизненого цикла `EcsPipeline`. +* `IEcsPreInit`, `IEcsInit`, `IEcsRun`, `IEcsDestroy` - процессы жизненного цикла `EcsPipeline`. * `IEcsInject` - Процессы системы [внедрения зависимостей](#Внедрение-зависимостей). * `IOnInitInjectionComplete` - Так же процесс системы [внедрения зависимостей](#Внедрение-зависимостей), но сигнализирует о завершении инициализирующей инъекции. @@ -298,13 +300,13 @@ _pipeline = EcsPipeline.New() //Запуск раннера если раннер был добавлен. _pipeline.GetRunner.Do() -//Или если раннер небыл добавлен(Вызов GetRunnerInstance так же добавит раннер в пайплайн). +//Или если раннер не был добавлен(Вызов GetRunnerInstance так же добавит раннер в пайплайн). _pipeline.GetRunnerInstance.Do() ``` > Раннеры имеют ряд требований к реализации: > * Наследоваться от `EcsRunner` можно только напрямую; > * Раннер может содержать только один интерфейс(за исключением `IEcsProcess`); -> * Наследуемый класс `EcsRunner,` далжен так же реализовавыть интерфейс `T`; +> * Наследуемый класс `EcsRunner,` должен так же реализовать интерфейс `T`; > Не рекомендуется в цикле вызывать `GetRunner`, иначе кешируйте полученный раннер.
@@ -380,7 +382,7 @@ class Aspect : EcsAspect public EcsTagPool freezedTags = Exc; // При запросах будет проверяться наличие компонентов - // из включающего ограничения маски и отсутсвие из исключющего. + // из включающего ограничения маски и отсутствие из исключающего. // Так же есть Opt - только кеширует пул, не влияя на маску. } ``` @@ -540,7 +542,7 @@ EcsGroup newGroup = EcsGroup.Inverse(groupA); ``` ## Корень ECS -Это пользовательский класс который явялестя точкой входа для ECS. Основное назначение инициализация, запуск систем на каждый Update движка и очистка по окончанию сипользования. +Это пользовательский класс который является точкой входа для ECS. Основное назначение инициализация, запуск систем на каждый Update движка и очистка по окончанию использования. ### Пример для Unity ``` c# using DCFApixels.DragonECS; @@ -551,7 +553,7 @@ public class EcsRoot : MonoBehaviour private EcsDefaultWorld _world; private void Start() { - //Создание мира для сущностей икомпонентов + //Создание мира для сущностей и компонентов _world = new EcsDefaultWorld(); //Создание пайплайна длясистем _pipeline = EcsPipeline.New() @@ -567,7 +569,7 @@ public class EcsRoot : MonoBehaviour // Завершение построения пайплайна. .Build(); - //Иницивлизация пайплайна и запуск IEcsPreInit.PreInit + //Инициализация пайплайна и запуск IEcsPreInit.PreInit //и IEcsInit.Init у всех добавленных систем _pipeline.Init(); } @@ -597,7 +599,7 @@ public class EcsRoot // Инициализация окружения. public void Init() { - //Создание мира для сущностей икомпонентов. + //Создание мира для сущностей и компонентов. _world = new EcsDefaultWorld(); //Создание пайплайна для систем. _pipeline = EcsPipeline.New() @@ -613,7 +615,7 @@ public class EcsRoot // Завершение построения пайплайна. .Build(); - // Иницивлизация пайплайна и запуск IEcsPreInit.PreInit + // Инициализация пайплайна и запуск IEcsPreInit.PreInit // и IEcsInit.Init у всех добавленных систем. _pipeline.Init(); } @@ -735,7 +737,7 @@ using (marker.Auto())
# Расширение фреймворка -Для большей расширемости фреймворкеа есть дополнительные инструменты. +Для большей расширяемости фреймворка есть дополнительные инструменты. ## Конфиги Конструкторы классов `EcsWorld` и `EcsPipeline` могут принимать контейнеры конфигов реализующие интерфейс `IConfigContainer` или `IConfigContainerWriter`. С помощью этих контейнеров можно передавать данные и зависимости. Встроенная реализация контейнера - `ConfigContainer`, но можно так же использовать свою реализацию.
@@ -838,7 +840,7 @@ public struct WorldComponent : IEcsWorldComponent # Расширения * [Интеграция с движком Unity](https://github.com/DCFApixels/DragonECS-Unity) * [Автоматическое внедрение зависимостей](https://github.com/DCFApixels/DragonECS-AutoInjections) -* [Классическоя C# многопоточность](https://github.com/DCFApixels/DragonECS-ClassicThreads) +* [Классическая C# многопоточность](https://github.com/DCFApixels/DragonECS-ClassicThreads) * [Hybrid](https://github.com/DCFApixels/DragonECS-Hybrid) * [One-Frame Components](https://gist.github.com/DCFApixels/46d512dbcf96c115b94c3af502461f60) * Графы (Work in progress) @@ -848,17 +850,17 @@ public struct WorldComponent : IEcsWorldComponent # FAQ ## 'ReadOnlySpan<>' could not be found -В версии юнити 2020.1.х в консоли может выпадать ошибка: +В версии Unity 2020.1.х в консоли может выпадать ошибка: ``` The type or namespace name 'ReadOnlySpan<>' could not be found (are you missing a using directive or an assembly reference?) ``` -Чтобы починить добавте директиву `ENABLE_DUMMY_SPAN` в `Project Settings/Player/Other Settings/Scripting Define Symbols`. +Чтобы починить добавьте директиву `ENABLE_DUMMY_SPAN` в `Project Settings/Player/Other Settings/Scripting Define Symbols`. ## Как Выключать/Включать системы? -Напряму - никак.
+Напрямую - никак.
Обычно потребность выключить/включить систему появляется когда поменялось общее состояние игры, это может так же значить что нужно переключить сразу группу систем, все это в совокупности можно рассматривать как измннеия процессов. Есть 2 решения:
-+ Если измненеия процесса глобальные, то создать новый `EcsPipeline` и в цикле обновления движка запускать соотвествующий пайплайн. -+ Разделить `IEcsRun` на несколько процессов и в цикле обновления движка запускать соотвествующий процесс. Для этого создайте новый интерфейс процесса, раннер для запуска этого интерфейса и получайте раннер через `EcsPipeline.GetRunner()`. ++ Если изменения процесса глобальные, то создать новый `EcsPipeline` и в цикле обновления движка запускать соответствующий пайплайн. ++ Разделить `IEcsRun` на несколько процессов и в цикле обновления движка запускать соответствующий процесс. Для этого создайте новый интерфейс процесса, раннер для запуска этого интерфейса и получайте раннер через `EcsPipeline.GetRunner()`. ## Перечень рекомендаций [DragonECS-Vault](https://github.com/DCFApixels/DragonECS-Vault)
From 464fa4952a6c18925dbbf22ce710c9373a8582ab Mon Sep 17 00:00:00 2001 From: Mikhail <99481254+DCFApixels@users.noreply.github.com> Date: Sun, 16 Jun 2024 16:06:00 +0800 Subject: [PATCH 5/6] Update README-RU.md --- README-RU.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README-RU.md b/README-RU.md index 67f9637..7bbcbf3 100644 --- a/README-RU.md +++ b/README-RU.md @@ -843,6 +843,7 @@ public struct WorldComponent : IEcsWorldComponent * [Классическая C# многопоточность](https://github.com/DCFApixels/DragonECS-ClassicThreads) * [Hybrid](https://github.com/DCFApixels/DragonECS-Hybrid) * [One-Frame Components](https://gist.github.com/DCFApixels/46d512dbcf96c115b94c3af502461f60) +* [Шаблоны кода IDE](https://gist.github.com/ctzcs/0ba948b0e53aa41fe1c87796a401660b) и [для Unity](https://gist.github.com/ctzcs/d4c7730cf6cd984fe6f9e0e3f108a0f1) * Графы (Work in progress) From a9e3580f375a9729662682061e85cb7a873cd6f8 Mon Sep 17 00:00:00 2001 From: Mikhail <99481254+DCFApixels@users.noreply.github.com> Date: Sun, 16 Jun 2024 16:15:12 +0800 Subject: [PATCH 6/6] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index ab3bb40..2ed496c 100644 --- a/README.md +++ b/README.md @@ -59,6 +59,7 @@ The framework can also be added to the project as source code. * [Classic C# multithreading](https://github.com/DCFApixels/DragonECS-ClassicThreads) * [Hybrid](https://github.com/DCFApixels/DragonECS-Hybrid) * [One-Frame Components](https://gist.github.com/DCFApixels/46d512dbcf96c115b94c3af502461f60) +* [Code Templates for IDE](https://gist.github.com/ctzcs/0ba948b0e53aa41fe1c87796a401660b) and [for Unity](https://gist.github.com/ctzcs/d4c7730cf6cd984fe6f9e0e3f108a0f1) * Graphs (Work in progress) # Feedback