MyBlueprintFunctionLibrary.cpp 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. // Fill out your copyright notice in the Description page of Project Settings.
  2. #include "MyBlueprintFunctionLibrary.h"
  3. #include "Internationalization/Regex.h"
  4. void UMyBlueprintFunctionLibrary::AdjustViewportSize(float OriginX, float OriginY, float SizeX, float SizeY)
  5. {
  6. GEngine->GameViewport->SplitscreenInfo[0].PlayerData[0].OriginX = OriginX; // default: 0.f
  7. GEngine->GameViewport->SplitscreenInfo[0].PlayerData[0].OriginY = OriginY; // default: 0.f
  8. GEngine->GameViewport->SplitscreenInfo[0].PlayerData[0].SizeX = SizeX; // default 1.f
  9. GEngine->GameViewport->SplitscreenInfo[0].PlayerData[0].SizeY = SizeY; // default 1.f
  10. }
  11. FColor UMyBlueprintFunctionLibrary::HexToColor(FString HexString)
  12. {
  13. return FColor::FromHex(HexString);
  14. }
  15. TArray<FString> UMyBlueprintFunctionLibrary::GetCode(const FString& Condition)
  16. {
  17. std::regex pattern("\\w{2,26}");
  18. std::smatch match;
  19. TArray<FString> code_list;
  20. std::string conditionString = TCHAR_TO_UTF8(*Condition);
  21. std::string::const_iterator search_start(conditionString.cbegin());
  22. while (std::regex_search(search_start, conditionString.cend(), match, pattern))
  23. {
  24. FString code(match[0].str().c_str());
  25. code_list.Add(code);
  26. search_start = match.suffix().first;
  27. }
  28. code_list.Sort([](const FString& a, const FString& b)
  29. {
  30. return a.Len() > b.Len();
  31. });
  32. return code_list;
  33. }
  34. FString UMyBlueprintFunctionLibrary::ReplaceBoolean(const FString& Condition)
  35. {
  36. FString result = Condition.Replace(TEXT("|"), TEXT("or"));
  37. result = result.Replace(TEXT("&"), TEXT("and"));
  38. result = result.Replace(TEXT("!"), TEXT("not "));
  39. return result;
  40. }
  41. bool UMyBlueprintFunctionLibrary::Solver(const TArray<FString>& ProductCodeList, const FString& Condition)
  42. {
  43. FString condition = Condition;
  44. TArray<FString> condition_code = GetCode(condition);
  45. check(condition_code.Num() > 0);
  46. for (const FString& p_code : condition_code)
  47. {
  48. if (ProductCodeList.Contains(p_code))
  49. {
  50. condition = condition.Replace(*p_code, TEXT("True"));
  51. }
  52. else
  53. {
  54. condition = condition.Replace(*p_code, TEXT("False"));
  55. }
  56. }
  57. FString resultString = ReplaceBoolean(condition);
  58. std::string result = TCHAR_TO_UTF8(*resultString);
  59. return std::stoi(result);
  60. }