mirror of
https://github.com/DCFApixels/DragonECS.git
synced 2025-09-18 18:14:37 +08:00
update Readme
This commit is contained in:
parent
e3c7aa8aac
commit
aacbda55d2
76
README-RU.md
76
README-RU.md
@ -14,11 +14,17 @@
|
|||||||
| :--- | :--- | :--- |
|
| :--- | :--- | :--- |
|
||||||
|
|
||||||
Данный [ECS](https://en.wikipedia.org/wiki/Entity_component_system) Фреймворк нацелен на максимальную удобность, модульность, расширяемость и производительность динамического изменения сущностей. Без генерации кода и зависимостей. Вднохновлен [LeoEcs](https://github.com/Leopotam/ecslite).
|
Данный [ECS](https://en.wikipedia.org/wiki/Entity_component_system) Фреймворк нацелен на максимальную удобность, модульность, расширяемость и производительность динамического изменения сущностей. Без генерации кода и зависимостей. Вднохновлен [LeoEcs](https://github.com/Leopotam/ecslite).
|
||||||
|
|
||||||
|
> [!IMPORTANT]
|
||||||
|
> И с Новым Годом
|
||||||
|
|
||||||
> [!WARNING]
|
> [!WARNING]
|
||||||
> Проект в стадии разработки. API может меняться.
|
> Проект в стадии разработки. API может меняться.
|
||||||
> Readme еще не завершен
|
> Readme еще не завершен
|
||||||
|
|
||||||
## Оглавление
|
## Оглавление
|
||||||
|
- [DragonECS - C# Entity Component System Framework](#dragonecs---c-entity-component-system-framework)
|
||||||
|
- [Оглавление](#оглавление)
|
||||||
- [Установка](#установка)
|
- [Установка](#установка)
|
||||||
- [Версионирование](#версионирование)
|
- [Версионирование](#версионирование)
|
||||||
- [Основные концепции](#основные-концепции)
|
- [Основные концепции](#основные-концепции)
|
||||||
@ -48,6 +54,7 @@
|
|||||||
- [Профилирование](#профилирование)
|
- [Профилирование](#профилирование)
|
||||||
- [Расширения](#расширения)
|
- [Расширения](#расширения)
|
||||||
- [FAQ](#faq)
|
- [FAQ](#faq)
|
||||||
|
- ['ReadOnlySpan\<\>' could not be found](#readonlyspan-could-not-be-found)
|
||||||
- [Обратная связь](#обратная-связь)
|
- [Обратная связь](#обратная-связь)
|
||||||
|
|
||||||
</br>
|
</br>
|
||||||
@ -73,7 +80,7 @@ https://github.com/DCFApixels/DragonECS.git
|
|||||||
* `entlong` - долговременный идентификатор, содержит в себе полный набор информации для однозначной идентификации;
|
* `entlong` - долговременный идентификатор, содержит в себе полный набор информации для однозначной идентификации;
|
||||||
``` csharp
|
``` csharp
|
||||||
// Создание новой сущности в мире.
|
// Создание новой сущности в мире.
|
||||||
int entityID = _world.NewEmptyEntity();
|
int entityID = _world.NewEntity();
|
||||||
|
|
||||||
// Удаление сущности.
|
// Удаление сущности.
|
||||||
_world.DelEntity(entityID);
|
_world.DelEntity(entityID);
|
||||||
@ -128,16 +135,16 @@ struct PlayerTag : IEcsTagComponent {}
|
|||||||
class SomeSystem : IEcsPreInitProcess, IEcsInitProcess, IEcsRunProcess, IEcsDestroyProcess
|
class SomeSystem : IEcsPreInitProcess, IEcsInitProcess, IEcsRunProcess, IEcsDestroyProcess
|
||||||
{
|
{
|
||||||
// Будет вызван один раз в момент работы EcsPipeline.Init() и до срабатывания IEcsInitProcess.Init()
|
// Будет вызван один раз в момент работы EcsPipeline.Init() и до срабатывания IEcsInitProcess.Init()
|
||||||
public void PreInit (EcsPipeline pipeline) { }
|
public void PreInit () { }
|
||||||
|
|
||||||
// Будет вызван один раз в момент работы EcsPipeline.Init() и после срабатывания IEcsPreInitProcess.PreInit()
|
// Будет вызван один раз в момент работы EcsPipeline.Init() и после срабатывания IEcsPreInitProcess.PreInit()
|
||||||
public void Init (EcsPipeline pipeline) { }
|
public void Init () { }
|
||||||
|
|
||||||
// Будет вызван один раз в момент работы EcsPipeline.Run().
|
// Будет вызван один раз в момент работы EcsPipeline.Run().
|
||||||
public void Run (EcsPipeline pipeline) { }
|
public void Run () { }
|
||||||
|
|
||||||
// Будет вызван один раз в момент работы EcsPipeline.Destroy()
|
// Будет вызван один раз в момент работы EcsPipeline.Destroy()
|
||||||
public void Destroy (EcsPipeline pipeline) { }
|
public void Destroy () { }
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
> Для реализации дополнительных процессов перейдите к разделу [Процессы](#Процессы).
|
> Для реализации дополнительных процессов перейдите к разделу [Процессы](#Процессы).
|
||||||
@ -164,12 +171,45 @@ pipeline.Init(); // Инициализация пайплайна
|
|||||||
> Для одновременного построения и инициализации есть метод Builder.BuildAndInit();
|
> Для одновременного построения и инициализации есть метод Builder.BuildAndInit();
|
||||||
### Внедрение зависимостей
|
### Внедрение зависимостей
|
||||||
Внедрение зависимостей - это процесс который запускается вместе с инициализацией пайплайна и внедряет данные переданные в Builder.
|
Внедрение зависимостей - это процесс который запускается вместе с инициализацией пайплайна и внедряет данные переданные в Builder.
|
||||||
|
|
||||||
|
> [!WARNING]
|
||||||
|
> Внедрение идет параллельно с PreInit, поэтому в PreInit инъекция - не гарантируется.
|
||||||
|
> [!WARNING]
|
||||||
|
> Экземпляр EcsPipeline автоматически внедряется до еще до PreInit.
|
||||||
``` c#
|
``` c#
|
||||||
|
SomeData _someData;
|
||||||
|
//...
|
||||||
EcsPipelone pipeline = EcsPipeline.New()
|
EcsPipelone pipeline = EcsPipeline.New()
|
||||||
//...
|
//...
|
||||||
.Inject(_someData) // Внедрит в системы экземпляр _someData
|
.Inject(_someData) // Внедрит в системы экземпляр _someData
|
||||||
//...
|
//...
|
||||||
.BuildAndInit();
|
.BuildAndInit();
|
||||||
|
|
||||||
|
//...
|
||||||
|
|
||||||
|
class SomeSystem : IInject<SomeData>, IEcsRunProcess
|
||||||
|
{
|
||||||
|
// Для внедрения используется интерфейс IInject<T> и его метод Inject(T obj)
|
||||||
|
SomeData _someData
|
||||||
|
public void Inject(SomeData obj) => _someData = obj;
|
||||||
|
|
||||||
|
public void PreInit ()
|
||||||
|
{
|
||||||
|
// тут возможно еще не внедрен _someData
|
||||||
|
}
|
||||||
|
public void Init ()
|
||||||
|
{
|
||||||
|
// тут можно пользовать _someData
|
||||||
|
}
|
||||||
|
public void Run ()
|
||||||
|
{
|
||||||
|
// тут можно пользовать _someData
|
||||||
|
}
|
||||||
|
public void Destroy ()
|
||||||
|
{
|
||||||
|
// тут можно пользовать _someData
|
||||||
|
}
|
||||||
|
}
|
||||||
```
|
```
|
||||||
### Модули
|
### Модули
|
||||||
Группы систем реализующие общую фичу можно объединять в модули, и просто добавлять модули в Pipeline.
|
Группы систем реализующие общую фичу можно объединять в модули, и просто добавлять модули в Pipeline.
|
||||||
@ -226,8 +266,9 @@ EcsPipelone pipeline = EcsPipeline.New()
|
|||||||
<details>
|
<details>
|
||||||
<summary>Пользовательские процессы</summary>
|
<summary>Пользовательские процессы</summary>
|
||||||
|
|
||||||
Для добавления нового процесса создайте интерфейс наследованный от `IEcsProcess` и создайте раннер для него. Раннер это класс реализующий интерфейс запускаемого процесса и наследуемый от EcsRunner<TInterface>. Пример:
|
Для добавления нового процесса создайте интерфейс наследованный от `IEcsProcess` и создайте раннер для него. Раннер это класс реализующий интерфейс запускаемого процесса и наследуемый от EcsRunner<TInterface>. А после к интерфейсу добавте атрибут `BindWithEcsRunner` для связи. Пример:
|
||||||
```c#
|
```c#
|
||||||
|
[BindWithEcsRunner(typeof(DoSomethingProcessRunner))]
|
||||||
interface IDoSomethingProcess : IEcsProcess
|
interface IDoSomethingProcess : IEcsProcess
|
||||||
{
|
{
|
||||||
void Do();
|
void Do();
|
||||||
@ -437,14 +478,7 @@ for (int i = 0; i < group.Count; i++)
|
|||||||
//...
|
//...
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
Так как группы это множества, они содержат операции над множествами. Каждый метод имеет 2 варианта, с записью результата в groupA, либо с возвращением новой группы:
|
Так как группы это множества, они содержат методы аналогичные `ISet<T>`. Редактирующие методы имеет 2 варианта, с записью результата в groupA, либо с возвращением новой группы:
|
||||||
|
|
||||||
<details>
|
|
||||||
<summary> Визуализация методов</summary>
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
</details>
|
|
||||||
|
|
||||||
``` c#
|
``` c#
|
||||||
// Объединение groupA и groupB
|
// Объединение groupA и groupB
|
||||||
@ -654,24 +688,24 @@ bool isCamera = _world.GetPool<Camera>().Has(entity);
|
|||||||
# Debug
|
# Debug
|
||||||
Фреймворк предоставляет дополнительные инструменты для отладки и логирования, не зависящие от среды. Так же многие типы имеют свой DebuggerProxy для более информативного отображения в IDE.
|
Фреймворк предоставляет дополнительные инструменты для отладки и логирования, не зависящие от среды. Так же многие типы имеют свой DebuggerProxy для более информативного отображения в IDE.
|
||||||
## Атрибуты
|
## Атрибуты
|
||||||
В чистом виде дебаг-атрибуты не имеют применения, но могут быть использованы для генерации автоматической документации и используются в интеграциях с движками для задания отображения в отладочных инструментах и редакторах.
|
В чистом виде мета-атрибуты не имеют применения, но могут быть использованы для генерации автоматической документации и используются в интеграциях с движками для задания отображения в отладочных инструментах и редакторах.
|
||||||
``` c#
|
``` c#
|
||||||
using DCFApixels.DragonECS;
|
using DCFApixels.DragonECS;
|
||||||
|
|
||||||
// Задает пользовательское название типа, по умолчанию используется имя типа.
|
// Задает пользовательское название типа, по умолчанию используется имя типа.
|
||||||
[DebugName("SomeComponent")]
|
[MetaName("SomeComponent")]
|
||||||
|
|
||||||
// Используется для группировки типов.
|
// Используется для группировки типов.
|
||||||
[DebugGroup("Abilities/Passive/")]
|
[MetaGroup("Abilities/Passive/")]
|
||||||
|
|
||||||
// Задает цвет типа в системе rgb, где каждый канал принимает значение от 0 до 255, по умолчанию белый.
|
// Задает цвет типа в системе rgb, где каждый канал принимает значение от 0 до 255, по умолчанию белый.
|
||||||
[DebugColor(DebugColor.Red)] // или [DebugColor(255, 0, 0)]
|
[MetaColor(MetaColor.Red)] // или [DebugColor(255, 0, 0)]
|
||||||
|
|
||||||
// Добавляет описание типу.
|
// Добавляет описание типу.
|
||||||
[DebugDescription("The quick brown fox jumps over the lazy dog")]
|
[MetaDescription("The quick brown fox jumps over the lazy dog")]
|
||||||
|
|
||||||
// Скрывает тип.
|
// Добавляет строковые теги.
|
||||||
[DebugHide]
|
[MetaTags(...)] // [MetaTags(MetaTags.HIDDEN))] чтобы скрыть в редакторе
|
||||||
public struct Component { }
|
public struct Component { }
|
||||||
```
|
```
|
||||||
## EcsDebug
|
## EcsDebug
|
||||||
|
@ -12,7 +12,11 @@
|
|||||||
| Languages: | [Русский](https://github.com/DCFApixels/DragonECS/blob/main/README-RU.md) | [English(WIP)](https://github.com/DCFApixels/DragonECS) |
|
| Languages: | [Русский](https://github.com/DCFApixels/DragonECS/blob/main/README-RU.md) | [English(WIP)](https://github.com/DCFApixels/DragonECS) |
|
||||||
| :--- | :--- | :--- |
|
| :--- | :--- | :--- |
|
||||||
|
|
||||||
The [ECS](https://en.wikipedia.org/wiki/Entity_component_system) Framework aims to maximize usability, modularity, extensibility and performance of dynamic entity changes. Without code generation and dependencies. Inspired by [LeoEcs](https://github.com/Leopotam/ecslite).
|
The [ECS](https://en.wikipedia.org/wiki/Entity_component_system) Framework aims to maximize usability, modularity, extensibility and performance of dynamic entity changes. Without code generation and dependencies. Inspired by [LeoEcs](https://github.com/Leopotam/ecslite).
|
||||||
|
|
||||||
|
> [!IMPORTANT]
|
||||||
|
> And a Happy New Year.
|
||||||
|
|
||||||
> [!WARNING]
|
> [!WARNING]
|
||||||
> The project is a work in progress, API may change.
|
> The project is a work in progress, API may change.
|
||||||
>
|
>
|
||||||
|
Loading…
Reference in New Issue
Block a user