105 lines
3.9 KiB
C++
105 lines
3.9 KiB
C++
// Fill out your copyright notice in the Description page of Project Settings.
|
|
|
|
|
|
#include "BusyGamePlayLibrary.h"
|
|
#include "BusyDataAsset.h"
|
|
|
|
static inline const UBusyDataAsset* GetGameAsset() {
|
|
FSoftObjectPath AssetPath(TEXT("BusyRabbit.BusyDataAsset'/Game/Data/BusyGameAsset.BusyGameAsset'"));
|
|
return Cast<UBusyDataAsset>(AssetPath.TryLoad());
|
|
}
|
|
|
|
template<typename RowStruct>
|
|
static bool GetTableConfig(const FString& TableName, const FName& RowName, RowStruct& RowData) {
|
|
UDataTable* Table = UBusyGamePlayLibrary::GetGameDataTable(TableName);
|
|
RowStruct* Config = Table->FindRow<RowStruct>(
|
|
RowName,
|
|
*FString::Printf(TEXT("GetTableConfig, %s"), *RowName.ToString()),
|
|
true
|
|
);
|
|
if (Config != nullptr) {
|
|
RowData = *Config;
|
|
return true;
|
|
}
|
|
else {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
UDataTable* UBusyGamePlayLibrary::GetGameDataTable(const FString& TableName){
|
|
const UBusyDataAsset* GameAsset = GetGameAsset();
|
|
if (!GameAsset) return nullptr;
|
|
auto Table = (GameAsset->DataTableMapping.Find(TableName));
|
|
return Table ? Table->Get() : nullptr;
|
|
}
|
|
|
|
UClass* UBusyGamePlayLibrary::GetGameClass(const FString& ClassName){
|
|
const UBusyDataAsset* GameAsset = GetGameAsset();
|
|
if (!GameAsset) return nullptr;
|
|
auto Class = (GameAsset->ClassPathMapping.Find(ClassName));
|
|
return Class ? Class->Get() : nullptr;
|
|
}
|
|
|
|
UClass* UBusyGamePlayLibrary::GetGameUIClass(const FString& ClassName){
|
|
const UBusyDataAsset* GameAsset = GetGameAsset();
|
|
if (!GameAsset) return nullptr;
|
|
auto Class = (GameAsset->UIPathMapping.Find(ClassName));
|
|
return Class ? Class->Get() : nullptr;
|
|
}
|
|
|
|
UWorld* UBusyGamePlayLibrary::K2_GetWorld(const UObject* obj){
|
|
return obj->GetWorld();
|
|
}
|
|
|
|
bool UBusyGamePlayLibrary::GetLevelBaseConfig(const FName& RowName, FBusyLevelBaseConfig& RowData){
|
|
return GetTableConfig<FBusyLevelBaseConfig>(TEXT("LevelBaseConfig"), RowName, RowData);
|
|
}
|
|
|
|
bool UBusyGamePlayLibrary::GetLevelItemConfig(const FName& RowName, FBusyLevelItemConfig& RowData){
|
|
return GetTableConfig<FBusyLevelItemConfig>(TEXT("LevelItems"), RowName, RowData);
|
|
}
|
|
|
|
bool UBusyGamePlayLibrary::GetRoleConfig(const FName& RowName, FBusyRoleConfig& RowData){
|
|
return GetTableConfig<FBusyRoleConfig>(TEXT("RoleConfig"), RowName, RowData);
|
|
}
|
|
|
|
bool UBusyGamePlayLibrary::GetItemResourceConfig(const FName& RowName, FBusyLevelItemResourceConfig& RowData){
|
|
return GetTableConfig<FBusyLevelItemResourceConfig>(TEXT("LevelItemResource"), RowName, RowData);
|
|
}
|
|
|
|
bool UBusyGamePlayLibrary::GetLevelItemDescription(const FName& RowName, FBusyLevelItemDescription& RowData){
|
|
return GetTableConfig<FBusyLevelItemDescription>(TEXT("LevelItemDesc"), RowName, RowData);
|
|
}
|
|
|
|
bool UBusyGamePlayLibrary::GetHomelandItemDescription(const FName& RowName, FBusyHomelandItemDescription& RowData){
|
|
return GetTableConfig<FBusyHomelandItemDescription>(TEXT("HomelandItemDesc"), RowName, RowData);
|
|
}
|
|
|
|
bool UBusyGamePlayLibrary::GetItemDescription(const FName& RowName, FBusyItemDescription& RowData){
|
|
return GetTableConfig<FBusyItemDescription>(TEXT("ItemDesc"), RowName, RowData);
|
|
}
|
|
|
|
bool UBusyGamePlayLibrary::GetCookMaterialStateConfig(const FName& RowName, FBusyCookMaterialStateConfig& RowData){
|
|
return GetTableConfig<FBusyCookMaterialStateConfig>(TEXT("CookMaterialStateConfig"), RowName, RowData);
|
|
}
|
|
|
|
FLuaBPVar UBusyGamePlayLibrary::CreateTextureBuffer(UObject* WorldContextObject){
|
|
auto DataTexture = UTexture2D::CreateTransient(512, 1, PF_R32_FLOAT);
|
|
DataTexture->Filter = TF_Trilinear;
|
|
DataTexture->AddressX = TA_Clamp;
|
|
DataTexture->AddressY = TA_Clamp;
|
|
DataTexture->UpdateResource();
|
|
return ULuaBlueprintLibrary::CreateVarFromObject(WorldContextObject, DataTexture);
|
|
}
|
|
|
|
void UBusyGamePlayLibrary::UpdateTextureBuffer(UTexture2D *DataTexture, TArray<float> FloatData){
|
|
DataTexture->GetPlatformData()->Mips[0];
|
|
FTexture2DMipMap& Mip = DataTexture->GetPlatformData()->Mips[0];
|
|
void* Data = Mip.BulkData.Lock(LOCK_READ_WRITE);
|
|
|
|
FMemory::Memcpy(Data, FloatData.GetData(), FloatData.Num() * sizeof(float));
|
|
|
|
Mip.BulkData.Unlock();
|
|
DataTexture->UpdateResource();
|
|
}
|