// Fill out your copyright notice in the Description page of Project Settings. #include "MyBlueprintFunctionLibrary.h" #include "Internationalization/Regex.h" void UMyBlueprintFunctionLibrary::AdjustViewportSize(float OriginX, float OriginY, float SizeX, float SizeY) { GEngine->GameViewport->SplitscreenInfo[0].PlayerData[0].OriginX = OriginX; // default: 0.f GEngine->GameViewport->SplitscreenInfo[0].PlayerData[0].OriginY = OriginY; // default: 0.f GEngine->GameViewport->SplitscreenInfo[0].PlayerData[0].SizeX = SizeX; // default 1.f GEngine->GameViewport->SplitscreenInfo[0].PlayerData[0].SizeY = SizeY; // default 1.f } FColor UMyBlueprintFunctionLibrary::HexToColor(FString HexString) { return FColor::FromHex(HexString); } TArray UMyBlueprintFunctionLibrary::GetCode(const FString& Condition) { std::regex pattern("\\w{2,26}"); std::smatch match; TArray code_list; std::string conditionString = TCHAR_TO_UTF8(*Condition); std::string::const_iterator search_start(conditionString.cbegin()); while (std::regex_search(search_start, conditionString.cend(), match, pattern)) { FString code(match[0].str().c_str()); code_list.Add(code); search_start = match.suffix().first; } code_list.Sort([](const FString& a, const FString& b) { return a.Len() > b.Len(); }); return code_list; } FString UMyBlueprintFunctionLibrary::ReplaceBoolean(const FString& Condition) { FString result = Condition.Replace(TEXT("|"), TEXT("or")); result = result.Replace(TEXT("&"), TEXT("and")); result = result.Replace(TEXT("!"), TEXT("not ")); return result; } bool UMyBlueprintFunctionLibrary::Solver(const TArray& ProductCodeList, const FString& Condition) { FString condition = Condition; TArray condition_code = GetCode(condition); check(condition_code.Num() > 0); for (const FString& p_code : condition_code) { if (ProductCodeList.Contains(p_code)) { condition = condition.Replace(*p_code, TEXT("True")); } else { condition = condition.Replace(*p_code, TEXT("False")); } } FString resultString = ReplaceBoolean(condition); std::string result = TCHAR_TO_UTF8(*resultString); return std::stoi(result); }