diff --git a/README.md b/README.md index 9c08bff..0f03a3e 100644 --- a/README.md +++ b/README.md @@ -5,18 +5,19 @@ # DragonECS - C# Entity Component System Framework -> **ВАЖНО!** Проект в стадии разработки. README так же сейчас сущесвуте в виде наброска +> **ВАЖНО!** Проект в стадии разработки. API может меняться. # Основные концепции ## Сущьность Сущьности реализованы двумя типами: -* `ent` - Представляет собой уникальный идентификатор сущьности, ее поколение и идентификатор мира. Так же содержит в себе методы для работы с компонентами. Обычно вам нужно работать только с этим типом. -* `Entity` - Испольщуются в перечислениях групп сущьностей, идентичен ent/ +* `int` - явялется временным идентификатором, применяется в пределах одного тика +* `EcsEntity` - долговременный идентификатор сущьности, хранит в себе полный набор информации для однозначной идентификации ## Компонент -Компоненты - это даные для сущьностей. Могут быть тольно struct или значимого типа. Не должны содержать логики, только данные +Компоненты - это даные для сущьностей. Могут быть тольно struct и обязаны наследовать один из интерфейсов который определяют тип компонента. самый базовый IEcsComponent. ```c# -struct Health { +struct Health : IEcsComponent +{ public float health; public int armor; } @@ -24,7 +25,8 @@ struct Health { ## Система Системы - это основная логика, тут задается поведение сущьностей. Существуют в виде пользовательских классов, реализующих как минимум один из IEcsInitSystem, IEcsDestroySystem, IEcsRunSystem интерфейсов. ```c# -class UserSystem : IEcsPreInitSystem, IEcsInitSystem, IEcsRunSystem, IEcsDestroySystem { +class UserSystem : IEcsPreInitSystem, IEcsInitSystem, IEcsRunSystem, IEcsDestroySystem +{ public void PreInit (EcsSession session) { // Будет вызван один раз в момент работы EcsSession.Init() и до срабатывания IEcsInitSystem.Init() } @@ -42,11 +44,18 @@ class UserSystem : IEcsPreInitSystem, IEcsInitSystem, IEcsRunSystem, IEcsDestroy } ``` -## Сессия -Является контейнером и контроллером систем и миров. Реализована классом `EcsSession`. Каждую сессию можно рассматривать как отдельную, по разному конфигурируемую, программу +## Pipeline +Является двжиком систем, определяя поочередность их вызова и предоставляющий механизм для сообщений между системами. -## Раннеры -Раннеры это система сообщений для систем. Может использоваться для создания реактивного поведения или для управления очередью вызовов систем. Cообщения реализуются через интефейсы наследованные от IEcsSystem, например, стандартное IEcsRunSystem.Run(EcsSession session) так же явялется сообщением, а запускается оно у всех систем при помощи Runner-а. Runner-а можно получить вызыввав EcsSession.GetRunner(). +## Раннеры/Сообщения +Раннеры это система сообщений для систем. Может использоваться для создания реактивного поведения или для управления очередью вызовов систем. Сообщения это просто интерфейсы наследуемые от IEcsSystem, чтобы интерфейс работал как сообщение нужно реализоват соотсветующий раннер. +Сообщения реализованные по умолчанию: +`IEcsPreInitSystem`, `IEcsInitSystem`, `IEcsRunSystem`, `IEcsDestroySystem` - сообщения жизненого цикла Pipeline +`IEcsPreInject`, `IEcsInject` - сообщения системы внедрения зависимостей для Pipeline. Через них прокидываются зависимости +`IEcsPreInitInjectCallbacks` - Так же сообщение системы внедрения зависимостей, но работает в пределах до сообщения IEcsInitSystem, сигнализирует о инициализации предварительных внедрений и окончании. + +## Реализация Раннеров и сообщений +Новые сообщения реализуются через интефейсы наследованные от IEcsSystem, например, стандартное IEcsRunSystem.Run(EcsSession session) запускается у всех систем при помощи Runner-а. Runner-а можно получить вызыввав EcsSession.GetRunner(). Однако чтобы этто метод вернул нужный Runner, нужно его реализовать, вот пример реаилзации Runner-а для IEcsRunSystem: ```c# public sealed class EcsRunRunner : EcsRunner, IEcsRunSystem