17 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category=
"Setup")
18 bool bReferenceBaseObject =
true;
21 UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (EditCondition=
"!bReferenceBaseObject"), Category=
"Setup")
31 T*
GetObject(const UObject* WorldContext) const;
33 uint32 GetEffectiveCloneId()
const
35 return bReferenceBaseObject ? 0ul : *
reinterpret_cast<uint32*
>(&
CloneId);
38 enum EStringInitResult
48 EStringInitResult InitFromString(
const FString& SourceString)
53 FParse::Value(*SourceString, TEXT(
"Low="), Id.Low) &&
54 FParse::Value(*SourceString, TEXT(
"High="), Id.High);
56 FParse::Bool(*SourceString, TEXT(
"bReferenceBaseObject="), bReferenceBaseObject) &&
57 FParse::Value(*SourceString, TEXT(
"CloneId="), CloneId);
59 return IdSet && RefSet ? EStringInitResult::AllSet : IdSet ? EStringInitResult::IdSet : RefSet ? EStringInitResult::RefSet : EStringInitResult::NoneSet;
76 return FString::Printf(TEXT(
"(bReferenceBaseObject=%s, CloneId=%d, Id=(Low=%d, High=%d))"), bReferenceBaseObject ? TEXT(
"True") : TEXT(
"False"),
CloneId, Id.Low, Id.High);
90 return Other.Id.Low == Id.Low && Other.Id.High == Id.High && Other.bReferenceBaseObject == bReferenceBaseObject && Other.CloneId ==
CloneId;
96 return Other.Id.Low == Id.Low && Other.Id.High == Id.High && Other.bReferenceBaseObject == bReferenceBaseObject && Other.GetEffectiveCloneId() == GetEffectiveCloneId();
101 return !this->operator==(Other);
104 friend uint32 GetTypeHash(
const FArticyRef& Ref)
106 return HashCombine(GetTypeHash(Ref.GetId()), Ref.GetEffectiveCloneId());
115 UPROPERTY(EditAnywhere, Category=
"Setup")
119 mutable TWeakObjectPtr<
UArticyObject> CachedObject =
nullptr;
121 mutable int32 CachedCloneId = 0;
123 UArticyObject* GetObjectInternal(const UObject* WorldContext) const;