You've already forked LuckyWorld
fixed build issues, added binaries, and updated the AsyncLoadingScreen plugin directory
This commit is contained in:
@ -1,4 +1,4 @@
|
||||
// Copyright 2023 RLoris
|
||||
// Copyright 2025 RLoris
|
||||
|
||||
#pragma once
|
||||
|
||||
@ -6,6 +6,7 @@
|
||||
#include "Kismet/BlueprintFunctionLibrary.h"
|
||||
#include "FileHelperBPLibrary.generated.h"
|
||||
|
||||
class FConfigFile;
|
||||
class UDataTable;
|
||||
|
||||
USTRUCT(BlueprintType)
|
||||
@ -13,25 +14,24 @@ struct FCustomNodeStat
|
||||
{
|
||||
GENERATED_BODY()
|
||||
|
||||
public:
|
||||
UPROPERTY(BlueprintReadOnly, Category = "FileHelper|FileSystem")
|
||||
bool IsDirectory;
|
||||
|
||||
|
||||
UPROPERTY(BlueprintReadOnly, Category = "FileHelper|FileSystem")
|
||||
bool IsReadOnly;
|
||||
|
||||
|
||||
UPROPERTY(BlueprintReadOnly, Category = "FileHelper|FileSystem")
|
||||
FDateTime LastAccessTime;
|
||||
|
||||
|
||||
UPROPERTY(BlueprintReadOnly, Category = "FileHelper|FileSystem")
|
||||
FDateTime CreationTime;
|
||||
|
||||
|
||||
UPROPERTY(BlueprintReadOnly, Category = "FileHelper|FileSystem")
|
||||
FDateTime ModificationTime;
|
||||
|
||||
|
||||
UPROPERTY(BlueprintReadOnly, Category = "FileHelper|FileSystem")
|
||||
int64 FileSize;
|
||||
|
||||
|
||||
FCustomNodeStat()
|
||||
: IsDirectory(false)
|
||||
, IsReadOnly(false)
|
||||
@ -46,38 +46,37 @@ USTRUCT(BlueprintType)
|
||||
struct FProjectPath
|
||||
{
|
||||
GENERATED_BODY()
|
||||
|
||||
public:
|
||||
|
||||
UPROPERTY(BlueprintReadOnly, Category = "FileHelper|Path")
|
||||
FString Directory;
|
||||
|
||||
|
||||
UPROPERTY(BlueprintReadOnly, Category = "FileHelper|Path")
|
||||
FString Config;
|
||||
|
||||
|
||||
UPROPERTY(BlueprintReadOnly, Category = "FileHelper|Path")
|
||||
FString Content;
|
||||
|
||||
|
||||
UPROPERTY(BlueprintReadOnly, Category = "FileHelper|Path")
|
||||
FString Intermediate;
|
||||
|
||||
|
||||
UPROPERTY(BlueprintReadOnly, Category = "FileHelper|Path")
|
||||
FString Log;
|
||||
|
||||
|
||||
UPROPERTY(BlueprintReadOnly, Category = "FileHelper|Path")
|
||||
FString Mods;
|
||||
|
||||
|
||||
UPROPERTY(BlueprintReadOnly, Category = "FileHelper|Path")
|
||||
FString Plugins;
|
||||
|
||||
|
||||
UPROPERTY(BlueprintReadOnly, Category = "FileHelper|Path")
|
||||
FString Saved;
|
||||
|
||||
|
||||
UPROPERTY(BlueprintReadOnly, Category = "FileHelper|Path")
|
||||
FString User;
|
||||
|
||||
|
||||
UPROPERTY(BlueprintReadOnly, Category = "FileHelper|Path")
|
||||
FString PersistentDownload;
|
||||
|
||||
|
||||
UPROPERTY(BlueprintReadOnly, Category = "FileHelper|Path")
|
||||
FString PlatformExtensions;
|
||||
};
|
||||
@ -86,35 +85,34 @@ USTRUCT(BlueprintType)
|
||||
struct FEnginePath
|
||||
{
|
||||
GENERATED_BODY()
|
||||
|
||||
public:
|
||||
|
||||
UPROPERTY(BlueprintReadOnly, Category = "FileHelper|Path")
|
||||
FString Directory;
|
||||
|
||||
|
||||
UPROPERTY(BlueprintReadOnly, Category = "FileHelper|Path")
|
||||
FString Config;
|
||||
|
||||
|
||||
UPROPERTY(BlueprintReadOnly, Category = "FileHelper|Path")
|
||||
FString Content;
|
||||
|
||||
|
||||
UPROPERTY(BlueprintReadOnly, Category = "FileHelper|Path")
|
||||
FString Intermediate;
|
||||
|
||||
|
||||
UPROPERTY(BlueprintReadOnly, Category = "FileHelper|Path")
|
||||
FString Plugins;
|
||||
|
||||
|
||||
UPROPERTY(BlueprintReadOnly, Category = "FileHelper|Path")
|
||||
FString Saved;
|
||||
|
||||
|
||||
UPROPERTY(BlueprintReadOnly, Category = "FileHelper|Path")
|
||||
FString User;
|
||||
|
||||
|
||||
UPROPERTY(BlueprintReadOnly, Category = "FileHelper|Path")
|
||||
FString DefaultLayout;
|
||||
|
||||
|
||||
UPROPERTY(BlueprintReadOnly, Category = "FileHelper|Path")
|
||||
FString PlatformExtensions;
|
||||
|
||||
|
||||
UPROPERTY(BlueprintReadOnly, Category = "FileHelper|Path")
|
||||
FString UserLayout;
|
||||
};
|
||||
@ -123,132 +121,131 @@ UCLASS()
|
||||
class UFileHelperBPLibrary : public UBlueprintFunctionLibrary
|
||||
{
|
||||
GENERATED_BODY()
|
||||
|
||||
|
||||
public:
|
||||
/* Paths */
|
||||
/* Path */
|
||||
UFUNCTION(BlueprintPure, meta = (DisplayName = "GetEngineDirectories", CompactNodeTitle = "EngineDirs", Keywords = "File plugin path engine directory", ToolTip = "Gets the engine directories"), Category = "FileHelper|Path")
|
||||
static FEnginePath GetEngineDirectories();
|
||||
|
||||
|
||||
UFUNCTION(BlueprintPure, meta = (DisplayName = "GetProjectDirectories", CompactNodeTitle = "ProjectDirs", Keywords = "File plugin path project directory", ToolTip = "Gets the project directories"), Category = "FileHelper|Path")
|
||||
static FProjectPath GetProjectDirectories();
|
||||
|
||||
/* Text file */
|
||||
|
||||
/* File */
|
||||
UFUNCTION(BlueprintCallable, meta = (DisplayName = "ReadTextFile", CompactNodeTitle = "ReadText", Keywords = "File plugin read text", ToolTip = "Read a standard text file"), Category = "FileHelper|File|Text")
|
||||
static bool ReadText(FString Path, FString& Output);
|
||||
|
||||
|
||||
UFUNCTION(BlueprintCallable, meta = (DisplayName = "WriteTextFile", CompactNodeTitle = "WriteText", Keywords = "File plugin write text", ToolTip = "Save a standard text file"), Category = "FileHelper|File|Text")
|
||||
static bool SaveText(FString Path, FString Text, FString& Error, bool Append = false, bool Force = false);
|
||||
|
||||
|
||||
UFUNCTION(BlueprintCallable, meta = (DisplayName = "ReadLineFile", CompactNodeTitle = "ReadLine", Keywords = "File plugin read text lines pattern", ToolTip = "Read the lines of a standard text file"), Category = "FileHelper|File|Text")
|
||||
static bool ReadLine(FString Path, FString Pattern, TArray<FString>& Lines);
|
||||
|
||||
|
||||
UFUNCTION(BlueprintCallable, meta = (DisplayName = "ReadLineRangeFile", CompactNodeTitle = "ReadLineRange", Keywords = "File plugin read text lines range", ToolTip = "Read range of lines of a standard text file"), Category = "FileHelper|File|Text")
|
||||
static bool ReadLineRange(FString InPath, TArray<FString>& OutLines, int32 InStartIdx = 0, int32 InEndIdx = -1);
|
||||
|
||||
|
||||
UFUNCTION(BlueprintCallable, meta = (DisplayName = "WriteLineFile", CompactNodeTitle = "WriteLine", Keywords = "File plugin write text lines", ToolTip = "Save lines in a standard text file"), Category = "FileHelper|File|Text")
|
||||
static bool SaveLine(FString Path, const TArray<FString>& Text, FString& Error, bool Append = false, bool Force = false);
|
||||
|
||||
|
||||
UFUNCTION(BlueprintCallable, meta = (DisplayName = "ReadByteFile", CompactNodeTitle = "ReadByte", Keywords = "File plugin read byte", ToolTip = "Read byte file"), Category = "FileHelper|File|Byte")
|
||||
static bool ReadByte(FString Path, TArray<uint8>& Bytes);
|
||||
|
||||
|
||||
UFUNCTION(BlueprintCallable, meta = (DisplayName = "WriteByteFile", CompactNodeTitle = "WriteByte", Keywords = "File plugin write byte", ToolTip = "Save byte to file"), Category = "FileHelper|File|Byte")
|
||||
static bool SaveByte(FString Path, const TArray<uint8>& Bytes, FString& Error, bool Append = false, bool Force = false);
|
||||
|
||||
/* Base64 */
|
||||
UFUNCTION(BlueprintPure, meta = (DisplayName = "BytesToBase64", CompactNodeTitle = "ToBase64", Keywords = "File plugin bytes convert base64 encode", ToolTip = "Encodes a byte array to base64"), Category = "FileHelper|File|Byte")
|
||||
static FString BytesToBase64(const TArray<uint8> Bytes);
|
||||
|
||||
UFUNCTION(BlueprintPure, meta = (DisplayName = "BytesFromBase64", CompactNodeTitle = "FromBase64", Keywords = "File plugin bytes convert base64 decode", ToolTip = "Decodes a byte array from base64"), Category = "FileHelper|File|Byte")
|
||||
static bool BytesFromBase64(const FString Source, TArray<uint8>& Out);
|
||||
|
||||
/* CSV file */
|
||||
|
||||
UFUNCTION(BlueprintCallable, meta = (DisplayName = "WriteCSVFile", CompactNodeTitle = "WriteCSV", Keywords = "File plugin write csv", ToolTip = "Save a csv file"), Category = "FileHelper|File|CSV")
|
||||
static bool SaveCSV(FString Path, TArray<FString> Headers, TArray<FString> Data, int32& Total, bool Force = false);
|
||||
|
||||
|
||||
UFUNCTION(BlueprintCallable, meta = (DisplayName = "ReadCSVFile", CompactNodeTitle = "ReadCSV", Keywords = "File plugin read csv", ToolTip = "Read a csv file"), Category = "FileHelper|File|CSV")
|
||||
static bool ReadCSV(FString Path, TArray<FString>& Headers, TArray<FString>& Data, int32& Total, bool HeaderFirst = true);
|
||||
|
||||
|
||||
/* Network */
|
||||
UFUNCTION(BlueprintPure, meta = (DisplayName = "BytesToBase64", CompactNodeTitle = "ToBase64", Keywords = "File plugin bytes convert base64 encode", ToolTip = "Encodes a byte array to base64"), Category = "FileHelper|File|Byte")
|
||||
static FString BytesToBase64(const TArray<uint8> Bytes);
|
||||
|
||||
UFUNCTION(BlueprintPure, meta = (DisplayName = "BytesFromBase64", CompactNodeTitle = "FromBase64", Keywords = "File plugin bytes convert base64 decode", ToolTip = "Decodes a byte array from base64"), Category = "FileHelper|File|Byte")
|
||||
static bool BytesFromBase64(const FString Source, TArray<uint8>& Out);
|
||||
|
||||
/* CSV convert */
|
||||
UFUNCTION(BlueprintCallable, meta = (DisplayName = "StringToCSV", CompactNodeTitle = "StrToCSV", Keywords = "File plugin string csv", ToolTip = "convert a string to csv"), Category = "FileHelper|CSV")
|
||||
static bool StringToCSV(FString Content, TArray<FString>& Headers, TArray<FString>& Data, int32& Total, bool HeaderFirst = true);
|
||||
|
||||
|
||||
UFUNCTION(BlueprintCallable, meta = (DisplayName = "CSVToString", CompactNodeTitle = "CSVToStr", Keywords = "File plugin csv string", ToolTip = "convert a csv to string"), Category = "FileHelper|CSV")
|
||||
static bool CSVToString(FString& Result, TArray<FString> Headers, TArray<FString> Data, int32& Total);
|
||||
|
||||
|
||||
/* File system */
|
||||
UFUNCTION(BlueprintCallable, meta = (DisplayName = "IsFile", CompactNodeTitle = "IsFile", Keywords = "File plugin check file exist", ToolTip = "Check whether a file exists"), Category = "FileHelper|FileSystem")
|
||||
static bool IsFile(FString Path);
|
||||
|
||||
|
||||
UFUNCTION(BlueprintCallable, meta = (DisplayName = "IsDirectory", CompactNodeTitle = "IsDir", Keywords = "File plugin check directory exist", ToolTip = "Check whether a directory exists"), Category = "FileHelper|FileSystem")
|
||||
static bool IsDirectory(FString Path);
|
||||
|
||||
|
||||
UFUNCTION(BlueprintPure, meta = (DisplayName = "IsValidFilename", CompactNodeTitle = "IsValidName", Keywords = "File plugin check filename valid", ToolTip = "Check whether a filename is valid and can be used"), Category = "FileHelper|FileSystem")
|
||||
static bool IsValidFilename(FString Filename);
|
||||
|
||||
|
||||
UFUNCTION(BlueprintPure, meta = (DisplayName = "IsValidPath", CompactNodeTitle = "IsValidPath", Keywords = "File plugin check path valid", ToolTip = "Check whether a path is valid and can be used"), Category = "FileHelper|FileSystem")
|
||||
static bool IsValidPath(FString Path);
|
||||
|
||||
|
||||
UFUNCTION(BlueprintPure, meta = (DisplayName = "ValidateFilename", CompactNodeTitle = "ValidateName", Keywords = "File plugin validate path", ToolTip = "Validate a filename to be used on this file system"), Category = "FileHelper|FileSystem")
|
||||
static bool ValidateFilename(FString Filename, FString& ValidName);
|
||||
|
||||
|
||||
UFUNCTION(BlueprintCallable, meta = (DisplayName = "SetReadOnlyFlag", CompactNodeTitle = "SetReadOnly", Keywords = "File plugin read only path", ToolTip = "Updates the read only property on file"), Category = "FileHelper|FileSystem")
|
||||
static bool SetReadOnlyFlag(FString FilePath, bool Flag);
|
||||
|
||||
|
||||
UFUNCTION(BlueprintCallable, meta = (DisplayName = "GetReadOnlyFlag", CompactNodeTitle = "IsReadOnly", Keywords = "File plugin read only path", ToolTip = "Gets the read only property on file"), Category = "FileHelper|FileSystem")
|
||||
static bool GetReadOnlyFlag(FString FilePath);
|
||||
|
||||
|
||||
UFUNCTION(BlueprintCallable, meta = (DisplayName = "GetFileSize", CompactNodeTitle = "GetSize", Keywords = "File plugin size directory", ToolTip = "Gets the size of a file"), Category = "FileHelper|FileSystem")
|
||||
static int64 GetFileSize(FString FilePath);
|
||||
|
||||
|
||||
UFUNCTION(BlueprintCallable, meta = (DisplayName = "ListDirectory", CompactNodeTitle = "LsDir", Keywords = "File plugin list directory pattern regex recursive", ToolTip = "List nodes from directory"), Category = "FileHelper|FileSystem")
|
||||
static bool ListDirectory(FString Path, FString Pattern, TArray<FString>& Nodes, bool ShowFile = true, bool ShowDirectory = true, bool Recursive = false);
|
||||
|
||||
|
||||
UFUNCTION(BlueprintCallable, meta = (DisplayName = "MakeDirectory", CompactNodeTitle = "MkDir", Keywords = "File plugin make directory recursive", ToolTip = "Create a new directory"), Category = "FileHelper|FileSystem")
|
||||
static bool MakeDirectory(FString Path, bool Recursive = true);
|
||||
|
||||
|
||||
UFUNCTION(BlueprintCallable, meta = (DisplayName = "RemoveDirectory", CompactNodeTitle = "RmDir", Keywords = "File plugin remove directory recursive", ToolTip = "Removes a directory"), Category = "FileHelper|FileSystem")
|
||||
static bool RemoveDirectory(FString Path, bool Recursive = false);
|
||||
|
||||
|
||||
UFUNCTION(BlueprintCallable, meta = (DisplayName = "CopyDirectory", CompactNodeTitle = "CpDir", Keywords = "File plugin copy directory recursive", ToolTip = "Copies a directory"), Category = "FileHelper|FileSystem")
|
||||
static bool CopyDirectory(FString Source, FString Dest);
|
||||
|
||||
|
||||
UFUNCTION(BlueprintCallable, meta = (DisplayName = "MoveDirectory", CompactNodeTitle = "MvDir", Keywords = "File plugin move directory recursive", ToolTip = "Moves a directory"), Category = "FileHelper|FileSystem")
|
||||
static bool MoveDirectory(FString Source, FString Dest);
|
||||
|
||||
|
||||
UFUNCTION(BlueprintCallable, meta = (DisplayName = "NodeStats", CompactNodeTitle = "NodeStats", Keywords = "File plugin stats directory node", ToolTip = "Gets the stats of a node"), Category = "FileHelper|FileSystem")
|
||||
static bool NodeStats(FString Path, FCustomNodeStat& Stats);
|
||||
|
||||
|
||||
UFUNCTION(BlueprintCallable, meta = (DisplayName = "RemoveFile", CompactNodeTitle = "RmFile", Keywords = "File plugin remove file recursive", ToolTip = "Removes a file"), Category = "FileHelper|FileSystem")
|
||||
static bool RemoveFile(FString Path);
|
||||
|
||||
|
||||
UFUNCTION(BlueprintCallable, meta = (DisplayName = "CopyFile", CompactNodeTitle = "CpFile", Keywords = "File plugin copy file recursive", ToolTip = "Copies a file"), Category = "FileHelper|FileSystem")
|
||||
static bool CopyFile(FString Source, FString Dest, bool Force = false);
|
||||
|
||||
|
||||
UFUNCTION(BlueprintCallable, meta = (DisplayName = "MoveFile", CompactNodeTitle = "MvFile", Keywords = "File plugin move file recursive", ToolTip = "Moves a file"), Category = "FileHelper|FileSystem")
|
||||
static bool MoveFile(FString Source, FString Dest, bool Force = false);
|
||||
|
||||
|
||||
UFUNCTION(BlueprintCallable, meta = (DisplayName = "RenameFile", CompactNodeTitle = "RenameFile", Keywords = "File plugin rename file recursive", ToolTip = "Renames a file"), Category = "FileHelper|FileSystem")
|
||||
static bool RenameFile(FString Path, FString NewName);
|
||||
|
||||
|
||||
UFUNCTION(BlueprintPure, meta = (DisplayName = "PathParts", Keywords = "File plugin path parts", ToolTip = "Gets the parts of a path"), Category = "FileHelper|FileSystem")
|
||||
static void GetPathParts(FString Path, FString& PathPart, FString& BasePart, FString& ExtensionPart, FString& FileName);
|
||||
|
||||
|
||||
/* Datatable */
|
||||
UFUNCTION(BlueprintCallable, meta = (DisplayName = "DataTableToCSV", Keywords = "File plugin datatable csv convert export", ToolTip = "Converts a datatable to csv string"), Category = "FileHelper|Datatable")
|
||||
static bool DatatableToCSV(UDataTable* Table, FString& Output);
|
||||
|
||||
|
||||
UFUNCTION(BlueprintCallable, meta = (DisplayName = "DataTableToJSON", Keywords = "File plugin datatable json convert export", ToolTip = "Converts a datatable to json string"), Category = "FileHelper|Datatable")
|
||||
static bool DataTableToJSON(UDataTable* Table, FString& Output);
|
||||
|
||||
|
||||
UFUNCTION(BlueprintCallable, meta = (DisplayName = "CSVToDataTable", Keywords = "File plugin datatable csv convert import", ToolTip = "Converts a csv string to datatable"), Category = "FileHelper|Datatable")
|
||||
static UDataTable* CSVToDataTable(FString CSV, UScriptStruct* Struct, bool& Success);
|
||||
|
||||
|
||||
UFUNCTION(BlueprintCallable, meta = (DisplayName = "JSONToDataTable", Keywords = "File plugin datatable json convert import", ToolTip = "Converts a json string to datatable"), Category = "FileHelper|Datatable")
|
||||
static UDataTable* JSONToDataTable(FString JSON, UScriptStruct* Struct, bool& Success);
|
||||
|
||||
/* Config file ini */
|
||||
|
||||
/** Reads a value at a specific key in a section from a config file */
|
||||
UFUNCTION(BlueprintCallable, Category = "FileHelper|Config", CustomThunk, meta = (CustomStructureParam = "OutValue"))
|
||||
static void ReadConfig(FString FilePath, FString Section, FString Key, bool& Success, bool SingleLineArrayRead, UStruct*& OutValue, bool bLoadFromDisk = false);
|
||||
static void ReadConfig(FString FilePath, FString Section, FString Key, bool& Success, bool SingleLineArrayRead, UStruct*& OutValue);
|
||||
DECLARE_FUNCTION(execReadConfig)
|
||||
{
|
||||
P_GET_PROPERTY(FStrProperty, FilePath);
|
||||
@ -262,15 +259,14 @@ public:
|
||||
FProperty* Property = Stack.MostRecentProperty;
|
||||
void* ValuePtr = Stack.MostRecentPropertyAddress;
|
||||
|
||||
P_GET_UBOOL(bLoadFromDisk);
|
||||
|
||||
P_FINISH;
|
||||
|
||||
Success = UFileHelperBPLibrary::ReadConfigFile(FilePath, Section, Key, Property, ValuePtr, SingleLineArrayRead, bLoadFromDisk);
|
||||
Success = UFileHelperBPLibrary::ReadConfigFile(FilePath, Section, Key, Property, ValuePtr, SingleLineArrayRead);
|
||||
}
|
||||
|
||||
|
||||
/** Writes a value at a specific key in a section from a config file, also creates the file when not found */
|
||||
UFUNCTION(BlueprintCallable, Category = "FileHelper|Config", CustomThunk, meta = (CustomStructureParam = "Value"))
|
||||
static void WriteConfig(FString FilePath, FString Section, FString Key, bool& Success, bool SingleLineArrayWrite, const UStruct* Value, bool bWriteToDisk = true);
|
||||
static void WriteConfig(FString FilePath, FString Section, FString Key, bool& Success, bool SingleLineArrayWrite, const UStruct* Value);
|
||||
DECLARE_FUNCTION(execWriteConfig)
|
||||
{
|
||||
P_GET_PROPERTY(FStrProperty, FilePath);
|
||||
@ -284,23 +280,24 @@ public:
|
||||
FProperty* Property = Stack.MostRecentProperty;
|
||||
void* ValuePtr = Stack.MostRecentPropertyAddress;
|
||||
|
||||
P_GET_UBOOL(bWriteToDisk);
|
||||
|
||||
P_FINISH;
|
||||
|
||||
Success = UFileHelperBPLibrary::WriteConfigFile(FilePath, Section, Key, Property, ValuePtr, SingleLineArrayWrite, bWriteToDisk);
|
||||
Success = UFileHelperBPLibrary::WriteConfigFile(FilePath, Section, Key, Property, ValuePtr, SingleLineArrayWrite);
|
||||
}
|
||||
|
||||
|
||||
/** Removes a specific key in a section from a config file, also deletes the file when empty */
|
||||
UFUNCTION(BlueprintCallable, Category = "FileHelper|Config")
|
||||
static bool RemoveConfig(FString FilePath, FString Section, FString Key, bool bWriteToDisk);
|
||||
|
||||
static bool RemoveConfig(FString FilePath, FString Section, FString Key);
|
||||
|
||||
protected:
|
||||
/* Utility */
|
||||
static TArray<FString> SplitString(FString String, FString Separator, ESearchCase::Type SearchCase);
|
||||
static bool StringArrayToCSV(TArray<FString> Lines, TArray<FString>& Headers, TArray<FString>& Data, int32& Total, FString Delimiter = ",", bool HeaderFirst = true);
|
||||
// config ini
|
||||
static bool WriteConfigFile(FString Filename, FString Section, FString Key, FProperty* Type, void* Value, bool SingleLineArray, bool bWriteToDisk);
|
||||
static bool ReadConfigFile(FString Filename, FString Section, FString Key, FProperty* Type, void* Value, bool SingleLineArray, bool bLoadFromDisk);
|
||||
static bool WriteConfigFile(FString Filename, FString Section, FString Key, FProperty* Type, void* Value, bool SingleLineArray);
|
||||
static bool ReadConfigFile(FString Filename, FString Section, FString Key, FProperty* Type, void* Value, bool SingleLineArray);
|
||||
static void FindOrCreateConfigFile(const FString& InFilePath, FConfigFile& OutConfigFile);
|
||||
static bool SaveConfigFile(const FString& InFilePath);
|
||||
// datatable csv
|
||||
static bool WriteTableToCSV(const UDataTable& InDataTable, FString& Output);
|
||||
static bool WriteRowToCSV(const UScriptStruct* InRowStruct, const void* InRowData, FString& ExportedText);
|
||||
|
@ -1,37 +1,53 @@
|
||||
// Copyright 2023 RLoris
|
||||
// Copyright 2025 RLoris
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "Async/Future.h"
|
||||
#include "Engine/Texture2D.h"
|
||||
#include "Engine/World.h"
|
||||
#include "Kismet/BlueprintAsyncActionBase.h"
|
||||
#include "Misc/Paths.h"
|
||||
#include "FileHelperScreenshotAction.generated.h"
|
||||
|
||||
namespace ECameraProjectionMode
|
||||
{
|
||||
enum Type : int;
|
||||
}
|
||||
|
||||
USTRUCT(BlueprintType)
|
||||
struct FFileHelperScreenshotActionOptions
|
||||
{
|
||||
GENERATED_BODY()
|
||||
|
||||
/** File name without extension or path information */
|
||||
UPROPERTY(BlueprintReadWrite, Category = "Screenshot")
|
||||
/** Directory path where to store screenshot */
|
||||
UPROPERTY(BlueprintReadWrite, Category = "FileHelper|Screenshot")
|
||||
FString DirectoryPath = FPaths::ScreenShotDir();
|
||||
|
||||
/** File name without extension or path information, extension will be added internally (.png or .exr) */
|
||||
UPROPERTY(BlueprintReadWrite, Category = "FileHelper|Screenshot")
|
||||
FString Filename;
|
||||
|
||||
/** Prefix filename with a custom timestamp */
|
||||
UPROPERTY(BlueprintReadWrite, Category = "Screenshot")
|
||||
UPROPERTY(BlueprintReadWrite, Category = "FileHelper|Screenshot")
|
||||
bool bPrefixTimestamp = true;
|
||||
|
||||
/** Include the UI in the screenshot */
|
||||
UPROPERTY(BlueprintReadWrite, Category = "Screenshot")
|
||||
/** Include the viewport UI in the screenshot, only used when CustomCameraActor is not provided */
|
||||
UPROPERTY(BlueprintReadWrite, Category = "FileHelper|Screenshot")
|
||||
bool bShowUI = false;
|
||||
|
||||
/** Uses this option only if the scene has HDR enabled,
|
||||
* extension of screenshot file will be exr instead of png */
|
||||
UPROPERTY(BlueprintReadWrite, Category = "Screenshot")
|
||||
/**
|
||||
* Uses this option only if the scene has HDR enabled,
|
||||
* extension of screenshot file will be exr instead of png,
|
||||
* if the scene is not using HDR, fallback to png
|
||||
*/
|
||||
UPROPERTY(BlueprintReadWrite, Category = "FileHelper|Screenshot")
|
||||
bool bWithHDR = false;
|
||||
|
||||
/* Leave this empty for default screenshot,
|
||||
* a different type of screenshot will be taken with a render target if set,
|
||||
* options and settings quality may differ from regular screenshot, no UI shown */
|
||||
/**
|
||||
* Leave this empty for default viewport screenshot,
|
||||
* if set, a different type of screenshot will be taken from a different perspective,
|
||||
* options and settings quality may differ from regular screenshot, no UI is shown
|
||||
*/
|
||||
UPROPERTY(BlueprintReadWrite, Category = "Screenshot")
|
||||
TObjectPtr<ACameraActor> CustomCameraActor = nullptr;
|
||||
};
|
||||
@ -43,43 +59,52 @@ class FILEHELPER_API UFileHelperScreenshotAction : public UBlueprintAsyncActionB
|
||||
|
||||
public:
|
||||
DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams(FOutputPin, UTexture2D*, Screenshot, FString, Path);
|
||||
|
||||
|
||||
UPROPERTY(BlueprintAssignable)
|
||||
FOutputPin Completed;
|
||||
|
||||
|
||||
UPROPERTY(BlueprintAssignable)
|
||||
FOutputPin Failed;
|
||||
|
||||
UFUNCTION(BlueprintCallable, meta = (BlueprintInternalUseOnly = "true", WorldContext = "InWorldContextObject", Keywords = "File plugin screenshot save load texture", ToolTip = "Take a screenshot, save and load it"), Category = "Screenshot")
|
||||
static UFileHelperScreenshotAction* TakeScreenshot(UObject* InWorldContextObject, const FFileHelperScreenshotActionOptions& InOptions);
|
||||
UFUNCTION(BlueprintCallable, meta = (BlueprintInternalUseOnly = "true", Keywords = "File plugin screenshot save load texture", ToolTip = "Take a screenshot, save and load it"), Category = "FileHelper|Screenshot")
|
||||
static UFileHelperScreenshotAction* TakeScreenshot(const FFileHelperScreenshotActionOptions& InOptions);
|
||||
|
||||
UFUNCTION(BlueprintCallable, meta = (Keywords = "screenshot load texture FileHelper", ToolTip = "Load a screenshot into a texture"), Category = "Screenshot")
|
||||
UFUNCTION(BlueprintCallable, meta = (Keywords = "screenshot load texture FileHelper", ToolTip = "Load a screenshot into a texture"), Category = "FileHelper|Screenshot")
|
||||
static UTexture2D* LoadScreenshot(const FString& InFilePath);
|
||||
|
||||
virtual void Activate() override;
|
||||
|
||||
private:
|
||||
UFUNCTION()
|
||||
//~ Begin UBlueprintAsyncActionBase
|
||||
virtual void Activate() override;
|
||||
//~ End UBlueprintAsyncActionBase
|
||||
|
||||
void OnTaskCompleted();
|
||||
|
||||
void OnTaskFailed();
|
||||
|
||||
|
||||
void CreateCustomCameraScreenshot();
|
||||
void CreateViewportScreenshot();
|
||||
void CreatePlayerPOVScreenshot();
|
||||
void CreateRenderTargetScreenshot(UWorld* InWorld, float InFOV, ECameraProjectionMode::Type InProjectionMode, float InOrthoWidth, const FVector& InLocation, const FRotator& InRotation, int32 InWidth, int32 InHeight);
|
||||
|
||||
void ConvertLinearColorToColorBuffer(const TArray<FLinearColor>& InSourceBuffer, TArray<FColor>& OutDestBuffer);
|
||||
bool WriteColorBufferToDisk(const TArray<FColor>& InBuffer, int32 InWidth, int32 InHeight, UTexture2D*& OutTexture) const;
|
||||
TFuture<bool> WriteLinearColorBufferToDiskAsync(TArray<FLinearColor>&& InBuffer, int32 InWidth, int32 InHeight);
|
||||
TFuture<bool> WriteColorBufferToDiskAsync(TArray<FColor>&& InBuffer, int32 InWidth, int32 InHeight);
|
||||
|
||||
void Reset();
|
||||
|
||||
UPROPERTY()
|
||||
TObjectPtr<UObject> WorldContextObject;
|
||||
|
||||
/** Final screenshot texture */
|
||||
UPROPERTY()
|
||||
TObjectPtr<UTexture2D> ScreenshotTexture;
|
||||
|
||||
/** Screenshot options */
|
||||
UPROPERTY()
|
||||
FFileHelperScreenshotActionOptions Options;
|
||||
|
||||
/** The file path of the new screenshot taken */
|
||||
UPROPERTY()
|
||||
FString FilePath;
|
||||
|
||||
/** Is this node active */
|
||||
UPROPERTY()
|
||||
bool bActive = false;
|
||||
};
|
||||
|
Reference in New Issue
Block a user