// Lot AP5 (Docs/Migration/20_Chaine_Animations.md) : animations de scenario apportees par un mod. // // Le jeu resout ANIMATION: / Actor.animate() dans Person::PlayDaily : un aiguillage de cles ecrites en // dur, puis une recherche par nom dans le tableau Room.Dailies (34 clips fixes de /Game/Heavy/New3/Anims/Daily), // suffixe _M pour un homme, autre suffixe pour une femme (releve AP5, etat/L6f_dump_Person.txt). // // Ce sous-systeme rend appelables les clips d'un mod : // - au demarrage, il releve dans le registre d'assets les UAnimSequence des plugins de type Mod sous //Anims, // nommes _F / _M ; // - des que GI.Room existe (et a chaque nouvel acteur Room), il les ajoute a la fin de Room.Dailies : une cle du jeu // reste donc toujours servie par le clip du jeu ; // - ULPModDailiesLibrary::IsModDaily() indique a Person::PlayDaily (branchement pose par -run=LPPatchDailies) // qu'une cle inconnue de l'aiguillage vient d'un mod et doit suivre le chemin generique (celui de dance). // Sans mod, il ne fait rien. #pragma once #include "CoreMinimal.h" #include "Containers/Ticker.h" #include "Kismet/BlueprintFunctionLibrary.h" #include "Subsystems/GameInstanceSubsystem.h" #include "LPModDailies.generated.h" class UAnimSequence; UCLASS() class LIFEPLAY_API ULPModDailiesSubsystem : public UGameInstanceSubsystem { GENERATED_BODY() public: virtual void Initialize(FSubsystemCollectionBase& Collection) override; virtual void Deinitialize() override; /** Cles apportees par les mods (minuscules), relevees au demarrage. */ static const TSet& ModKeys(); private: bool Tick(float DeltaTime); FTSTicker::FDelegateHandle TickHandle; /** Clips des mods, charges au premier ajout a Room.Dailies. */ TArray> ModClips; UPROPERTY() TArray> Loaded; /** Dernier acteur Room complete. */ TWeakObjectPtr DoneRoom; }; UCLASS() class LIFEPLAY_API ULPModDailiesLibrary : public UBlueprintFunctionLibrary { GENERATED_BODY() public: /** Vrai si est une cle d'animation apportee par un mod (sans tenir compte de la casse). */ UFUNCTION(BlueprintPure, Category = "LifePlay|Animation") static bool IsModDaily(const FString& Key); };