#include "Debug/DescentCommandUtil.h" #include "Debug/DescentDebugSubsystem.h" #include "TheDescent.h" #include "Engine/World.h" namespace Descent::Cmd { bool ParseNumbers(const TArray& Args, int32 First, int32 Count, TArray& Out) { Out.Reset(); if (Args.Num() < First + Count) { return false; } for (int32 I = 0; I < Count; ++I) { const FString& A = Args[First + I]; if (!A.IsNumeric()) { return false; } Out.Add(FCString::Atod(*A)); } return true; } bool ParseBool(const FString& Arg, bool& OutValid) { OutValid = true; if (Arg == TEXT("1") || Arg.Equals(TEXT("true"), ESearchCase::IgnoreCase) || Arg.Equals(TEXT("on"), ESearchCase::IgnoreCase) || Arg.Equals(TEXT("yes"), ESearchCase::IgnoreCase)) { return true; } if (Arg == TEXT("0") || Arg.Equals(TEXT("false"), ESearchCase::IgnoreCase) || Arg.Equals(TEXT("off"), ESearchCase::IgnoreCase) || Arg.Equals(TEXT("no"), ESearchCase::IgnoreCase)) { return false; } OutValid = false; return false; } void Fail(UWorld* World, const TCHAR* Command, const FString& Reason) { UE_LOG(LogDescent, Error, TEXT("DESCENT_CMD_FAIL %s: %s"), Command, *Reason); if (UDescentDebugSubsystem* Debug = UDescentDebugSubsystem::Get(World)) { if (FDescentScenarioRunner* Runner = Debug->GetRunner()) { Runner->FailRun(FString::Printf(TEXT("command %s failed: %s"), Command, *Reason)); } } } }