ArticyXImporter
ArticyXImporter for Unreal Engine
Loading...
Searching...
No Matches
ArticyPackage.h
1//
2// Copyright (c) 2023 articy Software GmbH & Co. KG. All rights reserved.
3//
4
5#pragma once
6
7#include "CoreMinimal.h"
8#include "ArticyObject.h"
9#include "UObject/UObjectHash.h"
10#include "ArticyPackage.generated.h"
11
12
13UCLASS(BlueprintType)
14class ARTICYRUNTIME_API UArticyPackage : public UDataAsset
15{
16 GENERATED_BODY()
17
18protected:
19
20 UPROPERTY(BlueprintReadOnly, VisibleAnywhere, Category = "Articy")
21 TArray<UArticyObject*> Assets;
22
23 UPROPERTY(BlueprintReadOnly, VisibleAnywhere, Category = "Articy")
24 TMap<FName, TSoftObjectPtr<UArticyObject>> AssetsByTechnicalName;
25
26 UPROPERTY(BlueprintReadOnly, VisibleAnywhere, Category = "Articy")
27 TMap<FArticyId, TSoftObjectPtr<UArticyObject>> AssetsById;
28public:
29
30 virtual FPrimaryAssetId GetPrimaryAssetId() const override { return FPrimaryAssetId(FName(TEXT("ArticyPackage")), GetFName()); }
31
32 void AddAsset(UArticyObject* ArticyObject);
33
34 UFUNCTION()
35 const int AssetNum()const;
36
37 UFUNCTION()
38 void Clear();
39
40 UFUNCTION()
41 const TArray<UArticyObject*> GetAssets();
42
43 UFUNCTION()
44 const TMap<FName, TSoftObjectPtr<UArticyObject>> GetAssetsDict();
45
46 UFUNCTION()
47 UArticyObject* GetAssetById(const FArticyId& Id) const;
48
49 UFUNCTION()
50 UArticyObject* GetAssetByTechnicalName(const FName& TechnicalName) const;
51
52 const bool IsAssetContained(FName TechnicalName) const;
53
54 const bool IsAssetContained(const FArticyId& Id) const;
55
56 UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Package")
57 FString Name;
58 UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Package")
59 FString Description;
60 UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Package")
61 bool bIsDefaultPackage = false;
62
63private:
64 // used to determine which objects are still parented to this package, which may include outdated articy objects that have to be deleted
65 TArray<UObject*> GetInnerObjects() const;
66};
67
68inline const int UArticyPackage::AssetNum()const
69{
70 return Assets.Num();
71}
72
73inline void UArticyPackage::Clear()
74{
75 Assets.Empty();
76 AssetsById.Empty();
77 AssetsByTechnicalName.Empty();
78}
79
80inline const TArray<UArticyObject*> UArticyPackage::GetAssets()
81{
82 return Assets;
83}
84
85inline const TMap<FName, TSoftObjectPtr<UArticyObject>> UArticyPackage::GetAssetsDict()
86{
87 return AssetsByTechnicalName;
88}
89
90inline const bool UArticyPackage::IsAssetContained(FName TechnicalName) const
91{
92 return AssetsByTechnicalName.Contains(TechnicalName);
93}
94
95inline const bool UArticyPackage::IsAssetContained(const FArticyId &Id) const
96{
97 return AssetsById.Contains(Id);
98}
99
100inline UArticyObject* UArticyPackage::GetAssetById(const FArticyId& Id) const
101{
102 if(AssetsById.Contains(Id))
103 {
104 return AssetsById[Id].Get();
105 }
106
107 return nullptr;
108}
109
110inline UArticyObject* UArticyPackage::GetAssetByTechnicalName(const FName& TechnicalName) const
111{
112 if (AssetsByTechnicalName.Contains(TechnicalName))
113 {
114 return AssetsByTechnicalName[TechnicalName].Get();
115 }
116
117 return nullptr;
118}
119
120inline TArray<UObject*> UArticyPackage::GetInnerObjects() const
121{
122 TArray<UObject*> OutObjects;
123 GetObjectsWithOuter(this, OutObjects, false);
124
125 return OutObjects;
126}
127
128inline void UArticyPackage::AddAsset(UArticyObject* ArticyObject)
129{
130 const FArticyId& ArticyId = ArticyObject->GetId();
131
132 if (!IsAssetContained(ArticyId))
133 {
134 Assets.Add(ArticyObject);
135 AssetsByTechnicalName.Add(ArticyObject->GetTechnicalName(), ArticyObject);
136 AssetsById.Add(ArticyId, ArticyObject);
137 }
138}
Definition ArticyObject.h:19
Definition ArticyPackage.h:15
Definition ArticyBaseTypes.h:18