flatdata done
This commit is contained in:
BIN
Binary file not shown.
BIN
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,7 @@
|
||||
{
|
||||
"BuildId": "27405482",
|
||||
"Modules":
|
||||
{
|
||||
"ElgBlueprintLibrary": "UnrealEditor-ElgBlueprintLibrary-Win64-DebugGame.dll"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
{
|
||||
"BuildId": "27405482",
|
||||
"Modules":
|
||||
{
|
||||
"ElgBlueprintLibrary": "UnrealEditor-ElgBlueprintLibrary.dll"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
{
|
||||
"FileVersion": 3,
|
||||
"Version": 1,
|
||||
"VersionName": "1.0",
|
||||
"FriendlyName": "ElgBlueprintLibrary",
|
||||
"Description": "Blueprint function library",
|
||||
"Category": "Other",
|
||||
"CreatedBy": "ElgSoft",
|
||||
"CreatedByURL": "ElgSoft.com",
|
||||
"DocsURL": "",
|
||||
"MarketplaceURL": "",
|
||||
"SupportURL": "",
|
||||
"EngineVersion": "5.3",
|
||||
"CanContainContent": true,
|
||||
"Installed": true,
|
||||
"Modules": [
|
||||
{
|
||||
"Name": "ElgBlueprintLibrary",
|
||||
"Type": "Runtime",
|
||||
"LoadingPhase": "PreLoadingScreen"
|
||||
}
|
||||
]
|
||||
}
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 10 KiB |
@@ -0,0 +1,53 @@
|
||||
// Some copyright should be here...
|
||||
|
||||
using UnrealBuildTool;
|
||||
|
||||
public class ElgBlueprintLibrary : ModuleRules
|
||||
{
|
||||
public ElgBlueprintLibrary(ReadOnlyTargetRules Target) : base(Target)
|
||||
{
|
||||
PCHUsage = ModuleRules.PCHUsageMode.UseExplicitOrSharedPCHs;
|
||||
|
||||
PublicIncludePaths.AddRange(
|
||||
new string[] {
|
||||
// ... add public include paths required here ...
|
||||
}
|
||||
);
|
||||
|
||||
|
||||
PrivateIncludePaths.AddRange(
|
||||
new string[] {
|
||||
// ... add other private include paths required here ...
|
||||
}
|
||||
);
|
||||
|
||||
|
||||
PublicDependencyModuleNames.AddRange(
|
||||
new string[]
|
||||
{
|
||||
"Core",
|
||||
// ... add other public dependencies that you statically link with here ...
|
||||
}
|
||||
);
|
||||
|
||||
|
||||
PrivateDependencyModuleNames.AddRange(
|
||||
new string[]
|
||||
{
|
||||
"CoreUObject",
|
||||
"Engine",
|
||||
"Slate",
|
||||
"SlateCore",
|
||||
// ... add private dependencies that you statically link with here ...
|
||||
}
|
||||
);
|
||||
|
||||
|
||||
DynamicallyLoadedModuleNames.AddRange(
|
||||
new string[]
|
||||
{
|
||||
// ... add any modules that your module loads dynamically here ...
|
||||
}
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
// Copyright 2019-2020 ElgSoft. All rights reserved.
|
||||
|
||||
|
||||
#include "ElgBP_DataTable.h"
|
||||
#include <Engine/DataTable.h>
|
||||
|
||||
|
||||
|
||||
bool UElgBP_DataTable::AddRowToDataTable(UDataTable* InDataTable, FName InRowName, UStruct* InAnyStruct)
|
||||
{
|
||||
// dummy function, it's Generic_AddRowToDataTable that are called for real
|
||||
return true;
|
||||
}
|
||||
|
||||
bool UElgBP_DataTable::Generic_AddRowToDataTable(UDataTable* InDataTable, FName InRowName, void* StructPtr)
|
||||
{
|
||||
FTableRowBase* TableRowBase = (FTableRowBase*)StructPtr;
|
||||
InDataTable->AddRow(InRowName, *TableRowBase);
|
||||
#if WITH_EDITOR
|
||||
// let the editor know that the data table has changed so it can get it's star.
|
||||
InDataTable->Modify();
|
||||
#endif
|
||||
return true;
|
||||
}
|
||||
|
||||
+22
@@ -0,0 +1,22 @@
|
||||
// Copyright Epic Games, Inc. All Rights Reserved.
|
||||
|
||||
#include "ElgBlueprintLibrary.h"
|
||||
|
||||
#define LOCTEXT_NAMESPACE "FElgBlueprintLibraryModule"
|
||||
|
||||
void FElgBlueprintLibraryModule::StartupModule()
|
||||
{
|
||||
// This code will execute after your module is loaded into memory; the exact timing is specified in the .uplugin file per-module
|
||||
|
||||
}
|
||||
|
||||
void FElgBlueprintLibraryModule::ShutdownModule()
|
||||
{
|
||||
// This function may be called during shutdown to clean up your module. For modules that support dynamic reloading,
|
||||
// we call this function before unloading the module.
|
||||
|
||||
}
|
||||
|
||||
#undef LOCTEXT_NAMESPACE
|
||||
|
||||
IMPLEMENT_MODULE(FElgBlueprintLibraryModule, ElgBlueprintLibrary)
|
||||
@@ -0,0 +1,76 @@
|
||||
// Copyright 2019-2020 ElgSoft. All rights reserved.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "CoreMinimal.h"
|
||||
#include "Kismet/BlueprintFunctionLibrary.h"
|
||||
#include <Engine/DataTable.h>
|
||||
#include "ElgBP_DataTable.generated.h"
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
UCLASS()
|
||||
class UElgBP_DataTable : public UBlueprintFunctionLibrary
|
||||
{
|
||||
GENERATED_BODY()
|
||||
|
||||
public:
|
||||
|
||||
/* Add or Edit a row in the data table */
|
||||
UFUNCTION(BlueprintCallable, CustomThunk, Category = "DataTable", meta = (CustomStructureParam = "InAnyStruct"))
|
||||
static bool AddRowToDataTable(UDataTable* InDataTable, FName InRowName, UStruct* InAnyStruct);
|
||||
|
||||
static bool Generic_AddRowToDataTable(UDataTable* InDataTable, FName InRowName, void* StructPtr);
|
||||
|
||||
/** Based on UElgBP_DataTable::AddRowToDataTable */
|
||||
DECLARE_FUNCTION(execAddRowToDataTable) {
|
||||
P_GET_OBJECT(UDataTable, InDataTable);
|
||||
P_GET_PROPERTY(FNameProperty, InRowName);
|
||||
|
||||
Stack.StepCompiledIn<FStructProperty>(NULL);
|
||||
void* StructPtr = Stack.MostRecentPropertyAddress;
|
||||
FStructProperty* StructProp = CastField<FStructProperty>(Stack.MostRecentProperty);
|
||||
UScriptStruct* InAnyStruct = StructProp->Struct;
|
||||
|
||||
P_FINISH;
|
||||
|
||||
bool bSuccess = false;
|
||||
if (!InDataTable) {
|
||||
FBlueprintExceptionInfo ExceptionInfo(
|
||||
EBlueprintExceptionType::AccessViolation, FText::FromString("Failed to resolve the table input. Be sure the InDataTable is valid.")
|
||||
);
|
||||
FBlueprintCoreDelegates::ThrowScriptException(P_THIS, Stack, ExceptionInfo);
|
||||
} else if (!InAnyStruct) {
|
||||
FBlueprintExceptionInfo ExceptionInfo(
|
||||
EBlueprintExceptionType::AccessViolation, FText::FromString("Failed to resolve the struct input. Be sure the InAnyStruct is valid.")
|
||||
);
|
||||
FBlueprintCoreDelegates::ThrowScriptException(P_THIS, Stack, ExceptionInfo);
|
||||
} else if (InRowName.IsNone()) {
|
||||
FBlueprintExceptionInfo ExceptionInfo(
|
||||
EBlueprintExceptionType::AccessViolation, FText::FromString("Be sure the InRowName is valid.")
|
||||
);
|
||||
FBlueprintCoreDelegates::ThrowScriptException(P_THIS, Stack, ExceptionInfo);
|
||||
} else {
|
||||
|
||||
const UScriptStruct* TableType = InDataTable->GetRowStruct();
|
||||
|
||||
const bool bCompatible = (InAnyStruct == TableType) || (InAnyStruct->IsChildOf(TableType) && FStructUtils::TheSameLayout(InAnyStruct, TableType));
|
||||
if (bCompatible) {
|
||||
P_NATIVE_BEGIN;
|
||||
bSuccess = Generic_AddRowToDataTable(InDataTable, InRowName, StructPtr);
|
||||
P_NATIVE_END;
|
||||
} else {
|
||||
FBlueprintExceptionInfo ExceptionInfo(
|
||||
EBlueprintExceptionType::AccessViolation, FText::FromString("The InAnyStruct is incompatible with the data table's struct.")
|
||||
);
|
||||
FBlueprintCoreDelegates::ThrowScriptException(P_THIS, Stack, ExceptionInfo);
|
||||
}
|
||||
}
|
||||
|
||||
*(bool*)RESULT_PARAM = bSuccess;
|
||||
}
|
||||
|
||||
#pragma endregion
|
||||
|
||||
};
|
||||
@@ -0,0 +1,14 @@
|
||||
// Copyright Epic Games, Inc. All Rights Reserved.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "Modules/ModuleManager.h"
|
||||
|
||||
class FElgBlueprintLibraryModule : public IModuleInterface
|
||||
{
|
||||
public:
|
||||
|
||||
/** IModuleInterface implementation */
|
||||
virtual void StartupModule() override;
|
||||
virtual void ShutdownModule() override;
|
||||
};
|
||||
Reference in New Issue
Block a user