Files
integration/Source/Integration/AnimQueue.cpp

86 lines
2.0 KiB
C++

#include "AnimQueue.h"
FAnimStep FAnimQueueDecoder::ReadStep() {
FAnimStep result;
result.Hash = Decoder.read_uint64();
result.Body = Decoder.read_string_view();
return result;
}
FAnimField FAnimStepDecoder::ReadField() {
FAnimField result;
result.Name = Decoder.read_string_view();
result.Persistent = Decoder.read_bool();
result.Type = (EAnimValueType)Decoder.read_uint8();
switch (result.Type) {
case T_STRING: {
result.S = Decoder.read_string_view();
break;
}
case T_NUMBER: {
result.X = Decoder.read_double();
break;
}
case T_BOOLEAN: {
result.X = Decoder.read_bool() ? 1.0 : 0.0;
break;
}
case T_XYZ: {
result.X = Decoder.read_double();
result.Y = Decoder.read_double();
result.Z = Decoder.read_double();
break;
}
default: {
Decoder.set_at_eof();
result.Type = T_BOOLEAN;
result.X = 0;
break;
}
}
return result;
}
FString FAnimQueueDecoder::DebugString(std::string_view queue) {
FString result;
FAnimQueueDecoder decoder(queue);
while (!decoder.AtEOF()) {
FAnimStep step = decoder.ReadStep();
FString stepdebug = FAnimStepDecoder::DebugString(step);
result.Appendf(TEXT("%s\n"), *stepdebug);
}
return result;
}
FString FAnimStepDecoder::DebugString(const FAnimStep& step) {
FString result;
FAnimStepDecoder decoder(step);
bool first = true;
while (!decoder.AtEOF()) {
FAnimField field = decoder.ReadField();
if (!first) {
result.Append(TEXT(" "));
}
result.Append(FString(field.Name.size(), (const UTF8CHAR*)field.Name.data()));
result.Append(field.Persistent ? TEXT("=") : TEXT(":"));
switch (field.Type) {
case EAnimValueType::T_STRING:
result.Append(FString(field.S.size(), (const UTF8CHAR*)field.S.data()));
break;
case EAnimValueType::T_NUMBER:
result.Appendf(TEXT("%lf"), field.X);
break;
case EAnimValueType::T_BOOLEAN:
result.Append((field.X) == 1.0 ? TEXT("true") : TEXT("false"));
break;
case EAnimValueType::T_XYZ:
result.Appendf(TEXT("%lf,%lf,%lf"), field.X, field.Y, field.Z);
break;
}
first = false;
}
return result;
}