Merge phase 31 dress generator.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Leonid Pershin
2026-08-20 03:27:06 +03:00
co-authored by Cursor
44 changed files with 8884 additions and 1306 deletions
+16 -16
View File
@@ -12,30 +12,30 @@
## Задачи
- [ ] Экземпляр вещи на человеке: `def`, `color`, `condition` (1), место (`worn` / `bag` /
- [x] Экземпляр вещи на человеке: `def`, `color`, `condition` (1), место (`worn` / `bag` /
`locker` / `home`), для учебника — `subject`
- [ ] Генератор одевает учеников, сотрудников, родителей и соискателей от семейного сида:
- [x] Генератор одевает учеников, сотрудников, родителей и соискателей от семейного сида:
слои без пересечения, пол, возраст, дефолтные правила (обычная форма, без яркого на теле)
- [ ] Учебники — по одному на предмет параллели ученика; в сумке пока могут лежать все, разнос
- [x] Учебники — по одному на предмет параллели ученика; в сумке пока могут лежать все, разнос
«сегодняшние vs шкафчик» — в фазе 33/35
- [ ] Портфель, телефон, бутылка — с возрастом и шансом из данных, не из константы в генераторе
- [ ] Навык `Hauling` (`always`); предел массы в дефе правил; на карточке несёшь/можешь.
- [x] Портфель, телефон, бутылка — с возрастом и шансом из данных, не из константы в генераторе
- [x] Навык `Hauling` (`always`); предел массы в дефе правил; на карточке несёшь/можешь.
Перегруз ходьбу не трогает; в сумку сверх предела генератор не кладёт
- [ ] `GET .../people/{id}` отдаёт надетое и ношу; список людей — нет
- [ ] Карточка пока без вкладок: секции «Одежда» и «Ноша» в том же свитке
- [ ] `people.json` пишется при создании и наборе; золотой отпечаток обновляется в этом коммите
- [x] `GET .../people/{id}` отдаёт надетое и ношу; список людей — нет
- [x] Карточка пока без вкладок: секции «Одежда» и «Ноша» в том же свитке
- [x] `people.json` пишется при создании и наборе; золотой отпечаток обновляется в этом коммите
с объяснением, что изменилось
- [ ] Строки через `t(...)` / локали каталога
- [x] Строки через `t(...)` / локали каталога
## Тесты, без которых фаза не закрыта
- [ ] Тот же сид, страна, карта и язык → те же id вещей, цвета и места
- [ ] На одном слое не две вещи; платье занимает низ и верх сразу
- [ ] Юбка не выдаётся мужчинам на тело; яркий верх не выдаётся на тело при дефолтных правилах
- [ ] Ученик параллели с математикой имеет учебник этого предмета
- [ ] Родитель и соискатель одеты
- [ ] Масса в сумке ≤ предела
- [ ] Старый `people.json` без инвентаря поднимается: генератор одевает при загрузке и пишет
- [x] Тот же сид, страна, карта и язык → те же id вещей, цвета и места
- [x] На одном слое не две вещи; платье занимает низ и верх сразу
- [x] Юбка не выдаётся мужчинам на тело; яркий верх не выдаётся на тело при дефолтных правилах
- [x] Ученик параллели с математикой имеет учебник этого предмета
- [x] Родитель и соискатель одеты
- [x] Масса в сумке ≤ предела
- [x] Старый `people.json` без инвентаря поднимается: генератор одевает при загрузке и пишет
файл (как пул соискателей в фазе 11)
## Критерий готовности
+1 -1
View File
@@ -129,7 +129,7 @@
| --- | --- | --- |
| [29. Страна](29-country.md) | ✅ | `CountryDef`, create выбирает страну, климат-пресет от сида |
| [30. Слои и палитра](30-apparel-defs.md) | ✅ | Поля `ThingDef`, `ColorDef`, ванильная одежда и ноша |
| [31. Генератор одевает](31-dress-generator.md) | 🔄 | Гардероб на человеке, ноша-число, `people.json` |
| [31. Генератор одевает](31-dress-generator.md) | | Гардероб на человеке, ноша-число, `people.json` |
29 и 30 независимы; 31 стоит на обеих.
+30 -2
View File
@@ -211,7 +211,8 @@ are `400` `invalid-query`. `lang` is `ru` or `en`, same as the catalog — anyth
}
```
The list row is identity only — skills, traits and needs stay on the card. Age is computed from
The list row is identity only — skills, traits, needs, clothes and what they carry stay on the
card. Age is computed from
`birthDate` and the published game time, not from the World.
Applicants live in `saves/{id}.people.json` next to the roster and are **not** in this list.
@@ -254,6 +255,11 @@ is that def in the request locale. HTTP JSON is additive — no protocol version
`skills` lists only keys the person has, not every `SkillDef` in the catalog. A first-year has
no Chemistry; a related tongue from the name set may sit beside the native at a low value.
`worn` is what is on the body right now: def, colour, and the layers it occupies. `carried` is
the bag — textbooks include `subject`. `carryMass` / `carryCapacity` are kilograms; overload
does not slow walking. Home and locker stay in `people.json` and are not on this card. The
people list does not include any of these fields.
```json
{
"id": "f0.c0",
@@ -276,7 +282,29 @@ no Chemistry; a related tongue from the name set may sit beside the native at a
"children": [],
"siblings": [{ "id": "f0.c1", "fullName": "Иванов Кирилл Петрович", "female": false }],
"partners": []
}
},
"worn": [
{
"defName": "Shirt",
"label": "Рубашка",
"color": "White",
"colorLabel": "Белый",
"layers": [{ "defName": "Top", "label": "Верх" }]
}
],
"carried": [
{
"defName": "Textbook",
"label": "Учебник",
"color": null,
"colorLabel": null,
"subject": "Mathematics",
"subjectLabel": "Математика",
"mass": 0.4
}
],
"carryMass": 1.2,
"carryCapacity": 14
}
```