LifePlay-Revival/Source/LifePlay/LPAssetRegistryHelpers.h

61 lines
2.7 KiB
C
Raw Normal View History

// Portage UE 5.5 (2026.9 beta) - rustine introduite lors du portage 4.27, toujours necessaire.
//
// Epic a rendu IAssetRegistry::GetAssetByObjectPath impur (BlueprintPure=false) apres la
// version d'Unreal utilisee pour ecrire les Blueprints du jeu. Les graphes existants
// l'employaient comme noeud PUR : au chargement le noeud gagne une broche Exec non
// connectee, il est donc elague, et le noeud "Get Asset" qui consommait sa sortie se retrouve
// sans entree -> "'In Asset Data' ... must have an input wired into it".
//
// Cette classe re-expose la meme fonction en version PURE. Les noeuds existants des Blueprints
// pointent ici (rebranches lors du portage 5.5 par une commandlet retiree en U2, voir l'historique git).
#pragma once
#include "CoreMinimal.h"
#include "AssetRegistry/AssetData.h"
#include "Kismet/BlueprintFunctionLibrary.h"
#include "LPAssetRegistryHelpers.generated.h"
UCLASS()
class LIFEPLAY_API ULPAssetRegistryHelpers : public UBlueprintFunctionLibrary
{
GENERATED_BODY()
public:
/**
* Version PURE de IAssetRegistry::GetAssetByObjectPath.
*
* @param ObjectPath chemin de l'objet a chercher
* @param bIncludeOnlyOnDiskAssets si vrai, ignore les objets deja en memoire (plus rapide)
* @return les donnees de l'asset ; invalides si l'objet est introuvable
*/
UFUNCTION(BlueprintPure, Category = "AssetRegistry")
static FAssetData GetAssetByObjectPath(const FName ObjectPath, bool bIncludeOnlyOnDiskAssets = false);
/**
* Version FName de IAssetRegistry::GetAssetsByClass.
*
* 5.1 a remplace le parametre FName ClassName par un FTopLevelAssetPath ClassPathName.
* La montee de version a supprime l'ancienne broche des noeuds existants SANS reporter
* sa valeur sur la nouvelle : les trois appels de GI (SkeletalMesh, StaticMesh,
* StreetMap) interrogeaient donc l'AssetRegistry avec un chemin de classe VIDE et ne
* renvoyaient plus rien. Le jeu ne pouvait plus enumerer ni corps, ni vetements, ni
* coiffures : generatePerson() sans argument n'avait plus rien a tirer au sort.
*
* Rien dans le graphe ne le signalait : la compilation restait a zero erreur.
*
* Les noms de broches reproduisent ceux du noeud d'origine pour que le reaiguillage se
* limite a un changement de reference de fonction.
*/
UFUNCTION(BlueprintCallable, Category = "AssetRegistry")
static bool GetAssetsByClassName(FName ClassName, TArray<FAssetData>& OutAssetData, bool bSearchSubClasses = false);
/**
* Equivalent de l'ancien FAssetData::ObjectPath (supprime en 5.1 au profit de
* FSoftObjectPath). Rend le chemin sous la forme "/Game/Dossier/Asset.Asset" attendue
* par les consommateurs existants.
*/
UFUNCTION(BlueprintPure, Category = "AssetRegistry")
static FName GetAssetObjectPath(const FAssetData& AssetData);
};