diff --git a/README-RU.md b/README-RU.md
index 06471a8..7bbcbf3 100644
--- a/README-RU.md
+++ b/README-RU.md
@@ -5,19 +5,19 @@
-
-
+
+
# DragonECS - C# Entity Component System Framework
| 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 еще не завершен, если есть не ясные моменты, вопросы можно задать тут [Обратная связь](#обратная-связь)
## Оглавление
- [Установка](#установка)
@@ -42,6 +42,7 @@ DragonECS - это [ECS](https://en.wikipedia.org/wiki/Entity_component_system)
- [Мета-Атрибуты](#мета-атрибуты)
- [EcsDebug](#ecsdebug)
- [Профилирование](#профилирование)
+- [Define Symbols](#define-symbols)
- [Расширение фреймворка](#расширение-фреймворка)
- [Компоненты мира](#компоненты-мира)
- [Конфиги](#конфиги)
@@ -62,7 +63,7 @@ DragonECS - это [ECS](https://en.wikipedia.org/wiki/Entity_component_system)
+ Поддержка NativeAOT
+ Игровые движки с C#: Unity, Godot, MonoGame и т.д.
-Протестированно:
+Протестировано:
+ **Unity:** Минимальная версия 2020.1.0;
## Установка для Unity
@@ -72,7 +73,7 @@ DragonECS - это [ECS](https://en.wikipedia.org/wiki/Entity_component_system)
```
https://github.com/DCFApixels/DragonECS.git
```
-* ### В виде иходников
+* ### В виде исходников
Фреймворк так же может быть добавлен в проект в виде исходников.
@@ -120,7 +121,7 @@ if (entity.TryGetID(out int entityID)) { }
> **NOTICE:** Сущности не могут существовать без компонентов, пустые сущности будут автоматически удаляться сразу после удаления последнего компонента либо в конце тика.
## Component
-**Компоненты** - это данные для сущностей. Обязаны реализовывать интерфейс `IEcsComponent` или другой указываюший вид компонента.
+**Компоненты** - это данные для сущностей. Обязаны реализовывать интерфейс `IEcsComponent` или другой указывающий вид компонента.
```c#
struct Health : IEcsComponent
{
@@ -157,7 +158,7 @@ class SomeSystem : IEcsPreInit, IEcsInit, IEcsRun, IEcsDestroy
# Концепции фреймворка
## Пайплайн
-Контейнер и движок систем. Отвечает за настройку поочередности вызова систем, предоставляет механизм для сообщений между системами и механизм внедрения зависимостей. Реализован в виде класса `EcsPipeline`.
+Контейнер и движок систем. Отвечает за настройку очереди вызова систем, предоставляет механизм для сообщений между системами и механизм внедрения зависимостей. Реализован в виде класса `EcsPipeline`.
### Построение
За построение пайплайна отвечает Builder. В Builder добавляются системы, а в конце строится пайплайн. Пример:
```c#
@@ -216,6 +217,7 @@ class SomeSystem : IEcsInject, IEcsRun
}
}
```
+
### Модули
Группы систем реализующие общую фичу можно объединять в модули, и просто добавлять модули в Pipeline.
``` c#
@@ -237,6 +239,7 @@ EcsPipelone pipeline = EcsPipeline.New()
//...
.BuildAndInit();
```
+
### Слои
Очередь систем можно разбить на слои. Слой определяет место в очереди для вставки систем. Если необходимо чтобы какая-то система была вставлена в конце очереди, вне зависимости от места добавления, эту систему можно добавить в слой EcsConsts.END_LAYER.
``` c#
@@ -251,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` - Так же процесс системы [внедрения зависимостей](#Внедрение-зависимостей), но сигнализирует о завершении инициализирующей инъекции.
@@ -297,13 +300,13 @@ _pipeline = EcsPipeline.New()
//Запуск раннера если раннер был добавлен.
_pipeline.GetRunner.Do()
-//Или если раннер небыл добавлен(Вызов GetRunnerInstance так же добавит раннер в пайплайн).
+//Или если раннер не был добавлен(Вызов GetRunnerInstance так же добавит раннер в пайплайн).
_pipeline.GetRunnerInstance.Do()
```
> Раннеры имеют ряд требований к реализации:
> * Наследоваться от `EcsRunner` можно только напрямую;
> * Раннер может содержать только один интерфейс(за исключением `IEcsProcess`);
-> * Наследуемый класс `EcsRunner,` далжен так же реализовавыть интерфейс `T`;
+> * Наследуемый класс `EcsRunner,` должен так же реализовать интерфейс `T`;
> Не рекомендуется в цикле вызывать `GetRunner`, иначе кешируйте полученный раннер.
@@ -379,7 +382,7 @@ class Aspect : EcsAspect
public EcsTagPool freezedTags = Exc;
// При запросах будет проверяться наличие компонентов
- // из включающего ограничения маски и отсутсвие из исключющего.
+ // из включающего ограничения маски и отсутствие из исключающего.
// Так же есть Opt - только кеширует пул, не влияя на маску.
}
```
@@ -539,7 +542,7 @@ EcsGroup newGroup = EcsGroup.Inverse(groupA);
```
## Корень ECS
-Это пользовательский класс который явялестя точкой входа для ECS. Основное назначение инициализация, запуск систем на каждый Update движка и очистка по окончанию сипользования.
+Это пользовательский класс который является точкой входа для ECS. Основное назначение инициализация, запуск систем на каждый Update движка и очистка по окончанию использования.
### Пример для Unity
``` c#
using DCFApixels.DragonECS;
@@ -550,7 +553,7 @@ public class EcsRoot : MonoBehaviour
private EcsDefaultWorld _world;
private void Start()
{
- //Создание мира для сущностей икомпонентов
+ //Создание мира для сущностей и компонентов
_world = new EcsDefaultWorld();
//Создание пайплайна длясистем
_pipeline = EcsPipeline.New()
@@ -566,7 +569,7 @@ public class EcsRoot : MonoBehaviour
// Завершение построения пайплайна.
.Build();
- //Иницивлизация пайплайна и запуск IEcsPreInit.PreInit
+ //Инициализация пайплайна и запуск IEcsPreInit.PreInit
//и IEcsInit.Init у всех добавленных систем
_pipeline.Init();
}
@@ -596,7 +599,7 @@ public class EcsRoot
// Инициализация окружения.
public void Init()
{
- //Создание мира для сущностей икомпонентов.
+ //Создание мира для сущностей и компонентов.
_world = new EcsDefaultWorld();
//Создание пайплайна для систем.
_pipeline = EcsPipeline.New()
@@ -612,7 +615,7 @@ public class EcsRoot
// Завершение построения пайплайна.
.Build();
- // Иницивлизация пайплайна и запуск IEcsPreInit.PreInit
+ // Инициализация пайплайна и запуск IEcsPreInit.PreInit
// и IEcsInit.Init у всех добавленных систем.
_pipeline.Init();
}
@@ -722,8 +725,19 @@ 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 и продолжать работу.
+
+
+
# Расширение фреймворка
-Для большей расширемости фреймворкеа есть дополнительные инструменты.
+Для большей расширяемости фреймворка есть дополнительные инструменты.
## Конфиги
Конструкторы классов `EcsWorld` и `EcsPipeline` могут принимать контейнеры конфигов реализующие интерфейс `IConfigContainer` или `IConfigContainerWriter`. С помощью этих контейнеров можно передавать данные и зависимости. Встроенная реализация контейнера - `ConfigContainer`, но можно так же использовать свою реализацию.
@@ -826,9 +840,10 @@ 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)
+* [Шаблоны кода IDE](https://gist.github.com/ctzcs/0ba948b0e53aa41fe1c87796a401660b) и [для Unity](https://gist.github.com/ctzcs/d4c7730cf6cd984fe6f9e0e3f108a0f1)
* Графы (Work in progress)
@@ -836,17 +851,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)
diff --git a/README.md b/README.md
index 275ba6b..2ed496c 100644
--- a/README.md
+++ b/README.md
@@ -2,11 +2,13 @@
+
+
-
-
+
+
# DragonECS - C# Entity Component System Framework
@@ -57,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