Миграция - это перемещение какого-либо объекта или группы объектов из одного состояния в другое. Например, перенос популяции из одного окружения в другое. Миграция - по сути комплексный объект, который может описывать много разных переходов. Поэтому с ними пришлось повозится, в особенности с созданием нужной миграции из интерфейса, что вызвало много модификаций попапа создания миграции.
Параметры:
- Описание миграции - как же без этого, надо же как-то знать, что произошло.
- Год - в каком году (или другой системе исчисления) произошла миграция.
- Откуда и куда произошла миграция - уникальные идентификаторы основных объектов, в основном это окружение или сообщество.
- Тип миграции. Создание - если что-то было создано где-либо.
Окончание - если что-то прекратило свое существование.
Вход - это если что-то уже ранее созданное входит в объект (например новые члены сообщества из популяции окружения).
Выход - соответственно если что-то просто выходит.
Перемещение - в некоторых случаях нельзя делать вход и выход, а объект может только переместиться. Например популяция не может выйти из окружения, она обязательно должна переместиться в другое или закончиться. - Список объектов, осуществляющих миграцию.
- Список преобразованных объектов после миграции - в процессе миграции объекты могут превратиться во что-нибудь другое, например популяция может превратиться в другую с другим поколением.
- Параметры объектов миграции - количественные значения миграции. То есть сколько кого мигрировало.
Оперируя этими параметрами, можно создать все необходимые мне перемещения и преобразования в ходе хронологии.
Объекты участвующие в миграции:
Кто же и как может у меня мигрировать?
Герой:
- Герой может быть Создан или Закончиться, делает он это в каком-либо окружении.
- Может Переместиться из одного окружения в другое. Он обязан находиться в одном каком-либо окружении.
- Может Войти и Выйти в сообщество. Он может не находиться в сообществах или находиться сразу в нескольких.
Сообщество:
- Также как и герой, оно может быть Создано или Закончиться в каком-либо окружении.
- Может Переместиться из одного окружения в другое.
Окружение:
Окружение может быть только Создано или Закончиться.
Поколение:
Да, именно поколение, а не популяция, является объектом миграции. Популяция же выступает в качестве количественного параметра поколения.
- Может быть Создано в окружении. Начинать же с чего-то надо, будь то хоть Адам с Евой, но с кого-то должно все начаться.
- Может быть Закончено. Как не прискорбно, но всякие войны, эпидемии и катастрофы - случаются, и население уменьшается не только за счет старения.
- Может Переместиться из одного окружения в другое. В этом случае на входе мы имеем одно поколение, на выходе - другое, каждое со своим количественным параметром в виде популяции. Также поколение может мигрировать в рамках одного окружения, Преобразуется, то есть популяция просто превращается в новое. Это позволяет делать преобразование населения, например Людей в Вампиров или Зомби.
- Может Войти и Выйти в сообщество. Для сообществ поколения входят только из существующего населения окружения, в котором находится сообщество.
- Также может перемещаться между сообществами, либо в рамках одного с Преобразованием.
Использование:
Что же в конечном счете делают миграции? Они модифицируют состояния объектов хронологии (Окружения, Сообщества, Героя) в определенный год, и создают на основе этого воздействия новый Чекпоинт.
При Создании, Входе, Переходе в состояние Окружения или Сообщества вписывается\добавляется объект со своими параметрами (например добавляется популяция). В случае с Переходом добавление происходит, если Окружение или Сообщество является входящим объектом миграции.
При Окончании, Выходе или Переходе (для объектов являющихся исходящими) убираются объекты миграции.
Герой же меняет свое состояние в случае, если он является объектом миграции. В его чекпоинте прописывается в каком он окружении или сообществе.
Итого:
Теперь у меня есть то, при помощи чего можно управлять состояниями объектов, и можно с ними полнофункционально работать.
Создание миграций из интерфейса программы - это отдельная тема, которую я раскрою позже, а для начала надо будет показать к чему все эти вещи привели. В следующей статье я покажу работу и отображение Населения в программе.
P.S. Ставьте лайки, подписывайтесь, пишите комментарии. Это позволит развить блог и делиться в нем всем интересным в моих проектах. А на этапах тестирования гипотез и прототипов мнение большого числа людей будет очень важно.
P.P.S. для лучшего понимания статьи рекомендую прочитать предыдущие: Идея первого проекта
Карта Хронологии
Теория поколений
P.P.P.S и Обязательно поучаствуйте в выборе Названия Игры