// Show a deux. Le Blueprint (GI::Show) reste l'ancien chemin : capsules coupees, gravite 0. // lp.ShowCouple 1 (defaut) branche le nouveau, comme la sandbox : les deux corps partagent le point, // la boite suit les os affiches des deux corps, et les meubles bloquent Pawn le temps de la scene. // lp.ShowCouple 0 debranche le nouveau et rend la main a l'ancien, sans rien effacer du Blueprint. #pragma once #include "CoreMinimal.h" #include "Engine/EngineBaseTypes.h" #include "LPCoupleSim.h" #include "Subsystems/GameInstanceSubsystem.h" #include "LPShowCoupleSubsystem.generated.h" class ACharacter; class UAnimSequence; class UBoxComponent; class UPrimitiveComponent; UCLASS() class LIFEPLAY_API ULPShowCoupleSubsystem : public UGameInstanceSubsystem { GENERATED_BODY() public: virtual void Initialize(FSubsystemCollectionBase& Collection) override; virtual void Deinitialize() override; // CAM (B2p-F, G3) : a appeler apres avoir pose le couple sur une place libre. Reprend LastSafe a la place // actuelle du meneur, une fois, sans balayage ; sans couple branche, ne fait rien. void NotifyCoupleTeleported(); private: void AfterActors(UWorld* World, ELevelTick TickType, float DeltaSeconds); void Engage(ACharacter* InLead, ACharacter* InPartner); void Release(); void Weld(); void BlockRoomPawn(); void OpenUseFurniture(); void LetSittersPass(UWorld* World); bool IsUseFurniture(const class UStaticMesh* Mesh); bool FitBox(const TArray& Anims, const FString& Label); bool FitToBodies(); void KeepTogether(); FDelegateHandle PostTickHandle; TWeakObjectPtr Lead; TWeakObjectPtr Partner; TWeakObjectPtr Box; FVector LastSafe = FVector::ZeroVector; FString FittedPair; FString RejectedPair; FVector LoggedExtent = FVector::ZeroVector; FString LastBlocker; bool bEngaged = false; bool bPawnLogged = false; // Mouvement du partenaire gele le temps du show, rendu par Release (LPCoupleSim.h). LPCoupleSim::FSavedMove SavedPartnerMove; struct FSavedPawn { TWeakObjectPtr Comp; ECollisionResponse Response = ECR_Ignore; }; TArray SavedFurniture; TSet UseFurniture; TSet SolidFurniture; struct FSavedSeat { TWeakObjectPtr Cap; ECollisionResponse Response = ECR_Block; }; TArray SavedSeats; };