4.9 KiB
4.9 KiB
Fiche STM1-SPEC-08 (SPEC exécutable d'O2) — Niveau N3 — Modèle prévu opus medium | utilisé claude-opus-5-5 — Agent session « Medium · STM1 » (pas de sous-agent) — Skills sk-protocol
STM1-SPEC-08 : masquer les maisons génériques posées dans l'eau (O2, option D) (2026-10-20)
Décisions :
- GO de Big Boss sur O2, cité dans
STM1-O3-LISTE.md; - choix de l'utilisateur, tapé dans cette session après la liste O3, cité mot pour mot : « option D ». Tout masquer, sans seuil.
Base : STM1-SPEC-04.md § 3, STM1-O3-LISTE.md.
1. Ce qui change
| Élément | Fichier | Changement |
|---|---|---|
| Classe de données (neuve) | Source/LifePlay/LPCityWaterMask.h |
ULPCityWaterMask : UDataAsset. Champs : City, SourceBuildingCount, Centers (TArray<FVector2D>, centres de boîte dans le repère de la carte, en cm) et AreasM2 (TArray<float>, aire du polygone). Module LifePlay, donc chargeable aussi en Shipping. |
| Commandlet | Source/LifePlayEditorTools/LPBuildCityWaterCommandlet.cpp |
Option -MaskOnly : calcul O3 (même recalage, mêmes polygones), puis écriture de /Game/Heavy/StreetMap/Water/<Ville>_Mask. Garde contre l'écrasement. Le maillage d'eau n'est ni relu ni réécrit. Avec -DryRun, rapport seul. |
| Sous-système | Source/LifePlay/LPCityWaterSubsystem.h/.cpp |
Après la pose de l'eau, puis à chaque changement du nombre d'instances : masquage des instances de maisons dont le centre est dans le masque. |
Données : un seul asset neuf, Content/Heavy/StreetMap/Water/CentralLondon_Mask.uasset, hors git (Content/Heavy), cuit avec /Game. On n'écrit ni dans GI, ni dans MapMarkers, ni dans les 281 cartes, ni dans Water/CentralLondon.
Pourquoi des centres exacts plutôt que la grille de SPEC-04 § 3.1 :
- avec 59 points, le masquage correspond exactement à la liste O3 vue par l'utilisateur ;
- aucune maison de quai n'est masquée par l'arrondi d'une case, ce qui écarte le risque de SPEC-04 § 4 ;
- l'asset est minuscule.
2. Règles du masquage en jeu
- Composants visés : les
UInstancedStaticMeshComponent(HISM compris) des acteurs dont la classe contient « MapMarkers » et dont le maillage commence parHouseouSkyscraper(imports de MapMarkers,STM1-CART-04.md). LesLP_treeetLowPolyJeep(arbres et jeeps des ponts) ne sont pas touchés. - Repère : la position monde de l'instance est ramenée dans le repère du composant de carte (
MapComp->GetComponentTransform().InverseTransformPosition). C'est le repère de l'UStreetMapet du masque. - Correspondance : distance en XY ≤ 50 cm à un centre du masque (
MatchToleranceCm), par grille de hachage de 1 m. - Seuil : constante
SpareAboveAreaM2 = 0, qui le désactive (option D). Une valeur positive épargnerait les bâtiments d'aire supérieure ou égale (options A et B). - Masquage :
UpdateInstanceTransform(i, transform d'échelle 0, bWorldSpace = false, bMarkRenderStateDirty = false, bTeleport = true), puis unMarkRenderStateDirtypar composant. Les indices sont conservés et les instances ne sont jamais retirées. - Nouvelle passe quand la carte change (même déclencheur que l'eau) ou quand le nombre total d'instances visées change (MapMarkers les ajoute au fil de l'eau). Une instance déjà à l'échelle 0 compte comme masquée et n'est pas retouchée.
- Ville sans masque : rien n'est fait, et une ligne le dit.
3. Témoin [LPCity]
[LPCity] EAU <Ville> : masque <n> centres ; instances maisons <N> ; masquees <m> ; epargnees <k> (seuil <s> m2) ; centres sans instance <c>
Une ligne est écrite à chaque passe dont le résultat change.
4. Étapes et preuves
| # | Geste | Processus UE | Preuve attendue |
|---|---|---|---|
| 1 | Instantané STM1-O2 des trois fichiers modifiés |
non | manifest.csv, fait (MD5 avant C5709BDD, DEB58EC1, EC0946C5) |
| 2 | Code (commandlet, classe, sous-système) | non | diff |
| 3 | Build éditeur, EtatDir absolu |
jeton | code 0 |
| 4 | Commandlet -MaskOnly -DryRun, puis -MaskOnly, sorties dans un chemin sans espace |
jeton | 59 centres ; asset écrit ; Water/CentralLondon inchangé (5BDF4F0A) |
| 5 | Build Development | jeton | code 0 |
| 6 | BUILD-FIN avec les MD5 ; rendre le jeton | non | STM1-B6-FIN.md |
| 7 | Build d'essai et essai en jeu | sur ordre de l'utilisateur | la ligne [LPCity] EAU … masquees 5x ; plus de maison sur la Tamise ; ponts, jeeps et quais intacts |
5. Risques
- Le masque est lié à l'
UStreetMapactuelle : si la carte de Londres est réimportée, il faut recréer le masque. Le témoin le signale par des centres sans instance. - Aucune autre lecture du GI ni écriture ailleurs que dans les transformations d'instances, qui sont des données de rendu reconstruites à chaque chargement de ville. Aucun effet sur les sauvegardes.
- Mode classique : les maisons génériques n'y sont pas visibles (SPEC-04 § 3.4). Les masquer n'y change rien.