LifePlay-Revival/Docs/Migration/etat/CAM/CAM-B2r-IMPL.md
edujiro5972 8084622450 LifePlay UE 5.8 : état de développement au 2026-10-19
Tickets : REP1-T4

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-19 22:57:42 +02:00

3.7 KiB

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.