7.1 KiB
CAM-B2p-F-IMPL : intérieur réel de la pièce, pose libre, focus clavier (C++, 2026-10-14)
GO : Big Boss, 2026-10-14 (« GO pour B2p-F (F1 à F5, G1, G2, H1, H2) »). G3 est attribué à STE. DIAG :
CAM-COMMUN9-DIAG.md § 6. Écriture sans UE ni compilation ; le lot entre dans COMMUN-11.
Instantané : D:\Game\LifePlay_Backup_5.5\CAM-B2p-F\ (.cpp FFF0FBB4…, .h 0EDC1F76…, état jusqu'à B2p-E).
| Fichier | Avant | Après |
|---|---|---|
Source/LifePlay/LPCameraModeSubsystem.cpp |
FFF0FBB45D493B931B08780BF09547C8, 1163 lignes |
8C6A3D719FBC60900CC35BAD46BF6D51, 1426 lignes |
Source/LifePlay/LPCameraModeSubsystem.h |
0EDC1F76B7EEC0D135EA046DA2269BE0, 121 lignes |
3DF4B51155A42BCC0F99FCC26CFD4F6E, 130 lignes |
Fins de ligne : LF (0 CR).
1. Écritures
- Includes :
Engine/OverlapResult.h,Widgets/Input/SEditableText.h. - Constantes :
- noms :
WallPrefix(Wall),RoomAllComponents; RoomStructureCount(6) ;- critères de mur (plus de 100 cm de haut ; petit côté sous le quart du grand) ;
- critères de plafond (moins de 50 cm d'épaisseur, plus de 150 cm au-dessus du sol) ;
RootHalfSizePerScale(50 cm par unité d'échelle) ;CoupleWallMargin(80 cm, G2) ;CoupleProbeExtent(78 × 46 × 50) etCoupleProbeAboveRoot(58 cm, G1) ;CoupleHeadroom(120 cm entre la racine la plus haute et le plafond).
- noms :
FRoomInterioretComputeRoomInterior(F1) :- base : la boîte du sol (
Room.Box) ; - murs : composants de Room dont le nom commence par
Wall, hauts et minces. Chacun resserre la borne de son côté par rapport au centre du sol ; - repli 1 :
AllComponents[0..5]avec les mêmes critères ; - repli 2 : demi-côté d'échelle de la racine (±échelle × 50 cm autour de Room), dans la boîte du sol ;
- plafond : un composant mince en Z et à plus de 150 cm au-dessus du sol (dans les murs ou la structure). Sinon, sol + 350 cm ;
- incohérence (bornes croisées) : retour à la boîte du sol, source notée.
- base : la boîte du sol (
CoupleSpotFree(G1) :OverlapMultiByChannel, canal Pawn, boîte 78 × 46 × 50 orientée selon le lacet du meneur, centre à la racine du maillage + 58 cm ;- seuls comptent les recouvrements bloquants de composants de Room. Le couple et le sol sont ignorés, et les lits
sont admis (même règle que
IsBedMeshde STE).
FocusedEditable: un widget de texte qui a le focus clavier.TickCoupleBounds(E1 avec F1, F2, F4) :- l'intérieur réel remplace la boîte du sol, avec une marge de 80 cm ; si la pièce est plus étroite que deux marges, le couple va au centre de ce côté ;
- Z : plancher inchangé ; borne haute = plafond − 120 cm ;
- F2 : une ligne par scène,
Sexe : bornes du couple X [..] Y [..] sol .. plafond .. (marge 80) ; source .., murs n, plafond trouve 0|1 ; sol Box X [..] Y [..] ; echelle racine (sx, sy); - F4 : l'image où une prise vient de finir n'est pas comptée par le témoin « hors prise » ;
- ligne de correction :
plafond .. (racine au plus ..).
TickCoupleMouse(F3, G1, G2) :- le glisser est borné par le même intérieur, avec la même marge de 80 cm ;
- avant chaque déplacement,
CoupleSpotFreeà la place visée. Si elle n'est pas libre, le couple ne bouge pas, et une ligneSexe : place refusee, recouvre <composant>est écrite à chaque changement de composant ; - une prise qui part d'une place encombrée peut aller vers toute place libre ;
bGrabJustEndedest posé au relâcher.
TickSexCamera(H1, H2), avant la garde de menu, pendant le sexe :- H1 : si un champ de texte a le focus et qu'un bouton de souris vient d'être enfoncé dans la vue (vu par le
PlayerInput, donc hors interface), le focus est rendu au viewport (FSlateApplication::SetAllUserFocusToGameViewport) et le menu est recalculé tout de suite ; - H2 : à la première image du sexe, un
SEditableTextvide qui a le focus le rend une fois ; - ligne :
Sexe : focus clavier rendu a la vue (<raison>, champ <type>).
- H1 : si un champ de texte a le focus et qu'un bouton de souris vient d'être enfoncé dans la vue (vu par le
.h:bGrabJustEnded,bBoundsLogged,LastSpotBlocker,bSceneFocusChecked,bFocusClickWasDown.
2. Écarts et limites
CoupleFloorMargin(30 cm) n'est plus utilisé. On le laisse pour ne pas élargir le diff ; on le retirera au nettoyage.- Plafond : la borne haute porte sur la racine du maillage (pieds). Plafond − 120 cm laisse la place d'un corps assis ou allongé. Avec le plafond estimé (sol + 350), la borne passe à sol + 230 (avant : sol + 350).
- G3 (dégagement côté résolveur de STE) n'est pas appelé : la fonction de STE n'existe pas encore. Nom et signature
proposés :
void ULPShowCoupleSubsystem::NotifyCoupleTeleported(), publique, sans paramètre. Elle reprendLastSafeà la position actuelle du meneur. Appel prévu dansTickCoupleMouseaprès un déplacement validé par G1, dès que STE l'aura livrée (une ligne). - Le recalcul de l'intérieur à chaque image parcourt les composants de Room (quelques dizaines). C'est un coût faible, seulement pendant le sexe.
2 bis. Ajout G3 (appel au contrat de STE, 2026-10-14, après la VAL de B2p-F)
Contrat STE-G3 (VAL PASS-STATIC chez STE), relayé par Big Boss : void ULPShowCoupleSubsystem::NotifyCoupleTeleported();,
publique, sans paramètre (fichiers STE vérifiés sans les toucher : .h 44C721EE…, .cpp 3CDD572D…).
Instantané avant cet ajout : D:\Game\LifePlay_Backup_5.5\CAM-B2p-F-G3\ (.cpp 8C6A3D71…, .h 3DF4B511…).
| Fichier | Avant (B2p-F validé) | Après |
|---|---|---|
LPCameraModeSubsystem.cpp |
8C6A3D719FBC60900CC35BAD46BF6D51, 1426 lignes |
03D85D282A6306E6D2494D7DC2C253FC, 1437 lignes |
LPCameraModeSubsystem.h |
3DF4B51155A42BCC0F99FCC26CFD4F6E, 130 lignes |
4AE6599447750371CFF7E0AAC74EB93E, 132 lignes |
#include "LPShowCoupleSubsystem.h"..h: membreGrabLeadStart, la place du meneur (Couple[0]) au moment de la prise.- Au relâcher d'une prise (dans le bloc « relâcher » de
TickCoupleMouse), si le meneur est à plus de 1 cm deGrabLeadStart:GI->GetSubsystem<ULPShowCoupleSubsystem>()->NotifyCoupleTeleported(), une seule fois par pose. Il n'y a jamais d'appel à chaque image d'un glisser. - Choix pour la rotation (mode 2) : la même règle « le meneur a bougé » sert pour les deux modes.
- Si la rotation ne déplace pas le meneur (les deux corps à la même place, cas habituel), il n'y a pas d'appel.
- Si elle le déplace (pivot hors du meneur), il y a un appel au relâcher.
3. Points à confirmer en V7 (COMMUN-11)
- Ligne F2 :
- source « murs Wall* » attendue ;
- bornes X et Y à l'intérieur de celles de
Box; - plafond trouvé ou non.
- G1 :
- les lits ne sont pas refusés ;
- les meubles et les murs le sont ;
- un couple coincé se dégage vers une place libre (complet seulement avec G3).
- H1 et H2 : ZQSD remarche après un clic dans la vue ; un clic dans le champ y remet le focus.
- Compilation (
/we4458, etc.). - Essais CAM-69 à CAM-75.
4. Fichiers à commiter
A Source/LifePlay/LPCameraModeSubsystem.cpp et .h ; A CAM-B2p-F-IMPL.md, CAM-B2p-F-VAL.md ;
CAM-COMMUN9-DIAG.md.