Payback 0.0.1
CK Graduation Project
로딩중...
검색중...
일치하는것 없음
AudioData.h
이 파일의 문서화 페이지로 가기
1// Fill out your copyright notice in the Description page of Project Settings.
2
3#pragma once
4
5#include "CoreMinimal.h"
6#include "CK_UE.h"
7#include "Engine/DataAsset.h"
8#include "GameplayTagContainer.h"
9#include "StructUtils/InstancedStruct.h"
10#include "AudioData.generated.h"
11
12class UFMODEvent;
13
14
15USTRUCT(BlueprintType)
17{
18 GENERATED_BODY()
19
20public:
21 UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Sound")
22 TObjectPtr<UFMODEvent> SoundEvent;
23};
24
25
26USTRUCT(BlueprintType)
28{
29 GENERATED_BODY()
30
31public:
32 UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Sound")
34
35 UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Sound")
36 bool bCanQuickRestart = true;
37
38 UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Sound")
39 bool bLooping = true;
40
41 UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Sound")
42 bool bIsBgm = false;
43
44 UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Sound|Bgm", meta = (EditCondition = "bIsBgm", EditConditionHides))
45 bool bLevelChangeContinue = true;
46
47#if WITH_EDITORONLY_DATA
48
49private:
50 UPROPERTY(EditDefaultsOnly, Category = "Sound")
51 FString Description = "";
52#endif
53};
54
55
56USTRUCT(BlueprintType)
58{
59 GENERATED_BODY()
60};
61
62
63USTRUCT(BlueprintType)
65{
66 GENERATED_BODY()
67
68public:
69 UPROPERTY(EditDefaultsOnly, Category = "Audio", meta = (Categories = "Audio"))
70 TMap<FGameplayTag, FAudioTagData> SoundMap;
71};
72
73
74UCLASS(BlueprintType)
75class CK_UE_API UAudioData : public UDataAsset
76{
77 GENERATED_BODY()
78
79public:
80 UFUNCTION(BlueprintCallable, Category = "Audio|Data")
81 bool FindAudioData(FGameplayTag AudioTag, FAudioTagData& OutData) const;
82
83 template <typename TMapData, typename TEntry>
84 bool FindAudioDataByType(FGameplayTag AudioTag, TEntry& OutData) const;
85
86protected:
87 UPROPERTY(EditDefaultsOnly, Category = "Sound", meta = (BaseStruct = "/Script/CK_UE.SoundDataExtension", ExcludeBaseStruct))
88 FInstancedStruct SoundData;
89};
90
91
92template <typename TMapData, typename TEntry>
93inline bool UAudioData::FindAudioDataByType(const FGameplayTag AudioTag, TEntry& OutData) const
94{
95 if (AudioTag.IsValid() == false)
96 {
97 LOG_WARNING(LogCK, "%s이 유효하지 않습니다. ", NAMEOF_VAR(AudioTag));
98 return false;
99 }
100
101 const TMapData* MapData = SoundData.GetPtr<TMapData>();
102
103 if (MapData == nullptr)
104 {
105 LOG_WARNING(LogCK, "%s를 찾지 못했습니다. ", NAMEOF(TMapData));
106 return false;
107 }
108
109 const TEntry* FoundData = MapData->SoundMap.Find(AudioTag);
110
111 if (FoundData == nullptr)
112 {
113 return false;
114 }
115 else if (FoundData->AudioData.SoundEvent == nullptr)
116 {
117 LOG_WARNING(LogCK, "'%s' 에 대응하는 사운드 이벤트를 찾지 못했습니다. ", *AudioTag.ToString());
118 return false;
119 }
120 else
121 {
122 OutData = *FoundData;
123 return true;
124 }
125}
#define NAMEOF_VAR(Expr)
Definition CK_UE.h:34
#define NAMEOF(Type)
Definition CK_UE.h:30
#define LOG_WARNING(Category, Format,...)
Definition CK_UE.h:39
Definition AudioData.h:76
Definition AudioData.h:28
Definition AudioData.h:65
Definition AudioData.h:58
Definition AudioData.h:17