Ajout en fin de GI.HairstyleTable sans modifier de Blueprint ; doublons refuses, modules desactives ignores ; build H1 : 1 coiffure de test ajoutee (126 -> 127). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
61 lines
2.4 KiB
C++
61 lines
2.4 KiB
C++
// Portage UE 5.5 - lot H1 (Docs/Migration/11_Audit_Optimisation.md §16.7).
|
|
//
|
|
// La liste des coiffures du jeu est la valeur par defaut de GI.HairstyleTable (126 entrees ecrites dans le Blueprint) :
|
|
// un mod ne peut pas en ajouter. Ce sous-systeme lit des fichiers texte Modules/<module>/**/*.lphair et ajoute leurs
|
|
// coiffures en fin de table, ainsi que leur morph d'ajustement dans GI.MorphableHairs. Format (une coiffure par fichier) :
|
|
//
|
|
// HAIRSTYLE: /Game/Heavy/New5/Hairs/Exemple.Exemple chemin complet d'un SkeletalMesh (squelette Genesis 8)
|
|
// SEX: F F ou M (defaut F)
|
|
// DAZ: true defaut true ; false = coiffure "legacy", chargee seulement
|
|
// si GI.LegacyPercentage > 0
|
|
// FIT_MORPH: Exemple__AllExpand 0.45 facultatif : morph applique par Person.FitMorphableHair
|
|
//
|
|
// Les modules desactives dans GI.ModEnableds sont ignores ; la table est resynchronisee quand cette liste change.
|
|
// Aucun Blueprint n'est modifie : sans fichier .lphair, la table reste celle du Blueprint. Les entrees du Blueprint
|
|
// ne sont jamais modifiees ni reordonnees, une coiffure deja presente n'est pas ajoutee une seconde fois.
|
|
|
|
#pragma once
|
|
|
|
#include "CoreMinimal.h"
|
|
#include "Containers/Ticker.h"
|
|
#include "Subsystems/GameInstanceSubsystem.h"
|
|
#include "LPHairstyleSubsystem.generated.h"
|
|
|
|
UCLASS()
|
|
class LIFEPLAY_API ULPHairstyleSubsystem : public UGameInstanceSubsystem
|
|
{
|
|
GENERATED_BODY()
|
|
|
|
public:
|
|
virtual void Initialize(FSubsystemCollectionBase& Collection) override;
|
|
virtual void Deinitialize() override;
|
|
|
|
private:
|
|
struct FHairDef
|
|
{
|
|
FString File;
|
|
FString Module;
|
|
FString Path;
|
|
bool bMale = false;
|
|
bool bDaz = true;
|
|
FString FitMorph;
|
|
FString FitValue;
|
|
};
|
|
|
|
bool Tick(float DeltaTime);
|
|
/** Releve des fichiers .lphair (une fois : les fichiers de Modules ne changent pas en cours de partie). */
|
|
void ScanFiles();
|
|
/** Retire les entrees ajoutees precedemment puis ajoute celles des modules actifs. */
|
|
void Sync();
|
|
FString EnabledSignature() const;
|
|
bool IsModuleEnabled(const FString& Module) const;
|
|
|
|
FTSTicker::FDelegateHandle TickHandle;
|
|
double NextCheck = 0.0;
|
|
FString LastSignature;
|
|
TArray<FHairDef> Defs;
|
|
/** Chemins ajoutes a HairstyleTable par ce sous-systeme, dans l'ordre. */
|
|
TArray<FString> Injected;
|
|
/** Cles ajoutees a MorphableHairs par ce sous-systeme. */
|
|
TArray<FString> InjectedMorphs;
|
|
};
|