177 lines
23 KiB
Markdown
177 lines
23 KiB
Markdown
Fiche CAM-T3 — Niveau N3 — Modèle prévu opus | utilisé claude-opus-5-5 — Agent lp-cart — Skills sk-protocol, lp-paths (préchargés aussi : ue-cpp-build, lp-commandlets)
|
||
# CAM-T3-CART : caméras dans le C++ et la configuration (2026-10-11)
|
||
|
||
Copie `D:\Game\LifePlay-master 5.8`, branche `ue5.8`, HEAD `4283c13` (`git rev-parse --short HEAD`, `git branch --show-current`).
|
||
Lecture seule : aucun éditeur, commandlet, MCP ou build. Chemins relatifs à la copie 5.8 sauf mention.
|
||
|
||
## Tableau de tête : caméras et réglages relevés
|
||
|
||
| Caméra ou réglage | fichier:ligne | Effet | Appelé par | Valeurs |
|
||
|---|---|---|---|---|
|
||
| **FollowView**, caméra 3e personne (`ACameraActor`, transitoire) | `Source/LifePlay/LPDirectControlSubsystem.cpp:897-941` ; membre `.h:63-64` ; destruction `.cpp:573-577` | crée (`SpawnActor`, `RF_Transient`, `.cpp:910-913`), règle le FOV (`:916`), active (`SetViewTargetWithBlend`, `:922`), place derrière le pawn avec balayage de collision (`:929-938`), lisse (`:939-940`) | **personne** : `FollowCamera` n'apparaît qu'à la déclaration (`.h:43`) et à la définition (`.cpp:897`) ; en-tête `.h:12` « La camera suiveuse n'est pas branchee » ; `Walk` (`.cpp:840-895`) ne l'appelle pas | FOV 70 ; fondu 0,35 s ; tangage borné -55 / -12° ; visée = pawn + 50 cm en Z ; recul 340 cm ; sphère 12 cm sur `ECC_Camera`, recul de 12 cm sur impact ; `VInterpTo` vitesse 8 ; ne se déclenche que si la vue courante a une classe dont le nom contient `Birdview` **et** que le joueur marche (`:904-905`) |
|
||
| **BirdView** (pointeur vers la vue courante) | `LPDirectControlSubsystem.h:66-67` ; `.cpp:903-907` | lu : `PC->GetViewTarget()` mémorisé ; jamais restauré (aucune autre écriture ni lecture, grep `BirdView` : 3 lignes) | code mort (dans `FollowCamera`) | test `GetClass()->GetName().Contains("Birdview")` |
|
||
| Marche du MC : direction prise sur la rotation de contrôle | `LPDirectControlSubsystem.cpp:875-892` | lit `PC->GetControlRotation().Yaw` pour orienter `MoveForward` / `MoveRight` ; ne touche à aucune caméra | `Tick` (ticker cœur, `.cpp:566`) → `Walk` (`:619`), sauf menu ouvert ou scène en cours (`:606`) | pawn = `GI.PlayerCharacter` (`:843`), non possédé : `bRunPhysicsWithNoController` (`:855-857`) ; `MaxWalkSpeed` 180 si < 10 (`:860-862`) ; `bOrientRotationToMovement` (`:868-871`) |
|
||
| **SecondScreen**, `SceneCapture2D` de l'encadré d'appel (vue du monde : caméra à part entière) | `Source/LifePlay/LPSecondScreenSubsystem.cpp:59-112` ; `.h:3-10` | cherche l'acteur nommé `SecondScreen` une fois par monde (`:69-81`), le rend mobile (`:104-108`), le **déplace** devant le visage du contact et l'oriente vers la tête (`:96-109`), règle le **FOV** (`:110`) à chaque image | ticker cœur (`:50`) ; contact = `GI.SecondScreenPerson` (`:22`, `:89-90`), écrit par le BP `GI` (`portage55/L6f/L6f_dump_GI.txt` : 9 lignes) ; acteur posé dans `CentralLondon` (`.h:3`) | distance 80 cm (`:19`) ; FOV 30° (`:20`) ; tête = os `head` (`:23`, `:28-35`) sinon haut de capsule × 0,8 (`:40`) ; axe = avant du contact à plat (`:97-102`) |
|
||
| Réglage joueur **vitesse de caméra** | `Source/LifePlay/LPUserSettings.h:19-31`, `:40-58` ; `.cpp:58-115` | borne (`ClampCameraSpeed`), lit / écrit `GameUserSettings.ini` section `[/Script/LifePlay.LPUserSettings]` clés `CameraSpeed`, `bCameraSpeedSet` ; recopie dans la variable BP `GI.CameraSpeed` (double ou float, `.cpp:12-30`) | `ApplyCameraSpeedAtStartup` ← BP `GI` (`ST/STE/dumps/GI__EventGraph.txt:30143`, `K2Node_CallFunction_448`) ; `SetCameraSpeed` ← `MainMenu` `OnValueChanged(SliderCameraSpeed)` ; `GetCameraSpeed` ← `MainMenu` Construct (`ST/STC/STC-T5-IMPL-BP.md:14`, `:16`) ; lecteurs de `GI.CameraSpeed` : `ST/STE/dumps/Room__EventGraph_V5.txt` (9 lignes `variable 'CameraSpeed'`) | entier 1 à 7, arrondi (`.cpp:60`) ; défaut 3 (`.cpp:10`, `.h:27`) ; poste local : `Saved/Config/WindowsEditor/GameUserSettings.ini:52-54` → `CameraSpeed=4.000000`, `bCameraSpeedSet=True` |
|
||
| Style du slider `SliderCameraSpeed` | `Source/LifePlay/LPSettingsSubsystem.cpp:346-419` | teintes de barre et de poignée seulement, aucune valeur écrite (`:346-347`) | sous-système Settings (habillage du menu) | barre 0,06 / survol 0,12 ; poignée (0,2 ; 0,45 ; 0,9) / survol (0,3 ; 0,55 ; 1) (`:348-351`) |
|
||
| Rangement d'onglet du menu Settings | `LPSettingsSubsystem.cpp:204-209` | une ligne dont le texte contient « camera » va dans l'onglet Général | `RowText` du menu (`:182`) | — |
|
||
| Panneau Clavier : libellés et groupe « Camera » | `Source/LifePlay/LPKeyboardSubsystem.cpp:92`, `:97`, `:165-168` | affichage et remappage : `RotateCamera`, `SwitchCamera`, `LeftRight`, `DownUp`, `ScrollDownUp` rangés dans le groupe 1 « Camera » ; `MoveForward` / `MoveRight` dans « Movement » (`:161-163`) | panneau Clavier (lot clavier) | — |
|
||
| `RotateCamera` (action) | `Config/DefaultInput.ini:107-109` | bouton milieu, Alt gauche, Alt droit | BP `PC` : nœuds `K2Node_InputAction` sans nom d'action dans le dump ; candidat `K2Node_InputAction_50` → `MoveCamera` vrai / faux (`ST/STE/dumps/PC__EventGraph.txt:547-560`), incertain ; BP `Room` : événement personnalisé `RotateCamera` (`Room__EventGraph_V5.txt:697`) | — |
|
||
| `SwitchCamera` (action) | `DefaultInput.ini:118` | touche C (sans modificateur ; `CityMenu` = Ctrl+C, `:102`) | BP `PC` : événements personnalisés `SwitchCamera` (`PC__EventGraph.txt:2532`) et `SwitchCameraDelayed` (`:3358`), appelés aussi par `GI` (`L6f_dump_GI.txt:25111`, `:25113`) ; nœud d'entrée correspondant non identifié par nom | — |
|
||
| `LeftRight`, `DownUp` (axes, vue de dessus) | `DefaultInput.ini:150-153` | flèches | `PC` `InpAxisEvt_DownUp` (`PC__EventGraph.txt:3043`) → `Birdview_C::DownUpBirdview` (`:3092`) ; `InpAxisEvt_LeftRight` (`:3097`) → `Birdview_C::LeftRightBirdView` (`:3117`) ; rappel `LPDirectControlSubsystem.h:3` | échelle ±1 |
|
||
| `ScrollDownUp` (axe, zoom) | `DefaultInput.ini:154` | molette | `PC` `InpAxisEvt_ScrollDownUp` (`PC__EventGraph.txt:715`) → `Birdview_C::ScrollDownUp` (`:743`) ; `Room` : événement `ScrollDownUp` (`Room__EventGraph_V5.txt:394`) | échelle 1 |
|
||
| `CursorX`, `CursorY` (axes souris) | `DefaultInput.ini:161-162` | `MouseX`, `MouseY` | `PC` `InpAxisEvt_CursorX/Y` (`PC__EventGraph.txt:579`, `:583`) ; `CursorY` → `Birdview_C::RotateCamera(DeltaSeconds = AxisValue)` (`:616-620`) et `Birdview_C::CircleCamera` (`:621`), selon `MoveCamera` (`:597-609`) | voir sensibilité et FOV ci-dessous |
|
||
| `MoveForward`, `MoveRight` (axes de marche) | `DefaultInput.ini:155-160` | Z / W / S ; Q / A / D | C++ seulement : `AxisValue` lit les `AxisMappings` directement (`LPDirectControlSubsystem.cpp:47-48`, `:160-179`) | ±1, borné à [-1 ; 1] |
|
||
| Sensibilité souris | `DefaultInput.ini:11`, `:16-18` (et retraits `:8-10`) | `Mouse2D`, `MouseX`, `MouseY` 0,07 ; `MouseWheelAxis` 1 | moteur (`UPlayerInput`) | 0,07 / 1,0 ; lissage `bEnableMouseSmoothing=True` (`:78`) ; capture permanente et verrou (`:91-92`) |
|
||
| Mise à l'échelle par le FOV | `DefaultInput.ini:79` (`bEnableFOVScaling=True`), `:93` (`FOVScale=0.011110`) | multiplie `MouseX` / `MouseY` par `FOVScale × FOV du PlayerCameraManager` | moteur : `UE_5.8/Engine/Source/Runtime/Engine/Private/UserInterface/PlayerInput.cpp:2346-2353` | FOV 90 → × 0,9999 ; FOV 70 → × 0,778 (calcul) ; FOV par défaut du `PlayerCameraManager` 90 (`PlayerCameraManager.cpp:46`), tangage ±89,9 (`:58-59`) |
|
||
| GameMode, GameInstance, carte | `Config/DefaultEngine.ini:8-11` | `GM_C`, `GI_C`, `CentralLondon` (jeu et éditeur) | moteur | aucune ligne `PlayerCameraManagerClass`, `PlayerControllerClass`, `DefaultPawnClass` dans `Config/` (grep § 2, C6) : portées par `GM_C` (BP) |
|
||
|
||
## 1. Objet et périmètre
|
||
Domaine : ce que le C++ du jeu (`Source/`) et la configuration (`Config/*.ini`, réglages utilisateur) font aux caméras :
|
||
création, placement, activation, FOV, suivi du MC, réglages exposés au joueur ; rues (StreetMap) et existence d'une
|
||
logique de caméra de rue. Hors périmètre : graphes BP (CAM-T2), comptes dans les `.uasset` (CAM-T1), copie 5.5,
|
||
`.hyperai/`. Les dumps BP ne servent ici qu'à nommer l'appelant d'une fonction C++ ou d'une action d'entrée.
|
||
Environnement vérifié avant de conclure à une absence : `Source/` présent (Glob `Source/**/*.{cpp,h,cs}` : 98 entrées
|
||
comptées sur la sortie, dont 5 `.cs`) ; moteur 5.8 installé (lecture de `D:\Game\Launcher\Engine\UE_5.8\Engine\Source`
|
||
réussie) ; plugins du jeu présents (Glob `Plugins/*/*.uplugin` : `StreetMap`, `ModdingExtra`, `McpAutomationBridge`,
|
||
`LPAnimCore`) ; addon `D:\Game\LifePlay-Sandbox-5.8` présent.
|
||
|
||
## 2. Commandes et lectures (exactes) avec compte brut
|
||
| # | Commande | Compte brut |
|
||
|---|---|---|
|
||
| C1 | Grep `(?i)camera\|ViewTarget\|SpringArm\|FieldOfView\|FOV\|PlayerCameraManager\|SceneCapture\|Possess`, path `Source`, glob `*.{cpp,h}`, mode count | 88 lignes, 9 fichiers : DirectControl `.cpp` 12, `.h` 4 ; Keyboard `.cpp` 4 ; OutdoorRoom `.h` 1 ; SecondScreen `.cpp` 11, `.h` 6 ; Settings `.cpp` 3 ; UserSettings `.cpp` 29, `.h` 18 ; **0 dans `Source/LifePlayEditorTools`** |
|
||
| C1b | Recompte : `git grep -n -i -E "<même motif>" -- "Source/*.cpp" "Source/*.h" \| wc -l` puis `git grep -c …` | 88 ; mêmes 9 fichiers, mêmes comptes |
|
||
| C2 | Grep `(?i)street\|CityExpansion\|Birdview\|ControlRotation\|CameraManager\|ViewPoint\|ProjectWorldLocationToScreen\|DeprojectScreen\|ViewLocation\|ViewRotation\|AutoScreenshot\|Screenshot\|HighResShot`, path `Source`, count | 61 lignes, 10 fichiers ; `Source/LifePlay` : 22 lignes (lues) ; `LifePlayEditorTools` : 39 (`LPCheckStreetMapCommandlet.cpp` 31, `.h` 6, `LPCheckMeshesCommandlet.h` 2, commentaires de chemins StreetMap) ; `CityExpansion`, `Screenshot`, `CameraManager`, `ViewPoint`, `Deproject` : 0 |
|
||
| C3 | Grep motif C1 sur `Plugins` (path `Plugins`) | 0 : `McpAutomationBridge` sauté (ignoré par git) ; recompté par plugin : C3b-C3e |
|
||
| C3b | Grep `(?i)camera\|view\|fov\|capture\|possess` sur `Plugins/StreetMap/Source` | 32 lignes, toutes `FSceneView` / `DetailsView` (`StreetMapSceneProxy.cpp:94-201`, `.h:92-101`, `StreetMapComponentDetails.*`) : rendu et éditeur |
|
||
| C3c | Grep motif C1 sur `Plugins/LPAnimCore`, puis `Plugins/ModdingExtra` | 0 ; 0 |
|
||
| C3d | Grep motif C1 sur `Plugins/McpAutomationBridge` (path explicite) | 783 lignes, 105 fichiers : outil d'automatisation MCP de l'éditeur, hors jeu |
|
||
| C4 | Grep motif C1 sur `D:\Game\LifePlay-Sandbox-5.8\Plugins` | 152 lignes, 11 fichiers (§ 3.6) |
|
||
| C5 | Glob `Config/*.ini` | 6 : `DefaultEditorSettings`, `DefaultInput`, `DefaultEngine`, `DefaultScalability`, `DefaultEditor`, `DefaultGame` ; **pas de `DefaultGameUserSettings.ini`** |
|
||
| C6 | Grep `(?i)camera\|fov\|fieldofview\|GameMode\|PlayerController\|DefaultPawn\|GameInstance\|ViewTarget\|SpringArm\|SceneCapture\|Possess\|MapsAndModes\|GameDefaultMap\|ViewportClient\|LocalPlayer\|aspect\|SplitScreen` sur `Config` | 11 lignes : `DefaultEngine.ini:8,9,10` ; `DefaultInput.ini:79,93,107,108,109,118` ; `DefaultEditor.ini:4,5` |
|
||
| C7 | Read `Config/DefaultInput.ini` (171 lignes), `DefaultEngine.ini:1-40`, `DefaultGame.ini` (82 lignes) | `DefaultGame.ini` : aucune ligne caméra |
|
||
| C8 | Glob `Saved/Config/**/GameUserSettings.ini` ; Grep `LPUserSettings\|camera\|fov` dedans | 1 fichier (`WindowsEditor`) ; section `:52-54` |
|
||
| C9 | Grep `ApplyCameraSpeedAtStartup\|SetCameraSpeed\|GetCameraSpeed\|ClampCameraSpeed` sur `Docs/Migration/etat` (`*.txt`) | 10 fichiers, 1 ligne chacun : toujours `ApplyCameraSpeedAtStartup` dans des dumps `GI` ; `SetCameraSpeed` / `GetCameraSpeed` absents des dumps `.txt`, présents dans 9 `.md` (55 lignes, lot STC / STF) |
|
||
| C10 | Grep `RotateCamera\|SwitchCamera\|ScrollDownUp\|LeftRightBirdView\|DownUpBirdview\|…CursorX\|CursorY` sur `etat` (`*.txt`), count | 34 lignes, 10 fichiers ; lues dans `PC__EventGraph.txt` (9), `Room__EventGraph_V5.txt` (2), `L6f_dump_GI.txt` (2) |
|
||
| C11 | Grep `InpActEvt_(RotateCamera\|SwitchCamera)\|InpAxisEvt_(LeftRight\|DownUp\|ScrollDownUp\|MoveForward\|MoveRight)` sur `etat` | 0 fichier (les axes s'écrivent `InpAxisEvt_<Axe>_K2Node…` : retrouvés par C10 ; les actions n'ont pas de nom dans le dump) |
|
||
| C12 | Grep `variable 'CameraSpeed'` sur `etat` (`*.txt`) ; `SecondScreenPerson` | 139 lignes / 31 fichiers (dont `Room__EventGraph_V5.txt` 9) ; 18 lignes / 2 fichiers (`L6f`) |
|
||
| C13 | Lectures moteur : `PlayerInput.cpp:2336-2353` ; Grep `DefaultFOV\s*=\|ViewPitchMin\s*=\|ViewPitchMax\s*=` sur `PlayerCameraManager.cpp` | `:46` 90, `:58` -89,9, `:59` 89,9 |
|
||
|
||
## 3. Constats `fichier:ligne`
|
||
|
||
### 3.1 Classement des 88 lignes de C1
|
||
| Fichier | Lignes | Classe | Motif |
|
||
|---|---|---|---|
|
||
| `LPDirectControlSubsystem.h` | 12, 19, 43, 64 | caméra de vue (non branchée) | commentaire, include, déclaration `FollowCamera`, membre `FollowView` |
|
||
| `LPDirectControlSubsystem.cpp` | 15, 16, 897, 903, 913, 914, 916, 918, 922, 925, 934, 935 | caméra de vue (non branchée) | includes, corps de `FollowCamera` (le `SCENE_QUERY_STAT(WalkCamera)` de `:934` est l'étiquette du balayage) |
|
||
| `LPSecondScreenSubsystem.h` | 3, 5, 7, 10, 19, 34 | caméra de vue (SceneCapture) | commentaires, déclaration, pointeur `Capture` |
|
||
| `LPSecondScreenSubsystem.cpp` | 6, 9, 18, 20, 68, 73, 82, 83, 103, 109, 110 | caméra de vue (SceneCapture) | recherche, placement, FOV |
|
||
| `LPUserSettings.h` | 1, 3, 4, 5, 7, 8, 25, 27, 29, 31, 42, 45, 46, 50, 52, 54, 56, 58 | réglage | vitesse de caméra |
|
||
| `LPUserSettings.cpp` | 10, 12, 14, 16, 19, 22, 25, 42, 58, 63, 66, 72, 74, 77, 78, 81, 83, 85, 86, 88, 92, 94, 95, 101, 105, 106, 108, 111, 114 | réglage | vitesse de caméra |
|
||
| `LPSettingsSubsystem.cpp` | 204, 346, 405 | réglage (UI du menu) | rangement d'onglet, style du slider |
|
||
| `LPKeyboardSubsystem.cpp` | 92, 97, 166, 168 | réglage (UI du panneau Clavier) | libellés et groupe « Camera » |
|
||
| `LPOutdoorRoomSubsystem.h` | 6 | hors sujet (visibilité du plafond) | « vu de la camera » dans un commentaire ; utile à C3 (§ 3.5) |
|
||
Total : caméra de vue 33 (4 + 12 + 6 + 11), réglage 54 (18 + 29 + 3 + 4), hors sujet 1 = 88.
|
||
|
||
### 3.2 Caméras de vue en C++
|
||
- **Aucune caméra C++ ne suit le MC en jeu** : la seule qui le ferait (`FollowView`) n'est jamais appelée (grep `FollowCamera`
|
||
sur le `.cpp` : 1 ligne, `:897` ; sur le `.h` : `:43`), et `Walk` se termine sans appel (`.cpp:893-895`). Le commentaire
|
||
d'en-tête le dit (`LPDirectControlSubsystem.h:12`). `FollowView` est bien détruite à l'arrêt du sous-système (`.cpp:573-577`).
|
||
- Aucun `SpringArm`, `PlayerCameraManager`, `Possess`, `SetViewTarget` hors `FollowCamera` dans `Source/` (C1 : les seules
|
||
lignes `ViewTarget` sont `.cpp:903`, `:922`, `:925`).
|
||
- La marche dépend de la rotation de contrôle du PC, pas de la caméra (`.cpp:887-891`) ; le pawn n'est pas possédé (`.h:10`,
|
||
`.cpp:855-857`). Le Tick saute la marche pendant un menu ou une scène (`.cpp:606-621`, `ScenePlaying` lit `GI.CurrentScene`, `:456-465`).
|
||
- `SecondScreen` est la seule caméra déplacée par le C++ ; elle suit le **contact** de l'appel, pas le MC (`LPSecondScreenSubsystem.cpp:89-109`).
|
||
- Captures d'écran : `AutoScreenshot`, `Screenshot`, `HighResShot` : 0 ligne dans `Source/` (C2).
|
||
|
||
### 3.3 Réglages du joueur
|
||
- Seul réglage caméra porté par le C++ : **vitesse de caméra**, entier 1 à 7, défaut 3, clé `CameraSpeed` + drapeau
|
||
`bCameraSpeedSet` dans `GameUserSettings.ini` (`LPUserSettings.h:19-31`) ; l'ini fait foi, `GI.CameraSpeed` en est la
|
||
recopie, `GameSettings.sav` garde aussi un champ `CameraSpeed` (`LPUserSettings.h:3-8`). Écriture seulement si la valeur
|
||
change (`.cpp:99-104`).
|
||
- Aucun réglage de FOV, de sensibilité, de vue par défaut ou de second écran dans `Source/` ni dans `Config/` (C1, C6) ;
|
||
la sensibilité souris est fixe dans `DefaultInput.ini:16-17` (0,07).
|
||
- Le panneau Clavier permet de remapper les touches des actions et axes du groupe « Camera » (`LPKeyboardSubsystem.cpp:165-168` ;
|
||
`IsRemappable` exclut axes et manette, `:75-78`).
|
||
|
||
### 3.4 Configuration : classement des lignes de C6 et des lignes liées à la vue
|
||
| Ligne | Classe |
|
||
|---|---|
|
||
| `DefaultEngine.ini:8` `GlobalDefaultGameMode=/Game/BPs/GM.GM_C`, `:9` `GameInstanceClass=/Game/BPs/GI.GI_C`, `:10` `GameDefaultMap=…CentralLondon` | réglage (porte d'entrée : la classe de caméra, de PC et de pawn est dans `GM_C`) |
|
||
| `DefaultInput.ini:79` `bEnableFOVScaling=True`, `:93` `FOVScale=0.011110` | réglage lié à la vue (sensibilité souris × FOV) |
|
||
| `DefaultInput.ini:107-109` `RotateCamera`, `:118` `SwitchCamera` | caméra de vue (entrées) |
|
||
| `DefaultEditor.ini:4-5` (section `[/Script/AdvancedPreviewScene.SharedProfiles]`, `:3`) `CameraShutterSpeed`, `ApplyPhysicalCameraExposure` | hors sujet (post-traitement de l'aperçu d'assets de l'éditeur) |
|
||
Lignes lues en plus (liées à la vue) : `DefaultInput.ini:150-154` (`LeftRight`, `DownUp`, `ScrollDownUp`), `:161-162`
|
||
(`CursorX`, `CursorY`), `:155-160` (`MoveForward`, `MoveRight`), `:11`, `:16-18`, `:78`, `:91-92` (souris). Hors sujet :
|
||
`:95-96` `ActionX` / `ActionY` sur `MouseX` / `MouseY` (le `PC` a des événements `OpenActionXY` / `CloseActionXY`,
|
||
`PC__EventGraph.txt:391`, `:398` : menu d'action, estimé). `DefaultGame.ini` : rien sur la vue (C7).
|
||
Conflits de touches relevés (constat) : `C` = `SwitchCamera`, `Ctrl+C` = `CityMenu` (`:102`, `:118`) ; `PageUp` / `PageDown`
|
||
servent à la fois `NextBuilding` / `PreviousBuilding` (`:119-120`) et l'axe `PenisRotation` (`:163-164`).
|
||
|
||
### 3.5 Pièces et plafond (utile à la caméra C3)
|
||
- Chaque lieu est l'acteur `GI.Room` ; échelle Z de sa racine 0,2 à 0,4 en intérieur, 0,01 pour les 7 lieux extérieurs ; plafond
|
||
`WallT` à Z relatif 2040, sans collision (`LPOutdoorRoomSubsystem.h:3-6`). Le sous-système masque `WallT` si l'échelle Z
|
||
< 0,05 (`.cpp:14`, `:55-60`) et le rend sinon (`:62-66`).
|
||
- Hauteur de plafond au-dessus de la racine : 2040 × 0,2 à 0,4 = 408 à 816 cm (estimé, calcul ; la cote Z de la racine et
|
||
du sol n'est pas lue ici).
|
||
|
||
### 3.6 Rues
|
||
- Construction : plugin `StreetMap` (import OSM) ; asset `UStreetMap` (`Plugins/StreetMap/Source/StreetMapRuntime/Public/StreetMap.h:385`)
|
||
avec routes `FStreetMapRoad` (type `:159`, points **2D** `TArray<FVector2D> RoadPoints` `:167`, bornes `:173-177`), nœuds
|
||
(`:253-260`), bâtiments (`BuildingPoints` 2D `:302`, hauteur en mètres `:304-306`, `Amenity` `:314`), eau, parcs ; recherche
|
||
`FindBuilding`, `SearchByAmenity` (`:474-491`). Assets de jeu `/Game/Heavy/StreetMap/CentralLondon` et
|
||
`/Game/Heavy/StreetMap/Static/CentralLondon` (`Source/LifePlay/LPDataCompat.cpp:274-275`) ; 280 villes
|
||
(`Source/LifePlayEditorTools/LPCheckStreetMapCommandlet.h:6`). Le C++ lit `GI.StreetMapStatic.CurrentPlayerBuilding`
|
||
(`LPDirectControlSubsystem.cpp:388-394`) pour les actions de bâtiment. `CityExpansion` : 0 ligne dans `Source/` (C2) ;
|
||
c'est un asset BP (cité parmi `BPs/GI`, `BPs/PC`… dans `etat/U58/UA/UA-PLUGINS.md:135`) : CAM-T1 / CAM-T2.
|
||
- **Logique de caméra de rue en C++ : aucune.** Preuves : C1 ne touche aucun fichier de rue (les 9 fichiers sont listés en
|
||
§ 3.1, aucun ne lit `StreetMap`) ; C2 : les lignes « street » de `Source/` sont un préchargement (`LPDataCompat`), un
|
||
compteur de primitives (`LPDebugSubsystem.cpp:118-254`), une lecture de bâtiment (`LPDirectControlSubsystem.cpp:388-394`)
|
||
et deux commandlets de vérification, sans caméra ; C3b : dans le plugin `StreetMap`, les seules lignes « view » sont la
|
||
pertinence de rendu `FSceneView` du proxy (`StreetMapSceneProxy.cpp:94-201`) et la vue de détails de l'éditeur.
|
||
L'existence d'une caméra de rue côté BP ou carte n'est pas tranchée ici (CAM-T1, CAM-T2).
|
||
|
||
### 3.7 Addon `D:\Game\LifePlay-Sandbox-5.8` (signalé, non cartographié)
|
||
Touche aux caméras : 152 lignes, 11 fichiers sous `Plugins/LPSandbox/Source/LPSandbox/` : `LPSandboxCamera.cpp` (19), `.h` (6),
|
||
`LPPairSandbox.cpp` (9), `.h` (9), `LPSandboxActors.cpp` (1), `LPSandboxCoupleMod.cpp` (5), `LPSandboxInteraction.cpp` (16),
|
||
`LPSandboxMeasure.cpp` (54), `LPSandboxMeasureMod.h` (11), `LPSandboxMeasureTour.cpp` (18), `LPSandboxMod.h` (4).
|
||
`LPSandboxCamera.h:1-25` : composants `Arm` (SpringArm) et `Camera` sur le pawn `ALPPairSandboxCharacter`, tangage -50 / 30,
|
||
vue par défaut bras 2,5 m, -15 / -135°. Le jeu ne cite l'addon que par nom de classe pour sauter l'animation de marche
|
||
(`LPDirectControlSubsystem.cpp:878-880`, `LPPairSandbox`).
|
||
|
||
## 4. Établi / estimé / incertain
|
||
- **Établi** : 88 lignes C1 classées (§ 3.1, recompte C1b) ; `FollowCamera` jamais appelée ; seule caméra déplacée par le C++ =
|
||
`SecondScreen` (80 cm, FOV 30) ; seul réglage caméra = vitesse 1-7 défaut 3 dans `GameUserSettings.ini` ; appelants C++ ←
|
||
BP : `ApplyCameraSpeedAtStartup` ← `GI` (`GI__EventGraph.txt:30143`) ; aucune ligne de classe caméra / PC / pawn dans
|
||
`Config/` ; mise à l'échelle souris par le FOV (moteur `PlayerInput.cpp:2346-2353`, ini `:79`, `:93`) ; aucune caméra de
|
||
rue en C++ (§ 3.6) ; vue de dessus pilotée par le BP `Birdview_C` appelé par `PC` (`PC__EventGraph.txt:616`, `:743`, `:3092`, `:3117`).
|
||
- **Estimé** : la caméra de jeu courante est l'acteur BP `Birdview` tenu par `GI.Birdview` (`PC__EventGraph.txt:610-615`) ;
|
||
`GI.CameraSpeed` règle la rotation / le zoom dans `Room` (9 lectures dans `Room__EventGraph_V5.txt`, non lues) ; facteur souris
|
||
≈ 1,0 à FOV 90 (calcul) ; plafond intérieur 408-816 cm au-dessus de la racine de `Room` (calcul § 3.5) ; `ActionX/Y` hors sujet.
|
||
- **Incertain** : quel `K2Node_InputAction` du `PC` écoute `RotateCamera` / `SwitchCamera` (noms absents du dump ; essai :
|
||
`get_node_infos` MCP ou `LPDumpFunction -BP=PC` avec nom d'action) ; classe de `PlayerCameraManager`, PC, pawn par défaut
|
||
de `GM_C` (essai : `LPDumpCDO -List=GM`) ; si la rotation de contrôle du PC est tenue à jour par le BP (direction de marche,
|
||
essai en jeu ou lecture de `Birdview_C`).
|
||
|
||
## 5. Points à confirmer (repris par la fiche suivante)
|
||
1. CAM-T2 : graphes `Birdview_C` (`RotateCamera`, `CircleCamera`, `ScrollDownUp`, `DownUpBirdview`, `LeftRightBirdView`), `PC`
|
||
(`SwitchCamera`, `SwitchCameraDelayed`, `MoveCamera`), `Room` (`RotateCamera`, `ScrollDownUp`, lectures `CameraSpeed`).
|
||
2. CAM-T2 : nœud d'entrée de chaque action `RotateCamera` / `SwitchCamera` (§ 4 incertain).
|
||
3. CAM-T1 : `GM_C` (classes PC, pawn, `PlayerCameraManager`), composants caméra de `PlayerCharacter`, acteur `SecondScreen`
|
||
de `CentralLondon` et sa cible de rendu, `ChargenCameras` / `CameraComponent` du `MainMenu`
|
||
(`ST/STB/dumps/MainMenu__EventGraph.txt:1540-1564`), BP `CityExpansion`.
|
||
4. Qui appelle `SetViewTarget*` côté BP (le C++ ne le fait que dans le code mort).
|
||
5. Cote Z réelle du sol et du plafond d'une pièce (pour C3 : contrainte « < 3 m au-dessus du MC »).
|
||
|
||
## 6. Questions pour la SPEC ou l'utilisateur
|
||
- Q1 : C3 « au plafond, au centre de la pièce » et « toujours < 3 m au-dessus du MC » : le plafond estimé est à 4-8 m au-dessus
|
||
de la racine de `Room` (§ 3.5) ; laquelle des deux règles prime quand elles s'opposent ?
|
||
- Q2 : C2 « à 1,75 m » : distance au MC ou hauteur de caméra ? (le code mort existant recule de 340 cm, FOV 70).
|
||
- Q3 : la touche C (`SwitchCamera`) et ses événements BP existent déjà : doivent-ils servir à passer de C1 à C2 à C3 ?
|
||
- Q4 : la vitesse de caméra (1-7) doit-elle régler les nouvelles caméras ? Faut-il un réglage de FOV ou de sensibilité
|
||
exposé au joueur (aucun aujourd'hui) ?
|
||
- Q5 : caméras de rue en enfilade : quelle ville, le long des `RoadPoints` (2D, sans hauteur) de `UStreetMap` ou d'acteurs
|
||
posés dans la carte ?
|
||
- Q6 : la caméra du second écran (suit le contact, pas le MC) reste-t-elle hors du lot ?
|
||
|
||
Tours : 27 / 60
|