59 lines
2.2 KiB
C++
59 lines
2.2 KiB
C++
// Lot AP5 (Docs/Migration/20_Chaine_Animations.md) : animations de scenario apportees par un mod.
|
|
//
|
|
// Le jeu resout ANIMATION: <cle> / Actor.animate(<cle>) 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 /<Mod>/Anims,
|
|
// nommes <cle>_F / <cle>_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(<cle>) 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<FString>& ModKeys();
|
|
|
|
private:
|
|
bool Tick(float DeltaTime);
|
|
|
|
FTSTicker::FDelegateHandle TickHandle;
|
|
/** Clips des mods, charges au premier ajout a Room.Dailies. */
|
|
TArray<TSoftObjectPtr<UAnimSequence>> ModClips;
|
|
UPROPERTY()
|
|
TArray<TObjectPtr<UAnimSequence>> Loaded;
|
|
/** Dernier acteur Room complete. */
|
|
TWeakObjectPtr<AActor> DoneRoom;
|
|
};
|
|
|
|
UCLASS()
|
|
class LIFEPLAY_API ULPModDailiesLibrary : public UBlueprintFunctionLibrary
|
|
{
|
|
GENERATED_BODY()
|
|
|
|
public:
|
|
/** Vrai si <Key> 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);
|
|
};
|