LifePlay-Revival/Docs/Migration/etat/REL/STM1/STM1-SPEC-08.md
edujiro5972 56dfcfc3d2 LifePlay UE 5.8 : état de développement au 2026-10-20
Tickets : PUB-20261020-T1

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-20 17:35:10 +02:00

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

  1. Composants visés : les UInstancedStaticMeshComponent (HISM compris) des acteurs dont la classe contient « MapMarkers » et dont le maillage commence par House ou Skyscraper (imports de MapMarkers, STM1-CART-04.md). Les LP_tree et LowPolyJeep (arbres et jeeps des ponts) ne sont pas touchés.
  2. 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'UStreetMap et du masque.
  3. Correspondance : distance en XY ≤ 50 cm à un centre du masque (MatchToleranceCm), par grille de hachage de 1 m.
  4. 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).
  5. Masquage : UpdateInstanceTransform(i, transform d'échelle 0, bWorldSpace = false, bMarkRenderStateDirty = false, bTeleport = true), puis un MarkRenderStateDirty par composant. Les indices sont conservés et les instances ne sont jamais retirées.
  6. 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.
  7. 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'UStreetMap actuelle : 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.