LifePlay-Revival/Source/LifePlay/LPModDailies.h
edujiro5972 ad75b08d06 AP5 (restes) : animate() / LPModDailies, commandlet LPPatchDailies, Person, DeliverAnims, mod lpr_anim_quaternius
Phase AP5 (CHG-209).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-07 15:49:17 +02:00

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);
};