LifePlay-Revival/Source/LifePlay/LPShowCoupleSubsystem.h
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

76 lines
2.4 KiB
C++

// 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<UAnimSequence*>& Anims, const FString& Label);
bool FitToBodies();
void KeepTogether();
FDelegateHandle PostTickHandle;
TWeakObjectPtr<ACharacter> Lead;
TWeakObjectPtr<ACharacter> Partner;
TWeakObjectPtr<UBoxComponent> 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<UPrimitiveComponent> Comp;
ECollisionResponse Response = ECR_Ignore;
};
TArray<FSavedPawn> SavedFurniture;
TSet<FName> UseFurniture;
TSet<FName> SolidFurniture;
struct FSavedSeat
{
TWeakObjectPtr<class UCapsuleComponent> Cap;
ECollisionResponse Response = ECR_Block;
};
TArray<FSavedSeat> SavedSeats;
};