Skip to content

Commit 3b52998

Browse files
committed
Update to version 1.4.3. Added the ability to specify the recursion depth. Added a new function GetDataByClassADAM.
1 parent dee28e0 commit 3b52998

12 files changed

Lines changed: 96 additions & 45 deletions

File tree

Plugins/AsyncDataAssetManager/AsyncDataAssetManager.uplugin

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"FileVersion": 3,
33
"Version": 1,
4-
"VersionName": "1.4.2",
4+
"VersionName": "1.4.3",
55
"FriendlyName": "Async Data Asset Manager",
66
"Description": "Asynchronous management of data assets.",
77
"Category": "Async Technologies",
Binary file not shown.

Plugins/AsyncDataAssetManager/Source/AsyncDataAssetManager/Private/ADAMS_Getters.cpp

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -179,3 +179,28 @@ void UAsyncDataAssetManagerSubsystem::FindNestedAssetsRecursive(void* Container,
179179
}
180180
}
181181
}
182+
183+
TArray<TSoftObjectPtr<UPrimaryDataAsset>> UAsyncDataAssetManagerSubsystem::GetDataByClassADAM(TSubclassOf<UPrimaryDataAsset> DataAssetClass, FName Tag, bool bIgnoreTag)
184+
{
185+
TArray<TSoftObjectPtr<UPrimaryDataAsset>> SortedPrimaryDataAsset;
186+
187+
if (!DataAssetClass)
188+
{
189+
UE_LOG(LogTemp, Warning, TEXT("ADAM (GetDataByClass): DataAssetClass is nullptr!"));
190+
191+
return SortedPrimaryDataAsset;
192+
}
193+
194+
for (const FMemoryADAM& Data : DataADAM)
195+
{
196+
if (Data.MemoryReference.IsValid() && Data.SoftReference->GetClass()->IsChildOf(DataAssetClass))
197+
{
198+
if (bIgnoreTag || Data.Tag == Tag)
199+
{
200+
SortedPrimaryDataAsset.Add(Data.SoftReference);
201+
}
202+
}
203+
}
204+
205+
return SortedPrimaryDataAsset;
206+
}

Plugins/AsyncDataAssetManager/Source/AsyncDataAssetManager/Private/ADAMS_Handlers.cpp

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
#include "Engine/DataAsset.h"
77
#include "AsyncTechnologiesSettings.h"
88

9-
void UAsyncDataAssetManagerSubsystem::RecursiveLoad(TSoftObjectPtr<UPrimaryDataAsset> PrimaryDataAsset, FName Tag, bool NotifyAfterFullLoaded)
9+
void UAsyncDataAssetManagerSubsystem::RecursiveLoad(TSoftObjectPtr<UPrimaryDataAsset> PrimaryDataAsset, FName Tag, bool NotifyAfterFullLoaded, int32 RecursiveDepthLoading)
1010
{
1111
if (PrimaryDataAsset.IsNull())
1212
{
@@ -15,6 +15,9 @@ void UAsyncDataAssetManagerSubsystem::RecursiveLoad(TSoftObjectPtr<UPrimaryDataA
1515
return;
1616
}
1717

18+
if (RecursiveDepthLoading == 0)
19+
return;
20+
1821
UPrimaryDataAsset* Asset = PrimaryDataAsset.Get();
1922

2023
if (!Asset)
@@ -37,6 +40,9 @@ void UAsyncDataAssetManagerSubsystem::RecursiveLoad(TSoftObjectPtr<UPrimaryDataA
3740
return;
3841
}
3942

43+
// Compute depth to pass children. If RecursiveDepthLoading == -1 -> keep -1 (infinite), else decrease by 1
44+
int32 ChildDepth = (RecursiveDepthLoading == -1) ? -1 : (RecursiveDepthLoading - 1);
45+
4046
for (TSoftObjectPtr<UPrimaryDataAsset>& NestedAsset : NestedAssets)
4147
{
4248
// Calling asynchronous loading
@@ -53,11 +59,11 @@ void UAsyncDataAssetManagerSubsystem::RecursiveLoad(TSoftObjectPtr<UPrimaryDataA
5359
continue;
5460
}
5561

56-
AddToADAM(NestedAsset, Tag, true);
62+
AddToADAM(NestedAsset, Tag, ChildDepth);
5763
}
5864
else
5965
{
60-
AddAllToADAM(NestedAsset, Tag, true);
66+
AddAllToADAM(NestedAsset, Tag, ChildDepth);
6167
}
6268
}
6369
}

Plugins/AsyncDataAssetManager/Source/AsyncDataAssetManager/Private/ADAMS_Loading.cpp

Lines changed: 20 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
#include "Engine/DataAsset.h"
77
#include "AsyncTechnologiesSettings.h"
88

9-
void UAsyncDataAssetManagerSubsystem::LoadADAM(TSoftObjectPtr<UPrimaryDataAsset> PrimaryDataAsset, FTagADAM Tag, bool RecursiveLoading, TSoftObjectPtr<UPrimaryDataAsset>& ReturnPrimaryDataAsset)
9+
void UAsyncDataAssetManagerSubsystem::LoadADAM(TSoftObjectPtr<UPrimaryDataAsset> PrimaryDataAsset, FTagADAM Tag, int32 RecursiveDepthLoading, TSoftObjectPtr<UPrimaryDataAsset>& ReturnPrimaryDataAsset)
1010
{
1111
if (PrimaryDataAsset.IsNull())
1212
{
@@ -26,14 +26,19 @@ void UAsyncDataAssetManagerSubsystem::LoadADAM(TSoftObjectPtr<UPrimaryDataAsset>
2626
return;
2727
}
2828

29+
if (RecursiveDepthLoading < -1)
30+
{
31+
RecursiveDepthLoading = FMath::Max(RecursiveDepthLoading, -1);
32+
}
33+
2934
// Add in array ADAM and async load. In this case, a load notification occurs after each file is loaded.
30-
AddToADAM(PrimaryDataAsset, GetTagNameFromStruct(Tag), RecursiveLoading);
35+
AddToADAM(PrimaryDataAsset, GetTagNameFromStruct(Tag), RecursiveDepthLoading);
3136

3237
// Return the value of a soft link
3338
ReturnPrimaryDataAsset = PrimaryDataAsset;
3439
}
3540

36-
void UAsyncDataAssetManagerSubsystem::LoadArrayADAM(TArray<TSoftObjectPtr<UPrimaryDataAsset>> PrimaryDataAssets, FTagADAM Tag, bool NotifyAfterFullLoaded, bool RecursiveLoading, TArray<TSoftObjectPtr<UPrimaryDataAsset>>& ReturnPrimaryDataAssets)
41+
void UAsyncDataAssetManagerSubsystem::LoadArrayADAM(TArray<TSoftObjectPtr<UPrimaryDataAsset>> PrimaryDataAssets, FTagADAM Tag, bool NotifyAfterFullLoaded, int32 RecursiveDepthLoading, TArray<TSoftObjectPtr<UPrimaryDataAsset>>& ReturnPrimaryDataAssets)
3742
{
3843
if (PrimaryDataAssets.IsEmpty())
3944
{
@@ -51,6 +56,11 @@ void UAsyncDataAssetManagerSubsystem::LoadArrayADAM(TArray<TSoftObjectPtr<UPrima
5156
QueueCounterADAM.Add(TagName, 0);
5257
}
5358

59+
if (RecursiveDepthLoading < -1)
60+
{
61+
RecursiveDepthLoading = FMath::Max(RecursiveDepthLoading, -1);
62+
}
63+
5464
// Invoking asynchronous loading of each data asset.
5565
for (TSoftObjectPtr<UPrimaryDataAsset>& DataAsset : PrimaryDataAssets)
5666
{
@@ -68,19 +78,19 @@ void UAsyncDataAssetManagerSubsystem::LoadArrayADAM(TArray<TSoftObjectPtr<UPrima
6878
// Add in array ADAM and async load
6979
if (!NotifyAfterFullLoaded)
7080
{
71-
AddToADAM(DataAsset, TagName, RecursiveLoading);
81+
AddToADAM(DataAsset, TagName, RecursiveDepthLoading);
7282
}
7383
else
7484
{
75-
AddAllToADAM(DataAsset, TagName, RecursiveLoading);
85+
AddAllToADAM(DataAsset, TagName, RecursiveDepthLoading);
7686
}
7787
}
7888

7989
// Return an array of soft links
8090
ReturnPrimaryDataAssets = PrimaryDataAssets;
8191
}
8292

83-
void UAsyncDataAssetManagerSubsystem::AddToADAM(TSoftObjectPtr<UPrimaryDataAsset> PrimaryDataAsset, FName Tag, bool RecursiveLoading)
93+
void UAsyncDataAssetManagerSubsystem::AddToADAM(TSoftObjectPtr<UPrimaryDataAsset> PrimaryDataAsset, FName Tag, int32 RecursiveDepthLoading)
8494
{
8595
// Add Queue
8696
FString DataAssetName = PrimaryDataAsset.GetAssetName();
@@ -97,7 +107,7 @@ void UAsyncDataAssetManagerSubsystem::AddToADAM(TSoftObjectPtr<UPrimaryDataAsset
97107
&UAsyncDataAssetManagerSubsystem::OnLoaded,
98108
PrimaryDataAsset,
99109
Tag,
100-
RecursiveLoading);
110+
RecursiveDepthLoading);
101111

102112
// Determine whether the descriptor will be declared and stored
103113
TSharedPtr<FStreamableHandle> DataAssetHandle = StreamableManager.RequestAsyncLoad(PrimaryDataAsset.ToSoftObjectPath(), Delegate);
@@ -109,7 +119,7 @@ void UAsyncDataAssetManagerSubsystem::AddToADAM(TSoftObjectPtr<UPrimaryDataAsset
109119
}
110120
}
111121

112-
void UAsyncDataAssetManagerSubsystem::AddAllToADAM(TSoftObjectPtr<UPrimaryDataAsset> PrimaryDataAsset, FName Tag, bool RecursiveLoading)
122+
void UAsyncDataAssetManagerSubsystem::AddAllToADAM(TSoftObjectPtr<UPrimaryDataAsset> PrimaryDataAsset, FName Tag, int32 RecursiveDepthLoading)
113123
{
114124
FStreamableManager& StreamableManager = UAssetManager::GetStreamableManager();
115125
// Create a delegate
@@ -118,7 +128,7 @@ void UAsyncDataAssetManagerSubsystem::AddAllToADAM(TSoftObjectPtr<UPrimaryDataAs
118128
&UAsyncDataAssetManagerSubsystem::OnAllLoaded,
119129
PrimaryDataAsset,
120130
Tag,
121-
RecursiveLoading);
131+
RecursiveDepthLoading);
122132

123133
// Determine whether the descriptor will be declared and stored
124134
TSharedPtr<FStreamableHandle> DataAssetHandle = StreamableManager.RequestAsyncLoad(PrimaryDataAsset.ToSoftObjectPath(), Delegate);
@@ -172,7 +182,7 @@ void UAsyncDataAssetManagerSubsystem::FastLoadADAM(TSoftObjectPtr<UPrimaryDataAs
172182
&UAsyncDataAssetManagerSubsystem::OnLoaded,
173183
PrimaryDataAsset,
174184
Tag,
175-
false);
185+
0);
176186

177187
// This handle is not stored in memory
178188
TSharedPtr<FStreamableHandle> DataAssetHandle = StreamableManager.RequestAsyncLoad(PrimaryDataAsset.ToSoftObjectPath(), Delegate);

Plugins/AsyncDataAssetManager/Source/AsyncDataAssetManager/Private/AsyncDataAssetManagerSubsystem.cpp

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ void UAsyncDataAssetManagerSubsystem::Deinitialize()
3535
#pragma endregion SUBSYSTEM
3636

3737
#pragma region CALL_DELEGATE
38-
void UAsyncDataAssetManagerSubsystem::OnLoaded(TSoftObjectPtr<UPrimaryDataAsset> PrimaryDataAsset, FName Tag, bool RecursiveLoading)
38+
void UAsyncDataAssetManagerSubsystem::OnLoaded(TSoftObjectPtr<UPrimaryDataAsset> PrimaryDataAsset, FName Tag, int32 RecursiveDepthLoading)
3939
{
4040
UPrimaryDataAsset* LoadedObject = PrimaryDataAsset.Get();
4141

@@ -47,11 +47,11 @@ void UAsyncDataAssetManagerSubsystem::OnLoaded(TSoftObjectPtr<UPrimaryDataAsset>
4747
}
4848

4949
// Inform the FOnLoadedADAM subsystem delegate that the loading is complete
50-
OnLoadedADAM.Broadcast(LoadedObject, PrimaryDataAsset, Tag, RecursiveLoading);
50+
OnLoadedADAM.Broadcast(LoadedObject, PrimaryDataAsset, Tag, RecursiveDepthLoading);
5151

52-
if (RecursiveLoading && FindNestedAssets(LoadedObject).Num() != 0)
52+
if (RecursiveDepthLoading != 0 && FindNestedAssets(LoadedObject).Num() != 0)
5353
{
54-
RecursiveLoad(PrimaryDataAsset, Tag, false);
54+
RecursiveLoad(PrimaryDataAsset, Tag, false, RecursiveDepthLoading);
5555
}
5656

5757
if (EnableLog)
@@ -63,7 +63,7 @@ void UAsyncDataAssetManagerSubsystem::OnLoaded(TSoftObjectPtr<UPrimaryDataAsset>
6363
QueueADAM.Remove(PrimaryDataAsset.GetAssetName());
6464
}
6565

66-
void UAsyncDataAssetManagerSubsystem::OnAllLoaded(TSoftObjectPtr<UPrimaryDataAsset> PrimaryDataAsset, FName Tag, bool RecursiveLoading)
66+
void UAsyncDataAssetManagerSubsystem::OnAllLoaded(TSoftObjectPtr<UPrimaryDataAsset> PrimaryDataAsset, FName Tag, int32 RecursiveDepthLoading)
6767
{
6868
UPrimaryDataAsset* LoadedObject = PrimaryDataAsset.Get();
6969

@@ -74,9 +74,9 @@ void UAsyncDataAssetManagerSubsystem::OnAllLoaded(TSoftObjectPtr<UPrimaryDataAss
7474
return;
7575
}
7676

77-
if (RecursiveLoading && FindNestedAssets(LoadedObject).Num() != 0)
77+
if (RecursiveDepthLoading != 0 && FindNestedAssets(LoadedObject).Num() != 0)
7878
{
79-
RecursiveLoad(PrimaryDataAsset, Tag, true);
79+
RecursiveLoad(PrimaryDataAsset, Tag, true, RecursiveDepthLoading);
8080
}
8181

8282
if (EnableLog)

Plugins/AsyncDataAssetManager/Source/AsyncDataAssetManager/Public/AsyncDataAssetManagerSubsystem.h

Lines changed: 30 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,7 @@ class ASYNCDATAASSETMANAGER_API UAsyncDataAssetManagerSubsystem : public UGameIn
115115
//~End USubsystem
116116

117117
#pragma region DELEGATES
118-
DECLARE_DYNAMIC_MULTICAST_DELEGATE_FourParams(FOnLoadedADAM, UPrimaryDataAsset*, LoadedObject, TSoftObjectPtr<UPrimaryDataAsset>, LoadedPrimaryDataAsset, FName, LoadedTag, bool, RecursiveLoading);
118+
DECLARE_DYNAMIC_MULTICAST_DELEGATE_FourParams(FOnLoadedADAM, UPrimaryDataAsset*, LoadedObject, TSoftObjectPtr<UPrimaryDataAsset>, LoadedPrimaryDataAsset, FName, LoadedTag, int32, RecursiveDepthLoading);
119119

120120
// Indicates that the load is complete
121121
UPROPERTY(BlueprintAssignable, Category = "ADAM Subsystem")
@@ -144,30 +144,30 @@ class ASYNCDATAASSETMANAGER_API UAsyncDataAssetManagerSubsystem : public UGameIn
144144
* Async loading of a Data Asset and storing it in memory.
145145
* @param PrimaryDataAsset Soft link to data asset.
146146
* @param Tag Designed for data grouping.
147-
* @param RecursiveLoading Support for recursion. During loading, the function will check for nested Data Assets and attempt to load them. Warning! This option may require more performance and processing time.
147+
* @param RecursiveDepthLoading Recursion support and depth. If the value is set to '0', recursion will be disabled. If set to '-1', recursion will be infinite.
148148
* @return ReturnPrimaryDataAsset - Returns the same data asset as that specified in the first parameter.
149149
*/
150150
UFUNCTION(BlueprintCallable, Category = "ADAM Subsystem")
151151
void LoadADAM(
152152
TSoftObjectPtr<UPrimaryDataAsset> PrimaryDataAsset,
153-
FTagADAM Tag,
154-
bool RecursiveLoading,
153+
FTagADAM Tag,
154+
int32 RecursiveDepthLoading,
155155
TSoftObjectPtr<UPrimaryDataAsset>& ReturnPrimaryDataAsset);
156156

157157
/**
158158
* Async loading of an array of Data Asset and storing each element in memory.
159159
* @param PrimaryDataAssets Soft link to data assets.
160160
* @param Tag Designed for data grouping.
161161
* @param NotifyAfterFullLoaded If true, the "OnAllLoaded" event will notify you when all data in the array has been fully loaded. The ADAM system will ignore duplicate checks (to prevent accidental unloading of necessary data through another thread), so all Data Asset duplicates will be controlled by the engine's base system.
162-
* @param RecursiveLoading Support for recursion. During loading, the function will check for nested Data Assets and attempt to load them. Warning! This option may require more performance and processing time.
162+
* @param RecursiveDepthLoading Recursion support and depth. If the value is set to '0', recursion will be disabled. If set to '-1', recursion will be infinite.
163163
* @result ReturnPrimaryDataAssets - Returns the same data asset as that specified in the first parameter.
164164
*/
165165
UFUNCTION(BlueprintCallable, Category = "ADAM Subsystem")
166166
void LoadArrayADAM(
167167
TArray<TSoftObjectPtr<UPrimaryDataAsset>> PrimaryDataAssets,
168-
FTagADAM Tag,
168+
FTagADAM Tag,
169169
bool NotifyAfterFullLoaded,
170-
bool RecursiveLoading,
170+
int32 RecursiveDepthLoading,
171171
TArray<TSoftObjectPtr<UPrimaryDataAsset>>& ReturnPrimaryDataAssets);
172172

173173
/**
@@ -238,7 +238,18 @@ class ASYNCDATAASSETMANAGER_API UAsyncDataAssetManagerSubsystem : public UGameIn
238238
*/
239239
UFUNCTION(BlueprintCallable, Category = "ADAM Subsystem")
240240
int32 GetIndexDataADAM(TSoftObjectPtr<UPrimaryDataAsset> PrimaryDataAsset);
241-
241+
242+
/**
243+
* Selects a data array from the shared storage based on the specified class and tag.
244+
*
245+
* @param DataAssetClass The data asset class to filter by.
246+
* @param Tag The tag to filter the data assets.
247+
* @param bIgnoreTag If true, the tag will not be checked.
248+
* @return Returns an array of data assets that match the specified class and tag.
249+
*/
250+
UFUNCTION(BlueprintCallable, Category = "ADAM Subsystem")
251+
TArray<TSoftObjectPtr<UPrimaryDataAsset>> GetDataByClassADAM(TSubclassOf<UPrimaryDataAsset> DataAssetClass, FName Tag, bool bIgnoreTag = true);
252+
242253
#pragma endregion BLUEPRINT_FUNCTIONS
243254

244255
protected:
@@ -283,10 +294,10 @@ class ASYNCDATAASSETMANAGER_API UAsyncDataAssetManagerSubsystem : public UGameIn
283294
*
284295
* @param PrimaryDataAsset Soft link to data asset.
285296
* @param Tag Designed for data grouping.
286-
* @param RecursiveLoading Support for recursion. During loading, the function will check for nested Data Assets and attempt to load them. Warning! This option may require more performance and processing time.
297+
* @param RecursiveDepthLoading Recursion support and depth. If the value is set to '0', recursion will be disabled. If set to '-1', recursion will be infinite.
287298
*/
288299
UFUNCTION()
289-
void AddToADAM(TSoftObjectPtr<UPrimaryDataAsset> PrimaryDataAsset, FName Tag, bool RecursiveLoading);
300+
void AddToADAM(TSoftObjectPtr<UPrimaryDataAsset> PrimaryDataAsset, FName Tag, int32 RecursiveDepthLoading);
290301

291302
/**
292303
* Multiple asynchronous loading with completion notification
@@ -299,40 +310,38 @@ class ASYNCDATAASSETMANAGER_API UAsyncDataAssetManagerSubsystem : public UGameIn
299310
*
300311
* @param PrimaryDataAsset Soft link to data asset.
301312
* @param Tag Designed for data grouping.
302-
* @param RecursiveLoading Support for recursion. During loading, the function will check for nested Data Assets and attempt to load them. Warning! This option may require more performance and processing time.
313+
* @param RecursiveDepthLoading Recursion support and depth. If the value is set to '0', recursion will be disabled. If set to '-1', recursion will be infinite.
303314
*/
304315
UFUNCTION()
305-
void AddAllToADAM(TSoftObjectPtr<UPrimaryDataAsset> PrimaryDataAsset, FName Tag, bool RecursiveLoading);
316+
void AddAllToADAM(TSoftObjectPtr<UPrimaryDataAsset> PrimaryDataAsset, FName Tag, int32 RecursiveDepthLoading);
306317

307318
/**
308319
* Delegate notification after loading Data Asset into ADAM subsystem
309320
*
310321
* @param PrimaryDataAsset Soft link to data asset.
311322
* @param Tag Designed for data grouping.
312-
* @param RecursiveLoading Support for recursion. During loading, the function will check for nested Data Assets and attempt to load them. Warning! This option may require more performance and processing time.
323+
* @param RecursiveDepthLoading Recursion support and depth. If the value is set to '0', recursion will be disabled. If set to '-1', recursion will be infinite.
313324
*
314-
* LoadedObject - the loaded data asset object.
315325
* PrimaryDataAsset - a soft link with a generic suffix.
316326
* Tag - a given tag for grouping data.
317-
* RecursiveLoading - whether the recursive option was selected during loading.
327+
* RecursiveDepthLoading - whether the recursive option was selected during loading.
318328
*/
319329
UFUNCTION()
320-
void OnLoaded(TSoftObjectPtr<UPrimaryDataAsset> PrimaryDataAsset, FName Tag, bool RecursiveLoading);
330+
void OnLoaded(TSoftObjectPtr<UPrimaryDataAsset> PrimaryDataAsset, FName Tag, int32 RecursiveDepthLoading);
321331

322332
/**
323333
* Delegate notification after full loading Data Asset into ADAM subsystem
324334
*
325335
* @param PrimaryDataAsset Soft link to data asset.
326336
* @param Tag Designed for data grouping.
327-
* @param RecursiveLoading Support for recursion. During loading, the function will check for nested Data Assets and attempt to load them. Warning! This option may require more performance and processing time.
337+
* @param RecursiveDepthLoading Recursion support and depth. If the value is set to '0', recursion will be disabled. If set to '-1', recursion will be infinite.
328338
*
329-
* LoadedObject - the loaded data asset object.
330339
* PrimaryDataAsset - a soft link with a generic suffix.
331340
* Tag - a given tag for grouping data.
332-
* RecursiveLoading - whether the recursive option was selected during loading.
341+
* RecursiveDepthLoading - whether the recursive option was selected during loading.
333342
*/
334343
UFUNCTION()
335-
void OnAllLoaded(TSoftObjectPtr<UPrimaryDataAsset> PrimaryDataAsset, FName Tag, bool RecursiveLoading);
344+
void OnAllLoaded(TSoftObjectPtr<UPrimaryDataAsset> PrimaryDataAsset, FName Tag, int32 RecursiveDepthLoading);
336345

337346
/**
338347
* Remove Data Asset from the ADAM array and asynchronously unload it.
@@ -350,5 +359,5 @@ class ASYNCDATAASSETMANAGER_API UAsyncDataAssetManagerSubsystem : public UGameIn
350359
* @param NotifyAfterFullLoaded If true, the "OnAllLoaded" event will notify you when all data in the array has been fully loaded. The ADAM system will ignore duplicate checks (to prevent accidental unloading of necessary data through another thread), so all Data Asset duplicates will be controlled by the engine's base system.
351360
*/
352361
UFUNCTION()
353-
void RecursiveLoad(TSoftObjectPtr<UPrimaryDataAsset> PrimaryDataAsset, FName Tag, bool NotifyAfterFullLoaded);
362+
void RecursiveLoad(TSoftObjectPtr<UPrimaryDataAsset> PrimaryDataAsset, FName Tag, bool NotifyAfterFullLoaded, int32 RecursiveDepthLoading);
354363
};

README.md

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,10 @@ ADAM is a plugin for Unreal Engine 5 that adds a subsystem for asynchronous load
99
> The plugin has been pre-packaged only for Win64 and Android.
1010
1111
## Latest Updates
12-
`Version 1.4.2`
12+
`Version 1.4.3`
1313
- Build version for Unreal Engine 5.6.0+
14-
- Refactored the method for searching nested data assets.
15-
- Structures and arrays of structures are now checked during recursive data asset loading.
14+
- Improved recursive loading option. The function parameters of `LoadADAM` and `LoadArrayADAM` have been updated. Added the ability to specify the recursion depth, allowing data to be loaded only up to a defined level of nesting.
15+
- `New` Added a new function `GetDataByClassADAM`. This function retrieves a filtered list of loaded data assets from ADAM’s internal memory based on class and tag. (For example, this can be useful when working with deeply nested assets required for data retrieval.)
1616

1717
## What it's for
1818
- Load and unload Data Assets asynchronously using simple functions.
@@ -41,6 +41,7 @@ An interactive step-by-step tutorial on how to use ADAM can be found in the file
4141
![Window Manager](./_Misc/Tutorial/Tutorial_1.jpg)
4242
![Window Manager](./_Misc/Tutorial/Tutorial_2.jpg)
4343
![Window Manager](./_Misc/Tutorial/Tutorial_3.jpg)
44+
![Window Manager](./_Misc/Tutorial/Tutorial_4.jpg)
4445

4546
## (C++) Documentaion
4647
All sources contain self-documenting code.

_Misc/Tutorial/Tutorial_1.jpg

0 Bytes
Loading

_Misc/Tutorial/Tutorial_2.jpg

0 Bytes
Loading

0 commit comments

Comments
 (0)