Найти тему
Invariant World

Управление Миграцией

Оглавление

Вот мы и подошли к созданию миграций. Очень разнообразный попап получился. В зависимости от того, что за объект и откуда мигрирует, попап должен подстроиться и предоставить для выбора только ту информацию, которая доступна для этой миграции.

Реализация:

Распределим возможные попапы миграции по объектам хронологии, в рамках которых может осуществляться миграция, а следовательно и вызов их.

Герой:

Миграции героя создаются из вкладки информации об объекте на экране редактирования записи. Да, я раньше его не упоминал в статьях. Блок не сильно большой и у каждого объекта хронологии он свой и отображает базовую информацию об объекте, которую мы рассматривали в более ранних статьях. А также тут отображаются все миграции произошедшие с объектом в редактируемый год.

У героя небольшой выбор миграций.

Создание:

Эта миграция создается автоматически при создании героя и не нуждается в попапе. При этой миграции герой прописывается в состоянии окружения в котором он был создан.

Окончание:

-2

Тут особо нечего описывать. Есть описание и все. Миграция означает Смерь героя и окончание его хронологии.
В результате этой миграции герой удаляется из состояний окружения и сообществ в которых он находился в этот год.

Перемещение:

-3

Герой может переместиться в другое окружение. В попапе предоставляется список возможных окружений существующих в данный период летоисчесления.
Переход осуществляется моментально. Но как быть с тем, если ему нужно например лететь несколько лет куда-то? Все просто: Герой должен находиться в каком-либо окружении и, например, покидая Землю, но еще не прилетев на Марс, герой находится в космосе, что тоже является окружением. Как-то так это должно работать.
В результате этой миграции герой удаляется из состояния окружения, в котором он находился, и вписывается в состояние окружения куда он перешел.

Вход и Выход:

-4

Войти и Выйти герой может в/из сообщество. Соответственно, если герой собирается войти в сообщество, то ему предоставляется список возможных сообществ, существующих в этот год в окружении, в котором находится герой. Выйти герой может из сообществ в которых он состоит.
В результате этих миграций герой заносится или удаляется из состояния выбранного сообщества.

Все, Герой может отправляться в свое путешествие длинною в жизнь.

Окружение

У окружения миграции создаются из нескольких мест.

Создание:

Миграция создания у окружения, как и у героя, создается автоматически при создании окружения.

Окончание:

У окружения также есть своя вкладка Информации:

-5

Тут можно создать миграцию окончания. Она у всех объектов идентичная.

-6

Создать популяцию:

Создать популяцию можно из нескольких мест во вкладке Населения.

Из Блока с общей численностью населения:

-7

Из конкретной нужной расы:

-8

Или же сразу из блока необходимого поколения

-9

Миграция создается путем создания популяции:

В случае вызова создания миграции из Расы или Поколения поля, соответствующие им, заполняются автоматом.

-10

Тут появляется еще одна возможность - это создание новых рас, полов, поколений. Тут и везде далее, в местах где можно выбрать среди этих объектов, можно и вызвать создание новых.

-11

Это очень удобно для быстрой реализации задуманной миграции.

Закончить популяцию:

Также как и с созданием популяции, вызов миграции окончания можно осуществить из общей численности, из конкретной расы или конкретного поколения. В зависимости от места вызова происходит фильтрация популяций, над которыми можно произвести действия.

-12
-13
-14

Вызывается попап миграции с возможностью выбора действия, среди которых есть Окончание.

-15

Тут предоставляется список уже существующих популяций соответственно месту вызова попапа, с подсказкой об уже имеющейся численности этих популяций. Выбрав необходимое поколение, вызывается попап создания популяции с уже заполненным максимальным количеством представителей выбранного поколения.

-16

Редактируем эти значения под необходимые для наших целей и получаем популяции, участвующие в миграции.

-17

В результате такой Миграции из состояния окружения в этот год убираются представители этой популяции в выбранном количестве.

Переместить популяцию:

В том же попапе вместо Окончания популяции можно ее Переместить в другое окружение.

-18

Попап при этом расширяется дополнительными настройками.
Появляется выбор окружения из доступных в данный момент, а для поколений появляется выбор в какое поколение необходимо переместить популяцию. Список доступных поколений формируется исходя из тех, которые на данный момент исчисления доступны в целевом окружении.

Вернемся к возможности из выбора в попапах создать объект. Тут этот функционал расширяется, и если из него создать новое поколение, то в нем поля автоматически заполнятся значениями из исходного поколения. Это оказалось удобно и сильно ускоряет формирование популяций.

В попапе создания миграции перемещения популяции есть возможность выбрать в качестве целевого окружения то же, что и исходное. Это позволяет внутри окружения производить манипуляции по трансформации популяции, например превращение людей в безмозглых зомби.

В результате такой миграции выбранные популяции убираются у исходного окружения и добавляются во входящее окружение. При этом при конвертации происходит распределение численности по полам и возрастным группам результирующей популяции.

Сообщество

У сообщества ситуация похожа на окружение.

Создание:

Миграция создания также создается автоматически при её создании.

Окончание и Перемещение:

Сообщество тоже имеет вкладку Информации:

-19

В этой вкладке можно создать миграции окончания сообщества и перемещение сообщества в другое окружение. Аналогично миграциям героя.

Вход популяции в сообщество:

-20

Во вкладке Населения, по аналогии с Созданием популяции в окружении, в сообществе осуществляется вход популяции. Место выбора создания попапа также фильтрует варианты.

-21

В вызываемом попапе нам предоставляется возможность выбора популяции из имеющихся в окружении на момент создания миграции.

Максимумы при этом меняются исходя из уже имеющихся популяций в сообществе. Никто же не хочет, чтобы в сообществе оказалось больше представителей поколения, чем их есть в окружении.

Результатом этой миграции является запись выбранной популяции в Состояние сообщества в виде членов сообщества.

Выход популяции из сообщества:

Аналогично Окончанию и Перемещению в окружении, вызываются попапы Выхода и Перемещения у сообщества.

-22
-23

Тут все работает по старой схеме. Выбираем интересующие нас популяции из существующих в сообществе и удаляем их из Состояния сообщества.

Перемещение популяции в сообществе:

В этой миграции есть свои собственные параметры. Так как популяция может переместиться из одного сообщества в другое:

-24

В этом случае нам предоставляется выбор в какое сообщество переходит популяция.

И второй случай - Перемещение в другую популяцию, преобразование популяции:

-25

На тут случай, если всех в сообществе покусали летучие мыши.

Тут все происходит по тем же правилам, что и в случае перемещения популяции внутри одного окружения.

Итого:

Статья получилась длинной, но это из-за картинок. Надеюсь она была интересной и познавательной, как и работа над всеми этими миграциями.

-26

P.S. Ставьте лайки, подписывайтесь, пишите комментарии. Это позволит развить блог и делиться в нем всем интересным в моих проектах. А на этапах тестирования гипотез и прототипов мнение большого числа людей будет очень важно.

P.P.S. для лучшего понимания статьи рекомендую прочитать предыдущие:
Идея первого проекта
Миграции
Население