mirror of
https://github.com/DCFApixels/DragonECS.git
synced 2025-09-18 18:14:37 +08:00
Update README.md
This commit is contained in:
parent
ec4f8325b6
commit
113b896def
46
README.md
46
README.md
@ -9,12 +9,12 @@
|
|||||||
|
|
||||||
# Основные концепции
|
# Основные концепции
|
||||||
## Сущьность
|
## Сущьность
|
||||||
Сущьности реализованы двумя типами:
|
Сущьности - это идентификаторы, к которым крепятся данные. Есть2 вида идентификатора:
|
||||||
* `int` - явялется временным идентификатором, применяется в пределах одного тика
|
* `int` - однократный идентификатор, применяется в пределах одного тика. Не рекомендуется хранить `int` идентификаторы, в место этого используйте `entlong`;
|
||||||
* `EcsEntity` - долговременный идентификатор сущьности, хранит в себе полный набор информации для однозначной идентификации
|
* `entlong` - долговременный идентификатор, содержит в себе полный набор информации для однозначной идентификации;
|
||||||
|
|
||||||
## Компонент
|
## Компонент
|
||||||
Компоненты - это даные для сущьностей. Могут быть тольно struct и обязаны наследовать один из интерфейсов который определяют тип компонента. самый базовый IEcsComponent.
|
Компоненты - это даные для сущностей. Могут быть тольно struct и обязаны реализовывать интерфейс IEcsComponent или другой указываюший разновидность кмпонента.
|
||||||
```c#
|
```c#
|
||||||
struct Health : IEcsComponent
|
struct Health : IEcsComponent
|
||||||
{
|
{
|
||||||
@ -23,21 +23,21 @@ struct Health : IEcsComponent
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
## Система
|
## Система
|
||||||
Системы - это основная логика, тут задается поведение сущьностей. Существуют в виде пользовательских классов, реализующих как минимум один из IEcsInitSystem, IEcsDestroySystem, IEcsRunSystem интерфейсов.
|
Системы - это основная логика, тут задается поведение сущьностей. Существуют в виде пользовательских классов, реализующих как минимум один из IEcsInitProcess, IEcsDestroyProcess, IEcsRunProcess интерфейсов.
|
||||||
```c#
|
```c#
|
||||||
class UserSystem : IEcsPreInitSystem, IEcsInitSystem, IEcsRunSystem, IEcsDestroySystem
|
class UserSystem : IEcsPreInitProcess, IEcsInitProcess, IEcsRunProcess, IEcsDestroyProcess
|
||||||
{
|
{
|
||||||
public void PreInit (EcsSession session) {
|
public void PreInit (EcsSession session) {
|
||||||
// Будет вызван один раз в момент работы EcsSession.Init() и до срабатывания IEcsInitSystem.Init()
|
// Будет вызван один раз в момент работы EcsSession.Init() и до срабатывания IEcsInitProcess.Init()
|
||||||
}
|
}
|
||||||
public void Init (EcsSession session) {
|
public void Init (EcsSession session) {
|
||||||
// Будет вызван один раз в момент работы EcsSession.Init() и после срабатывания IEcsPreInitSystem.PreInit()
|
// Будет вызван один раз в момент работы EcsSession.Init() и после срабатывания IEcsPreInitProcess.PreInit()
|
||||||
}
|
}
|
||||||
public void Run (EcsSession session) {
|
public void Run (EcsSession session) {
|
||||||
// Будет вызван один раз в момент работы EcsSession.Run().
|
// Будет вызван один раз в момент работы EcsSession.Run().
|
||||||
}
|
}
|
||||||
public void Destroy (EcsSession session) {
|
public void Destroy (EcsSession session) {
|
||||||
// Будет вызван один раз в момент работы EcsSession.Destroy() и до срабатывания IEcsPostDestroySystem.PostDestroy()
|
// Будет вызван один раз в момент работы EcsSession.Destroy()
|
||||||
}
|
}
|
||||||
|
|
||||||
//Для реализации дополнительных сообщений используйте Раннеры
|
//Для реализации дополнительных сообщений используйте Раннеры
|
||||||
@ -47,23 +47,29 @@ class UserSystem : IEcsPreInitSystem, IEcsInitSystem, IEcsRunSystem, IEcsDestroy
|
|||||||
## Pipeline
|
## Pipeline
|
||||||
Является двжиком систем, определяя поочередность их вызова, предоставляющий механизм для сообщений между системами и механизм внедрения зависимостей системы.
|
Является двжиком систем, определяя поочередность их вызова, предоставляющий механизм для сообщений между системами и механизм внедрения зависимостей системы.
|
||||||
|
|
||||||
## Раннеры/Сообщения
|
## Процесс/Раннер
|
||||||
Раннеры это система сообщений для систем. Может использоваться для создания реактивного поведения или для управления очередью вызовов систем. Сообщения это просто интерфейсы наследуемые от IEcsSystem, чтобы интерфейс работал как сообщение нужно реализоват соотсветующий раннер.
|
Процессы - это очереди систем реализующие общий интерфейс. Раннеры запускюат выполнение процессов. Система раннеров и процессов может использоваться для создания реактивного поведения или для управления очередью вызова систем. Встроенные процессы вызываются автоматически, для ручного запуска испольщуйте раннеры получаемые из EcsPipeline.GetRunner<TInterface>().
|
||||||
|
> Метод GetRunner относительно медленный, поэтому рекомендуется кешировать полученные раннеры.
|
||||||
|
|
||||||
Сообщения реализованные по умолчанию:
|
Встроенные процессы:
|
||||||
* `IEcsPreInitSystem`, `IEcsInitSystem`, `IEcsRunSystem`, `IEcsDestroySystem` - сообщения жизненого цикла Pipeline
|
* `IEcsPreInitProcess`, `IEcsInitProcess`, `IEcsRunProcess`, `IEcsDestroyProcess` - процессы жизненого цикла Pipeline
|
||||||
* `IEcsPreInject`, `IEcsInject<T>` - сообщения системы внедрения зависимостей для Pipeline. Через них прокидываются зависимости
|
* `IEcsPreInject`, `IEcsInject<T>` - процессы системы внедрения зависимостей для Pipeline. Через них прокидываются зависимости
|
||||||
* `IEcsPreInitInjectCallbacks` - Так же сообщение системы внедрения зависимостей, но работает в пределах до сообщения IEcsInitSystem, сигнализирует о инициализации предварительных внедрений и окончании.
|
* `IEcsPreInitInjectProcess` - Так же процесс системы внедрения зависимостей, но работает в пределах до выполнения IEcsInitProcess, сигнализирует о инициализации предварительных внедрений и окончании.
|
||||||
|
|
||||||
## Реализация Раннеров и сообщений
|
## Реализация Раннеров и Процессов
|
||||||
Новые сообщения реализуются через интефейсы наследованные от IEcsSystem, например, стандартное IEcsRunSystem.Run(EcsSession session) запускается у всех систем при помощи Runner-а. Runner-а можно получить вызыввав EcsSession.GetRunner<TInterface>().
|
Для добавления нового процесса создайте интерфейс наследованный от IEcsSystem и создайте раннер для него. Раннеры это классы реализующие интерфейс запускаемого процесса и наследуемые от EcsRunner<TInterface>. Пример реализации раннера для IEcsRunProcess:
|
||||||
Однако чтобы этто метод вернул нужный Runner, нужно его реализовать, вот пример реаилзации Runner-а для IEcsRunSystem:
|
|
||||||
```c#
|
```c#
|
||||||
public sealed class EcsRunRunner : EcsRunner<IEcsRunSystem>, IEcsRunSystem
|
public sealed class EcsRunRunner : EcsRunner<IEcsRunProcess>, IEcsRunProcess
|
||||||
{
|
{
|
||||||
void IEcsRunSystem.Run(EcsSession session)
|
public void Run(EcsSession session)
|
||||||
{
|
{
|
||||||
foreach (var item in targets) item.Run(session);
|
foreach (var item in targets) item.Run(session);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
> Раннеры имеют ряд требований к реализации:
|
||||||
|
> * Для одного интерфейса может быть только одна реализация раннера;
|
||||||
|
> * Наследоваться от `EcsRunner<TInterface>` можно только напрямую;
|
||||||
|
> * Раннер может содержать только один интерфейс(за исключением `IEcsSystem`);
|
||||||
|
> * Наследуемый класс `EcsRunner<TInterface>,` в качестве `TInterface` должен принимать реализованный интерфейс;
|
||||||
|
> * Раннер не может быть размещен внутри другого класса.
|
||||||
|
Loading…
Reference in New Issue
Block a user