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 @@
|
||||
|
||||
# Основные концепции
|
||||
## Сущьность
|
||||
Сущьности реализованы двумя типами:
|
||||
* `int` - явялется временным идентификатором, применяется в пределах одного тика
|
||||
* `EcsEntity` - долговременный идентификатор сущьности, хранит в себе полный набор информации для однозначной идентификации
|
||||
Сущьности - это идентификаторы, к которым крепятся данные. Есть2 вида идентификатора:
|
||||
* `int` - однократный идентификатор, применяется в пределах одного тика. Не рекомендуется хранить `int` идентификаторы, в место этого используйте `entlong`;
|
||||
* `entlong` - долговременный идентификатор, содержит в себе полный набор информации для однозначной идентификации;
|
||||
|
||||
## Компонент
|
||||
Компоненты - это даные для сущьностей. Могут быть тольно struct и обязаны наследовать один из интерфейсов который определяют тип компонента. самый базовый IEcsComponent.
|
||||
Компоненты - это даные для сущностей. Могут быть тольно struct и обязаны реализовывать интерфейс IEcsComponent или другой указываюший разновидность кмпонента.
|
||||
```c#
|
||||
struct Health : IEcsComponent
|
||||
{
|
||||
@ -23,21 +23,21 @@ struct Health : IEcsComponent
|
||||
}
|
||||
```
|
||||
## Система
|
||||
Системы - это основная логика, тут задается поведение сущьностей. Существуют в виде пользовательских классов, реализующих как минимум один из IEcsInitSystem, IEcsDestroySystem, IEcsRunSystem интерфейсов.
|
||||
Системы - это основная логика, тут задается поведение сущьностей. Существуют в виде пользовательских классов, реализующих как минимум один из IEcsInitProcess, IEcsDestroyProcess, IEcsRunProcess интерфейсов.
|
||||
```c#
|
||||
class UserSystem : IEcsPreInitSystem, IEcsInitSystem, IEcsRunSystem, IEcsDestroySystem
|
||||
class UserSystem : IEcsPreInitProcess, IEcsInitProcess, IEcsRunProcess, IEcsDestroyProcess
|
||||
{
|
||||
public void PreInit (EcsSession session) {
|
||||
// Будет вызван один раз в момент работы EcsSession.Init() и до срабатывания IEcsInitSystem.Init()
|
||||
// Будет вызван один раз в момент работы EcsSession.Init() и до срабатывания IEcsInitProcess.Init()
|
||||
}
|
||||
public void Init (EcsSession session) {
|
||||
// Будет вызван один раз в момент работы EcsSession.Init() и после срабатывания IEcsPreInitSystem.PreInit()
|
||||
// Будет вызван один раз в момент работы EcsSession.Init() и после срабатывания IEcsPreInitProcess.PreInit()
|
||||
}
|
||||
public void Run (EcsSession session) {
|
||||
// Будет вызван один раз в момент работы EcsSession.Run().
|
||||
}
|
||||
public void Destroy (EcsSession session) {
|
||||
// Будет вызван один раз в момент работы EcsSession.Destroy() и до срабатывания IEcsPostDestroySystem.PostDestroy()
|
||||
// Будет вызван один раз в момент работы EcsSession.Destroy()
|
||||
}
|
||||
|
||||
//Для реализации дополнительных сообщений используйте Раннеры
|
||||
@ -47,23 +47,29 @@ class UserSystem : IEcsPreInitSystem, IEcsInitSystem, IEcsRunSystem, IEcsDestroy
|
||||
## Pipeline
|
||||
Является двжиком систем, определяя поочередность их вызова, предоставляющий механизм для сообщений между системами и механизм внедрения зависимостей системы.
|
||||
|
||||
## Раннеры/Сообщения
|
||||
Раннеры это система сообщений для систем. Может использоваться для создания реактивного поведения или для управления очередью вызовов систем. Сообщения это просто интерфейсы наследуемые от IEcsSystem, чтобы интерфейс работал как сообщение нужно реализоват соотсветующий раннер.
|
||||
## Процесс/Раннер
|
||||
Процессы - это очереди систем реализующие общий интерфейс. Раннеры запускюат выполнение процессов. Система раннеров и процессов может использоваться для создания реактивного поведения или для управления очередью вызова систем. Встроенные процессы вызываются автоматически, для ручного запуска испольщуйте раннеры получаемые из EcsPipeline.GetRunner<TInterface>().
|
||||
> Метод GetRunner относительно медленный, поэтому рекомендуется кешировать полученные раннеры.
|
||||
|
||||
Сообщения реализованные по умолчанию:
|
||||
* `IEcsPreInitSystem`, `IEcsInitSystem`, `IEcsRunSystem`, `IEcsDestroySystem` - сообщения жизненого цикла Pipeline
|
||||
* `IEcsPreInject`, `IEcsInject<T>` - сообщения системы внедрения зависимостей для Pipeline. Через них прокидываются зависимости
|
||||
* `IEcsPreInitInjectCallbacks` - Так же сообщение системы внедрения зависимостей, но работает в пределах до сообщения IEcsInitSystem, сигнализирует о инициализации предварительных внедрений и окончании.
|
||||
Встроенные процессы:
|
||||
* `IEcsPreInitProcess`, `IEcsInitProcess`, `IEcsRunProcess`, `IEcsDestroyProcess` - процессы жизненого цикла Pipeline
|
||||
* `IEcsPreInject`, `IEcsInject<T>` - процессы системы внедрения зависимостей для Pipeline. Через них прокидываются зависимости
|
||||
* `IEcsPreInitInjectProcess` - Так же процесс системы внедрения зависимостей, но работает в пределах до выполнения IEcsInitProcess, сигнализирует о инициализации предварительных внедрений и окончании.
|
||||
|
||||
## Реализация Раннеров и сообщений
|
||||
Новые сообщения реализуются через интефейсы наследованные от IEcsSystem, например, стандартное IEcsRunSystem.Run(EcsSession session) запускается у всех систем при помощи Runner-а. Runner-а можно получить вызыввав EcsSession.GetRunner<TInterface>().
|
||||
Однако чтобы этто метод вернул нужный Runner, нужно его реализовать, вот пример реаилзации Runner-а для IEcsRunSystem:
|
||||
## Реализация Раннеров и Процессов
|
||||
Для добавления нового процесса создайте интерфейс наследованный от IEcsSystem и создайте раннер для него. Раннеры это классы реализующие интерфейс запускаемого процесса и наследуемые от EcsRunner<TInterface>. Пример реализации раннера для IEcsRunProcess:
|
||||
```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);
|
||||
}
|
||||
}
|
||||
```
|
||||
> Раннеры имеют ряд требований к реализации:
|
||||
> * Для одного интерфейса может быть только одна реализация раннера;
|
||||
> * Наследоваться от `EcsRunner<TInterface>` можно только напрямую;
|
||||
> * Раннер может содержать только один интерфейс(за исключением `IEcsSystem`);
|
||||
> * Наследуемый класс `EcsRunner<TInterface>,` в качестве `TInterface` должен принимать реализованный интерфейс;
|
||||
> * Раннер не может быть размещен внутри другого класса.
|
||||
|
Loading…
Reference in New Issue
Block a user