Enhance family and roster management in school simulation by implementing support for incomplete families, ensuring proper handling of absent parents while maintaining surname consistency. Update family creation logic to account for single-parent households and revise child identification to prevent ID conflicts. Introduce seat shuffling to prevent siblings from being placed in the same class, improving the realism of student distribution. Update related tests to validate these new functionalities and ensure robustness in family and roster handling.
This commit is contained in:
@@ -102,6 +102,37 @@
|
||||
по классам, а взрослых — по должностям. Обратный порядок («сгенерировать 400 учеников, потом
|
||||
приписать им родителей») не даёт ни братьев, ни учителей-родителей.
|
||||
|
||||
**Места раздаются вперемешку по всей школе, а не подряд.** Карта отдаёт ученические места
|
||||
сгруппированными по кабинетам, и семья, берущая подряд идущие места, получала бы всех детей в один
|
||||
класс — то есть ровесниками, с одним и тем же окном рождения. Порядок мест перемешивается от
|
||||
школьного сида до раздачи.
|
||||
|
||||
Цена решения названа прямо: набор мест перестаёт быть «дописываемым с конца». Более крупная карта
|
||||
даёт другую раскладку по классам с самого начала, а не только в хвосте. Что остаётся неизменным —
|
||||
**как разыгрывается сама семья**: её сид зависит только от номера, поэтому фамилия, состав и имена
|
||||
семьи №5 одинаковы в школе на четыре кабинета и в школе на пять. Меняется то, в каком классе сидят
|
||||
её дети, и вместе с классом — год рождения.
|
||||
|
||||
### Неполные семьи
|
||||
|
||||
Примерно **8%** семей с детьми живут с одним родителем. Кто именно остался — отец или мать —
|
||||
решается броском, без перевеса в чью-либо сторону.
|
||||
|
||||
**Причина не моделируется.** Ростер записывает, кто живёт в доме, а не почему. Развод, вдовство и
|
||||
прочее — это события, а событий в этом срезе нет; появится лента — появится и повод завести признак.
|
||||
|
||||
Ребёнок **в любом случае носит отцовскую фамилию и отчество**. Значит, отсутствующему отцу всё
|
||||
равно разыгрывается имя — оно записывается на семью вместе с фамилией. Читать их с присутствующего
|
||||
родителя нельзя: у матери-одиночки нет мужской формы фамилии, а сыну нужна именно она.
|
||||
|
||||
Решение «кто остался» берётся из **отдельного потока**, а не из общего с внешностью. В общем потоке
|
||||
два соседних броска оказались связаны, и все неполные семьи до единой вышли материнскими.
|
||||
|
||||
**Номер ребёнка в идентификаторе — счётчик, а не длина списка.** Выпускник уходит из ростера;
|
||||
если следующий ребёнок семьи получит номер по числу оставшихся детей, он унаследует идентификатор
|
||||
ушедшего, и все ссылки на него — семейные связи, открытая карточка — молча начнут показывать
|
||||
другого человека.
|
||||
|
||||
## Дефы
|
||||
|
||||
Пять новых видов. Ссылки — строками `defName`, как везде.
|
||||
@@ -295,6 +326,7 @@ Protocol ← Server → Simulation → People → Content
|
||||
- Смеси наборов имён с весами.
|
||||
- Новые роли из модов: ученик, работник, родитель — код, не данные.
|
||||
- Портреты и любой арт.
|
||||
- Причина неполной семьи: развод, вдовство и прочее — это события, а ленты событий ещё нет.
|
||||
|
||||
## Зафиксировано этим разговором
|
||||
|
||||
@@ -313,6 +345,13 @@ Protocol ← Server → Simulation → People → Content
|
||||
| Родители | Сущности в `World`, без места на карте; задел на вызов в школу |
|
||||
| Совмещение ролей | Один человек может быть работником и родителем ученика |
|
||||
| Единица генерации | Семья, а не человек |
|
||||
| Неполные семьи | Около 8% семей с детьми; остаётся случайный родитель; причина не моделируется |
|
||||
| Фамилия и отчество | Всегда отцовские; имя отца и фамилия записаны на семье, а не на человеке |
|
||||
| Раздача мест | Вперемешку по школе от сида: иначе братья и сёстры — всегда одноклассники |
|
||||
| Стабильность сида | Гарантируется по семье (фамилия, состав, имена), не по месту в классе |
|
||||
| Идентификатор ребёнка | Счётчик семьи; номер выпустившегося не переиспользуется |
|
||||
| Набор в первый класс | Новые семьи приходят по одному ребёнку — иначе это тройняшки-ровесники |
|
||||
| Порядок ограничений | Черта не может пробить потолок тела: зажим повторяется после модификаторов |
|
||||
| Слои человека | Личность, тело, навыки, черты, нужды, связи |
|
||||
| Новые defs | `SkillDef`, `TraitDef`, `BodyAttributeDef`, `NeedDef`, `NameSetDef` |
|
||||
| Телосложение | Производное от роста и веса, не def |
|
||||
|
||||
Reference in New Issue
Block a user