39 lines
1.8 KiB
C++
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;
|
|
};
|