LifePlay-Revival/Source/LifePlay/LPRoomTransitionSubsystem.h
2026-10-02 10:46:01 +02:00

39 lines
1.8 KiB
C++

// Portage UE 5.5 - ERR-038 (amelioration : defaut deja present en 4.27).
//
// Tous les lieux sont reconstruits par l'acteur Room dans le meme studio. Au changement de lieu, GI.MoveTo
// reconstruit la piece puis rend les personnages de la piece precedente a la reserve (destroyDummy : retrait de
// DummyPersonsInUse, SetActorHiddenInGame(true), deplacement) environ 2 s plus tard ; entre-temps ils restent
// visibles dans la nouvelle piece (releve ERR038_releve_20261002 : 4 personnages du fast-food 2 s dans la maison).
//
// Ce sous-systeme detecte le changement de piece (lieu courant ou echelle de la racine de Room) et cache aussitot
// les personnages qui etaient actifs juste avant, sauf le compagnon et les personnes de la scene en cours. Il cesse
// de suivre un personnage des que le jeu le rend a la reserve ou le reaffiche lui-meme ; au-dela de 10 s sans l'un
// ni l'autre, il le reaffiche (on retombe alors sur le comportement d'origine). Aucun Blueprint n'est modifie.
#pragma once
#include "CoreMinimal.h"
#include "Containers/Ticker.h"
#include "Subsystems/GameInstanceSubsystem.h"
#include "LPRoomTransitionSubsystem.generated.h"
UCLASS()
class LIFEPLAY_API ULPRoomTransitionSubsystem : public UGameInstanceSubsystem
{
GENERATED_BODY()
public:
virtual void Initialize(FSubsystemCollectionBase& Collection) override;
virtual void Deinitialize() override;
private:
bool Tick(float DeltaTime);
FTSTicker::FDelegateHandle TickHandle;
/** Signature de la piece au tick precedent (lieu courant + echelle de la racine de Room). */
FString LastRoomSignature;
/** Personnages actifs au tick precedent. */
TArray<TWeakObjectPtr<AActor>> LastInUse;
/** Personnages caches par ce sous-systeme, avec l'heure a laquelle ils l'ont ete. */
TMap<TWeakObjectPtr<AActor>, double> Hidden;
};