1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- // 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<FString> UMyBlueprintFunctionLibrary::GetCode(const FString& Condition)
- {
- std::regex pattern("\\w{2,26}");
- std::smatch match;
- TArray<FString> 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<FString>& ProductCodeList, const FString& Condition)
- {
- FString condition = Condition;
- TArray<FString> 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);
- }
|