// Lot CAM2 (CAM2-SPEC-01 rev. 3 § 12.4, F2-B) : borne de la vue de la camera de scene. // // Le BP de Room deplace CameraScene a chaque image (minuterie UpdateRoomCam, orbite a la souris, AutoCamera) : une borne posee // sur l'acteur serait reecrite. Ce modificateur agit dans le calcul de la vue (PlayerCameraManager), apres tous les BP : la vue // reste dans la piece (murs, sol, plafond) et devant le mur du studio (GI.Wall), quel que soit le chemin qui a deplace l'acteur. // L'etat est pose a chaque image par ULPCameraModeSubsystem (liste blanche des vues) ; le modificateur ne decide rien seul et // n'agit que si la cible de vue est l'acteur designe (jamais en C1, POV, Overview, C2, Builder, Studio). #pragma once #include "CoreMinimal.h" #include "Camera/CameraModifier.h" #include "LPRoomBoundsCameraModifier.generated.h" UCLASS() class LIFEPLAY_API ULPRoomBoundsCameraModifier : public UCameraModifier { GENERATED_BODY() public: /** * Etat de la borne pour les images suivantes. * @param InViewTarget acteur dont la vue est bornee (Room.SceneCamera) ; nul = borne inactive * @param bInRoom vrai si InAllowed est une zone de piece valide (X, Y, Z) * @param bInWall vrai si le mur du studio s'applique : sur l'axe InWallAxis (0 = X, 1 = Y), la vue reste du cote * InWallSign (+1 ou -1) de InWallLimit, quand elle est dans l'emprise InWallSpan (autre axe, Z) */ void SetBounds(AActor* InViewTarget, bool bInRoom, const FBox& InAllowed, bool bInWall, int32 InWallAxis, double InWallLimit, double InWallSign, const FBox2D& InWallSpan); /** Derniere correction appliquee depuis l'appel precedent : position avant et apres, bornes franchies. Faux si aucune. */ bool ConsumeCorrection(FVector& OutBefore, FVector& OutAfter, FString& OutWhat); /** * CAM2-SPEC-02 § 5 (S1-C++) : decalage de la vue du studio de creation. Quand la cible de vue est InStudioView, la vue est * decalee de InOffset (le personnage edite est decale du meme vecteur par le sous-systeme). Nul = decalage inactif. */ void SetStudio(AActor* InStudioView, const FVector& InOffset); virtual bool ModifyCamera(float DeltaTime, FMinimalViewInfo& InOutPOV) override; private: TWeakObjectPtr BoundedView; bool bRoom = false; FBox Allowed = FBox(ForceInit); bool bWall = false; int32 WallAxis = 0; double WallLimit = 0.0; double WallSign = 1.0; FBox2D WallSpan = FBox2D(ForceInit); TWeakObjectPtr StudioView; FVector StudioOffset = FVector::ZeroVector; bool bCorrected = false; FVector CorrectedBefore = FVector::ZeroVector; FVector CorrectedAfter = FVector::ZeroVector; FString CorrectedWhat; };