ArticyXImporter
ArticyXImporter for Unreal Engine
Loading...
Searching...
No Matches
ArticyObjectWithText.h
1//
2// Copyright (c) 2023 articy Software GmbH & Co. KG. All rights reserved.
3//
4
5#pragma once
6
7#include "ArticyObjectWith_Base.h"
8#include "UObject/TextProperty.h"
9#include "Engine/Engine.h"
10#include "Internationalization/StringTable.h"
11#include "ArticyAsset.h"
12#include "ArticyDatabase.h"
13#include "ArticyTextExtension.h"
14#include "ArticyObjectWithText.generated.h"
15
16UINTERFACE(MinimalAPI, BlueprintType, meta=(CannotImplementInterfaceInBlueprint))
17class UArticyObjectWithText : public UArticyObjectWith_Base { GENERATED_BODY() };
18
23{
24 GENERATED_BODY()
25
26public:
27
28 UFUNCTION(BlueprintCallable, Category="ArticyObjectWithText")
29 virtual FText GetText()
30 {
31 static const auto& PropName = FName("Text");
32 return GetStringText(Cast<UObject>(this), PropName);
33 }
34
35 virtual FText GetText() const
36 {
37 return const_cast<IArticyObjectWithText*>(this)->GetText();
38 }
39
40 //---------------------------------------------------------------------------//
41
42 UFUNCTION(BlueprintCallable, Category="ArticyObjectWithText")
43 virtual FText& SetText(UPARAM(ref) const FText& Text)
44 {
45 static const auto& PropName = FName("Text");
46 return GetProperty<FText>(PropName) = Text;
47 }
48
49 UFUNCTION(BlueprintCallable, Category = "ArticyObjectWithText")
50 virtual USoundWave* GetVOAsset(UObject* WorldContext)
51 {
52 static const auto& PropName = FName("Text");
53 FText& Key = GetProperty<FText>(PropName);
54 const FText MissingEntry = FText::FromString("<MISSING STRING TABLE ENTRY>");
55 FArticyId AssetId;
56
57 // Look up entry in specified string table
58 TOptional<FString> TableName = FTextInspector::GetNamespace(Key);
59 if (!TableName.IsSet())
60 {
61 TableName = TEXT("ARTICY");
62 }
63
64 // Find the table
65 FStringTableConstPtr TablePtr = FStringTableRegistry::Get().FindStringTable(FName(TableName.GetValue()));
66 if (!TablePtr.IsValid())
67 {
68 return nullptr;
69 }
70
71 // Find the entry
72 const FStringTable* Table = TablePtr.Get();
73 FStringTableEntryConstPtr EntryPtr = Table->FindEntry(FTextKey(Key.ToString() + ".VOAsset"));
74 if (!EntryPtr.IsValid())
75 {
76 return nullptr;
77 }
78
79 const FStringTableEntry* TableEntry = EntryPtr.Get();
80 FText SourceString = FText::FromString(TableEntry->GetSourceString());
81
82 if (!SourceString.IsEmpty() && !SourceString.EqualTo(MissingEntry))
83 {
84 AssetId = FArticyId{ ResolveText(WorldContext, &SourceString).ToString() };
85 }
86 else
87 {
88 const auto& AssetString = FText::FromString(Key.ToString() + ".VOAsset");
89 AssetId = FArticyId{ ResolveText(WorldContext, &AssetString).ToString() };
90 }
91
92 const UArticyDatabase* Database = UArticyDatabase::Get(WorldContext);
93 if (!Database)
94 {
95 return nullptr;
96 }
97 const UArticyObject* AssetObject = Database->GetObject(AssetId);
98 if (!AssetObject)
99 {
100 return nullptr;
101 }
102 return (Cast<UArticyAsset>(AssetObject))->LoadAsSoundWave();
103 }
104
105 virtual FText ResolveText(UObject* Outer, const FText* SourceText)
106 {
107 return ArticyHelpers::ResolveText(Outer, SourceText);
108 }
109};
Definition ArticyObjectWithText.h:23
Definition ArticyObjectWith_Base.h:27
Definition ArticyDatabase.h:172
static UArticyDatabase * Get(const UObject *WorldContext)
Definition ArticyDatabase.cpp:217
UArticyObject * GetObject(FArticyId Id, int32 CloneId=0, TSubclassOf< class UArticyObject > CastTo=NULL) const
Definition ArticyDatabase.cpp:665
Definition ArticyObjectWithText.h:17
Definition ArticyObjectWith_Base.h:12
Definition ArticyObject.h:19
Definition ArticyBaseTypes.h:18