6.1 KiB
CAM-B2p-D-IMPL : couple à la souris pendant le sexe (C++, 2026-10-14)
GO : Big Boss, 2026-10-14 (« GO pour B2p-D, C++ seul »), après les demandes de l'utilisateur. SPEC :
CAM-B2p-SPEC.md § 7 et § 7.11. Écriture sans UE ni compilation ; compilation dans COMMUN-8 si la VAL passe à temps.
Instantané : D:\Game\LifePlay_Backup_5.5\CAM-B2p-D\ (.cpp 8E35E07A…, .h 9E20981F…, état B2r + B2p-C).
| Fichier | Avant | Après |
|---|---|---|
Source/LifePlay/LPCameraModeSubsystem.cpp |
8E35E07AE08F3F208A24DC4CF2B3338F, 820 lignes |
D60632646BF1CF7D200E3BEA833D8D72, 1044 lignes (après la reprise D-1 ; première version 3DB310DC…, 1042 lignes) |
Source/LifePlay/LPCameraModeSubsystem.h |
9E20981F8C768371A0935E2C7CE9E134, 84 lignes |
6585D7F67A7BE3AEA377B8E93CFA14D8, 112 lignes |
Fins de ligne : LF (0 CR).
1. Écritures
- Constantes (
LPCameraModeLocal) :- noms :
PelvisSocket(pelvis),RoomFloor(Box) ; - sélection à 120 px, seuil de glisser à 5 px ;
- rotation à 0,3° par pixel ;
- marge au bord du sol : 30 cm ;
- tracé du curseur : 5000 cm ;
- tracé vertical : de pivot + 150 à pivot − 400 cm.
- noms :
TickSexCamera:- hors sexe, pendant un menu ou sans vue valide :
ReleaseCoupleGrab()(aucune prise ; le témoin du curseur est remis à zéro hors sexe) ; PCn'est plusconst;- appelle
TickCoupleMouseavant ZQSD. Pendant une prise, ZQSD ne déplace pas la caméra ; - le témoin « Sexe : touches » écrit aussi les boutons G et D, la prise en cours et le lacet du couple
(
SexPersons[0]). Il écrit aussi une ligne quand seul un bouton est tenu.
- hors sexe, pendant un menu ou sans vue valide :
TickCoupleMouse(nouveau) :- mode Scene seulement : couple non vide, vue hors du couple,
PC.POVOnfaux. Sinon, aucune prise ; - front montant du bouton gauche ou droit :
GetMousePosition. Sans position, une ligne par scène :Sexe : curseur sans position, prise du couple indisponible. Sélection si le curseur est à 120 px au plus du segment bassin-tête projeté (ProjectWorldLocationToScreen) d'une des personnes. Aucun tracé de collision : les corps sont enNoCollisionpendant le sexe. Clic hors du couple : aucune prise, le jeu garde le clic (orbite, etc.) ; - à la prise : caméra en vue mémorisée (pose) ; hauteur du pivot sur la surface en dessous (tracé vertical,
Visibility, collision complexe ; couple, vue,
WalletCamRoomignorés) ; décalage XY entre le pivot et le point visé par le curseur. Ligne au journal :Sexe : couple pris (deplacement|rotation) a (x, y, z), hauteur sur la surface …; - clic gauche tenu (déplacement) : rien avant 5 px de mouvement. Ensuite, le rayon du curseur donne le point
visé (dessus du lit ou sol), on ajoute le décalage, on borne aux limites XY de
Room.Boxmoins 30 cm, et le Z vient de la surface sous la nouvelle place plus la hauteur prise. Tout le couple est déplacé du même vecteur ; - clic droit tenu (rotation) : le mouvement horizontal fait tourner le couple autour du pivot (positions et lacet), à 0,3° par pixel ;
- pendant la prise : la caméra en vue est remise à sa pose mémorisée à chaque image (aucune orbite au clic, aucun
zoom de la molette dans Room), et
PC.MoveCameraest mis à faux ; - au relâcher :
Sexe : couple pose a (x, y, z), lacet …ouSexe : couple tourne de … degres, lacet …, puis fin de la prise.
- mode Scene seulement : couple non vide, vue hors du couple,
ReleaseCoupleGrab(nouveau) : remet la prise à zéro et oublie les boutons et la caméra figée..h: déclarations deTickCoupleMouseetReleaseCoupleGrab, et état de la prise (CoupleGrabMode, boutons,bGrabMoved, hauteur, décalage, souris, rotation, caméra figée,bCursorWarned). Déclarations anticipées deAActoretUGameInstance.
2. Gardes demandées par Big Boss
-
Pendant le sexe et en mode Scene seulement :
SexOnet l'absence de menu sont testés au début deTickSexCamera, le mode Scene dansTickCoupleMouse. -
Clics rendus à la sortie : hors sexe, aucune prise, aucune écriture, aucun clic consommé. Le C++ ne bloque jamais un clic : il lit l'état des boutons, et le jeu reçoit toujours ses clics. Seul
MoveCameraest remis à faux pendant une prise. -
Dans la pièce : borne XY au sol de
Room.Box, moins 30 cm. Les cloisons intérieures ne sont pas testées. -
Flèches (P2) et Maj + molette : pas de conflit hors prise. Pendant un déplacement, la position suit le curseur à chaque image. Un appui de flèche est donc remplacé à l'image suivante, et la hauteur vient de la surface. Maj + molette ne joue pas pendant une prise de déplacement, et redevient actif au relâcher.
-
Reprise après la VAL (D-1) : avec Maj tenu, un clic ne prend pas le couple. La rotation d'origine (Maj + bouton + souris, voie Room) garde donc la main, comme le dit la SPEC § 7.11b. Deux lignes de plus dans la sélection. Diff revu par le même validateur.
-
Laissés en l'état (VAL D-2 à D-9, non bloquants, à observer en V7) :
AnimatingSpeedpendant un glisser ;- saut au bord si le couple démarre hors du sol ;
- saut au premier pas si le curseur ne vise rien à la prise ;
- une image de décalage possible de la caméra ;
- changement de vue pendant une prise ;
- bouton tenu à la fermeture d'un menu ;
- plafond ou baldaquin touché avant le lit ;
- témoin écrit dès qu'un bouton est tenu.
3. Points à confirmer en VAL et en V7
- Compilation (COMMUN-8) : signatures
GetMousePosition(float&, float&),DeprojectMousePositionToWorld,ProjectWorldLocationToScreen,FCollisionQueryParams::AddIgnoredActors(TArray<AActor*>),FMath::PointDistToSegment. - En jeu :
- le curseur a une position en mode Scene ;
- un clic gauche sur le couple ouvre-t-il une interaction de Room (
SelectUnderCursor) ? - un widget de scène ouvre-t-il un menu au clic droit ?
- hauteur sur le lit juste ; borne au sol ;
- aucune ligne
Accessed Nonenouvelle.
- Essais CAM-58 à CAM-63 (
CAM-B2p-SPEC.md§ 7.11).
4. Fichiers à commiter
A Source/LifePlay/LPCameraModeSubsystem.cpp et .h (non suivis jusqu'ici) ; A CAM-B2p-D-IMPL.md,
CAM-B2p-D-VAL.md.