Update README-RU.md

This commit is contained in:
Mikhail 2024-04-25 19:32:44 +08:00 committed by GitHub
parent eaa4c4fb05
commit 6ad24120e8
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -36,7 +36,7 @@ DragonECS - это [ECS](https://en.wikipedia.org/wiki/Entity_component_system)
- [Пул](#пул) - [Пул](#пул)
- [Аспект](#аспект) - [Аспект](#аспект)
- [Запросы](#запросы) - [Запросы](#запросы)
- [Группа](#группа) - [Коллекции](#Коллекции)
- [Корень ECS](#корень-ecs) - [Корень ECS](#корень-ecs)
- [Debug](#debug) - [Debug](#debug)
- [Мета-Атрибуты](#мета-атрибуты) - [Мета-Атрибуты](#мета-атрибуты)
@ -360,7 +360,7 @@ poses.Del(entityID);
> эта функция будет описана в ближайшее время > эта функция будет описана в ближайшее время
## Аспект ## Аспект
Это пользовательские классы наследуемые от `EcsAspect` и используемые для взаимодействия с сущностями. Аспекты одновременно являются кешем пулов и маской компонентов для фильтрации сущностей. Можно рассматривать аспекты как описание того какие сущности запрашивает система. Это пользовательские классы наследуемые от `EcsAspect` и используемые для взаимодействия с сущностями. Аспекты одновременно являются кешем пулов и маской компонентов для фильтрации сущностей. Можно рассматривать аспекты как описание того с какими сущностями работает система.
Упрощенный синтаксис: Упрощенный синтаксис:
``` c# ``` c#
@ -435,22 +435,16 @@ class Aspect : EcsAspect
</details> </details>
## Запросы ## Запросы
Используйте метод-запрос `EcsWorld.Where<TAspcet>(out TAspcet aspect)` для получения необходимого системе набора сущностей. Запросы работают в связке с аспектами, аспекты определяют ограничения запросов, результатом запроса становится группа сущностей удовлетворяющая условиям аспекта. По умолчанию запрос делает выборку из всех сущностей в мире, но так же запросы можно применять и к коллекциям фреймворка(в этом плане это чемто похоже на Where из Linq). Что бы получить необходимый набор сущностей используется метод-запрос `EcsWorld.Where<TAspcet>(out TAspcet aspect)`. В качестве `TAspcet` указывается аспект, сущности будут отфильтрованны по маске указанного аспекта. Запрос `Where` применим как к `EcsWorld` так и коллекциям фреймворка (в этом плане Where чемто похож на аналогичный из Linq).
Пример: Пример:
``` c# ``` c#
public class SomeDamageSystem : IEcsRun, IEcsInject<EcsDefaultWorld> public class SomeDamageSystem : IEcsRun, IEcsInject<EcsDefaultWorld>
{ {
class Aspect : EcsAspect class Aspect : EcsAspect
{ {
public EcsPool<Health> healths; public EcsPool<Health> healths = Inc;
public EcsPool<Damage> damages; public EcsPool<DamageSignal> damageSignals = Inc;
public EcsTagPool<IsInvulnerable> isInvulnerables; public EcsTagPool<IsInvulnerable> isInvulnerables = Exc;
protected override void Init(Builder b)
{
healths = b.Include<Health>();
damages = b.Include<Damage>();
isInvulnerables = b.Include<IsInvulnerable>();
}
} }
EcsDefaultWorld _world; EcsDefaultWorld _world;
public void Inject(EcsDefaultWorld world) => _world = world; public void Inject(EcsDefaultWorld world) => _world = world;
@ -466,8 +460,14 @@ public class SomeDamageSystem : IEcsRun, IEcsInject<EcsDefaultWorld>
} }
``` ```
## Группа ## Коллекции
Группы это структуры данных для хранения множества сущностей с O(1) операциями добавления/удаления/проверки наличия и т.д. Реализованы классом `EcsGroup` и структурой `EcsReadonlyGroup`.
### EcsSpan
Аналог `ReadOnlySpan<int>` для перечня сущностей. Запросы `Where` возвращают наборы сущностей в виде `EcsSpan`. Поддерживается только чтение и итерация.
> Хотя `EcsSpan` является просто массивом, в нем не допускается дублирование сущностей.
### EcsGroup
Вспомогательная коллекция основаная на spase set для хранения множества сущностей с O(1) операциями добавления/удаления/проверки и т.д.
``` c# ``` c#
//Получем новую группу. EcsWorld содержит в себе пул групп, //Получем новую группу. EcsWorld содержит в себе пул групп,
@ -485,7 +485,7 @@ group.Has(entityID);
group.Remove(entityID); group.Remove(entityID);
``` ```
``` c# ``` c#
//Итерируемся через foreach или for. //Итерироваться можно по foreach и for
foreach (var e in group) foreach (var e in group)
{ {
//... //...
@ -519,7 +519,8 @@ EcsGroup newGroup = EcsGroup.SymmetricExcept(groupA, groupB);
groupA.Inverse(); groupA.Inverse();
EcsGroup newGroup = EcsGroup.Inverse(groupA); EcsGroup newGroup = EcsGroup.Inverse(groupA);
``` ```
> Так же есть версия доступная только для чтения `EcsReadonlyGroup`.
## Корень ECS ## Корень ECS
Это пользовательский класс который явялестя точкой входа для ECS. Основное назначение инициализация, запуск систем на каждый Update движка и очистка по окончанию сипользования. Это пользовательский класс который явялестя точкой входа для ECS. Основное назначение инициализация, запуск систем на каждый Update движка и очистка по окончанию сипользования.
### Пример для Unity ### Пример для Unity