58 lines
3.7 KiB
Markdown
58 lines
3.7 KiB
Markdown
# CAM-B2r-IMPL (2026-10-14, session CAM, GO Big Boss : écriture sans UE ni compilation ; compilation en COMMUN-7)
|
|
|
|
Fiche : `CAM-B2r-FICHE.md`. Instantané : `D:\Game\LifePlay_Backup_5.5\CAM-B2r\` (manifest : `.cpp`
|
|
`FE9236BD138A46BBC2B63027977B3CD9`, `.h` `7DA111CB65B267A9E2F7482CBA368BE9`).
|
|
|
|
| Fichier | Avant | Après |
|
|
|---|---|---|
|
|
| `Source/LifePlay/LPCameraModeSubsystem.cpp` | `FE9236BD…`, 503 lignes | `124336D3293EF06BEFCF076D10956234` |
|
|
| `Source/LifePlay/LPCameraModeSubsystem.h` | `7DA111CB…`, 66 lignes | `61A3E06280BF7226ADB52ECFDD9173DE` |
|
|
|
|
Fins de ligne : LF avant et après (0 CR).
|
|
|
|
## Écritures
|
|
- `LPCameraModeLocal` :
|
|
- nouveaux noms `GICharGenOn`, `GIMainMenuOn`, `GIJournalOn`, `GIContactsOn`, `PCMoveCamera`, `MainMenuClass`,
|
|
`RoomCameraLabels`, `LabelC1`, `PlayerFirstPersonSM`, `PlayerOccupyingFnt`, `RoomCamTimer`, `LeftEyeSocket`,
|
|
`RightEyeSocket` ;
|
|
- nouvelles constantes `CharGenRepairDelay` (10 s), `C1Interval` (0,5 s), `C1LogInterval` (1 s), `C1MaxEyeDistance`
|
|
(8 cm), `C1MaxPitch` (25°), `C1MaxYawGap` (30°) ;
|
|
- nouvelles fonctions `WriteBool`, `TimerActive` (`FTimerHandle` par réflexion, `IsTimerActive`) et
|
|
`WidgetOnScreen` (une classe de widget précise).
|
|
- `#include "TimerManager.h"`.
|
|
- `Tick` : appel de `RepairAfterCharGen(Label, bMenu, DeltaTime)` avant toute sortie ; `WitnessC1` quand le libellé
|
|
est C1.
|
|
- **R1** `RepairAfterCharGen` :
|
|
- si `CharGenOn` est vrai, on arme ;
|
|
- après CharGen, si le libellé est une caméra de pièce (C1, C2, C3 plafond, C3 ancienne) et qu'aucun menu n'est à
|
|
l'écran : `SpaceOn` est remis à vrai s'il était faux, et `MainMenuOn` à faux s'il était vrai sans widget
|
|
`MainMenu_C` à l'écran ;
|
|
- une ligne au journal à chaque remise ; une seule réparation ;
|
|
- au bout de 10 s sans caméra de pièce : abandon, avec une ligne au journal.
|
|
- **R2** `LogSwitchKey` : fin de ligne `; MainMenuOn=%d JournalOn=%d ContactsOn=%d CharGenOn=%d MoveCamera=%d`.
|
|
- **R3** `WitnessC1` : toutes les 0,5 s ; une ligne (au plus une par seconde) si la caméra est à plus de 8 cm des
|
|
yeux, si son tangage dépasse ±25°, ou si son lacet s'écarte de plus de 30° du contrôle. La ligne donne aussi
|
|
« assis » et l'état de la minuterie `RoomCamTimer`.
|
|
- `.h` : `RepairAfterCharGen`, `bCharGenSeen`, `CharGenRepairTimeout`, `WitnessC1`, `C1Cooldown`.
|
|
|
|
## Écart à la fiche
|
|
- Le critère « vue = caméra de pièce » utilise le libellé déjà calculé par `ComputeLabel`. Il recouvre exactement
|
|
les quatre cas de la fiche et exclut `Birdview` (« Camera: Overview »). On n'attend pas non plus la fermeture
|
|
des menus, pour ne pas écrire pendant un menu.
|
|
- R3 : si l'axe de visée de `FirstPerson_C` n'est pas son X local, le témoin écrira une ligne par seconde en C1
|
|
(bruit, sans effet sur le jeu). À voir à l'essai ; le seuil se règle dans les constantes.
|
|
|
|
- Écarts relevés par la VAL (`CAM-B2r-VAL.md`, C-1 et C-2), acceptés par l'orchestrateur :
|
|
- C-1 : les lignes « CharGen : … » donnent aussi l'indicateur (`indicateur '%s'`), en plus de la vue ;
|
|
- C-2 : l'état de la minuterie est lu par `FTimerManager::IsTimerActive` (C++), et non par
|
|
`K2_IsTimerActiveHandle` (sa version Blueprint). Même résultat, sans passer par Kismet.
|
|
- Réserves non bloquantes laissées en l'état (VAL C-3 à C-6) :
|
|
- le délai de 10 s s'écoule aussi pendant un menu ;
|
|
- le témoin C1 devient bruyant si les douilles des yeux manquent ;
|
|
- le test du widget `MainMenu_C` est redondant ;
|
|
- l'en-tête du fichier porte encore « CAM-B2c ».
|
|
|
|
On les reprendra si l'essai le demande : modifier le code maintenant changerait les MD5 validés.
|
|
|
|
## Non fait (hors GO)
|
|
Compilation (COMMUN-7, sous jeton UE). Aucune autre écriture.
|