5.5 KiB
5.5 KiB
Fiche MAPDL1-L4-CART-01 — Niveau N2 — Modèle prévu opus medium | utilisé claude-opus-5-5 — Agent session « Medium · MAPDL1 » — Skills sk-protocol, lp-city, lp-commandlets
MAPDL1-L4 (préparation) : comment le menu décide qu'une ville est « Installed » (2026-10-22)
Lecture demandée par Big Boss pour démarrer L4 aussitôt. Commandlets en lecture seule, sous le jeton UE de P1.
1. Mesuré
LPDumpFunction -BP=City:=== City : 1 graphe(s) === / EventGraph (75 noeuds).LPDumpFunction -BP=City -Fn=EventGraph -Pins -Exec: 349 lignes, dansetat\REL\MAPDL1\MAPDL1-L4-dump-City-EventGraph.txt. Journal :Saved\Logs\portage\MAPDL1_LPDumpFunction_20261022-115942.log.LPDumpFunction -BP=CityMenu -Fn=EventGraph -Pins -Exec: 264 lignes, dansetat\REL\MAPDL1\MAPDL1-L4-dump-CityMenu-EventGraph.txt. Journal :…_20261022-120130.log.
Extraits, avec les lignes des fichiers ci-dessus :
CityMenu.EventGraph l. 123-132 :
K2Node_CallFunction_7 appel ModdingExtraBPLibrary::GetAllFilesFromFolder()
Files -> K2Node_VariableSet_20.SM_Data
RootFolderFullPath = 'Heavy/StreetMap'
Ext = 'uasset'
City.EventGraph l. 2-4, 45-49 : Construct -> CityText.SetText(City.DisplayName) -> Delay 0.2
City.EventGraph l. 164-181 : String = '/' + <nom tiré de City.StreetMapName> + '.uasset'
City.EventGraph l. 168-225 : ForEachLoopWithBreak sur CityMenu.SM_Data ; EndsWith(element, String, IgnoreCase) -> Count++ ;
Count == 2 -> InstalledText.SetText(…) + SetColorAndOpacity(R=0.176, G=1, B=0 : vert), Break
City.EventGraph l. 5-22, 96-104 : CityButton.OnClicked -> si InstalledText.GetText() == FormatText(…) -> CityMenu.CheckIfValidProportion -> SetLoading -> MoveCity
Source C++ de la liste : Plugins/ModdingExtra/Source/ModdingExtra/Private/ModdingExtraBPLibrary.cpp:153-224.
- La fonction cherche d'abord les fichiers
*.uassetsur le disque, sousContent/Heavy/StreetMap(FindFilesRecursive, l. 180). - Si la liste est vide, ce qui est le cas d'un build IoStore, elle la reconstruit depuis le registre d'assets,
GetAssetsByPath("/Game/Heavy/StreetMap", récursif), l. 186-218 (lot O2b).
2. Ce qui est établi
- Une ville est « Installed » quand
SM_Datacontient deux chemins qui finissent par/<Ville>.uasset:StreetMap/<Ville>etStatic/<Ville>. C'est le mécanisme d'origine, celui de « How_to_install_a_city.txt » (copier les deux paires dansContent\Heavy\StreetMap). Sinon le texte reste celui du widget, « Not Installed » (L1-CART-02). - Le clic est déjà bloqué pour une ville « Not Installed » :
MoveCityn'est appelé que siInstalledTextvaut le texte « installé ». La décision D4 (« une ville reste indisponible tant que pas installée ») existe donc déjà dans le Blueprint d'origine. - Aujourd'hui, les 277 gabarits ont leurs deux
.uasset: toutes les villes apparaissent « Installed ». - Les packs
lpm_city_*sont sous/<pack>/StreetMap/…, hors de/Game/Heavy/StreetMap.SM_Datane les voit pas. Une ville servie seulement par un pack n'a l'état « Installed » que parce que son gabarit existe.
3. Conséquence pour L4 (à rédiger en SPEC, sans code avant GO)
Le levier le plus simple est C++, sans Blueprint : GetAllFilesFromFolder("Heavy/StreetMap", "uasset"), qui ne sert que CityMenu pour ce dossier (à confirmer par recherche dans les autres Blueprints).
- Il retire de la liste les gabarits, c'est-à-dire les villes sans pack et sans données réelles. Le critère reste à fixer en SPEC :
- liste blanche des villes pleines du jeu (CentralLondon, 00BathCC) ;
- ou repère du gabarit (maillage
Static/<Ville>de 98 Ko, ou étiquette du registre d'assets) ; - ou ville absente de
ResolveCityPath.
- Il ajoute
…/StreetMap/<Ville>.uassetet…/Static/<Ville>.uassetpour chaque ville redirigée par un packlpm_city_*monté.
Ce qui en découle :
- le menu d'origine affiche lui-même « Installed » ou « Not Installed », et bloque le clic : D4 est satisfait sans décoration ;
- il reste à décorer en C++ : le tri (installées, téléchargeables, autres ; enfants de
CityScrollBox) et le bouton Download, ou bien le texte « Download » surInstalledTextrelayé à la fenêtre Slate.
Attention :
InstalledTextest aussi réécrit parSetLoading(bleu) et lu au clic : notre texte « Download » ne doit pas être égal au texte « installé » ;- le texte du
FormatTextcomparé au clic n'est pas affiché par le dump (« Format (vide) »). Il faut le lire avant L4 (uasset58.py stringsou MCP).
4. Compte rendu
- Résultat : le calcul « Installed » est établi. Ce sont deux fichiers
<Ville>.uassetdans la liste deGetAllFilesFromFolder("Heavy/StreetMap"). Le clic est bloqué pour une ville non installée. Le levier de L4 est cette fonction C++. - Incertitudes :
- texte exact comparé au clic ;
- autres appelants de
GetAllFilesFromFoldersurHeavy/StreetMap; - critère du gabarit.
- Fichiers :
MAPDL1-L4-CART-01.md(A). Les deux dumps.txtsont dansetat\REL\MAPDL1\, non suivis par git (.gitignore,.txtd'etat). - À verser :
lp-city§ 3 : l'état « Installed » du menu des villes est calculé parGetAllFilesFromFolder("Heavy/StreetMap","uasset")(ModdingExtraBPLibrary.cpp:153), avec deux.uassetpar ville. Les packslpm_city_*n'y figurent pas. - Suite : SPEC de L4 après les décisions D10 et D11.