using Newtonsoft.Json;
using System;
using UAssetAPI.UnrealTypes;
namespace UAssetAPI.Kismet.Bytecode
{
///
/// Represents an FText as serialized in Kismet bytecode.
///
[JsonObject(MemberSerialization.OptIn)]
public class FScriptText
{
[JsonProperty]
public EBlueprintTextLiteralType TextLiteralType;
///
/// Source of this text if it is localized text. Used when is .
///
[JsonProperty]
public KismetExpression LocalizedSource;
///
/// Key of this text if it is localized text. Used when is .
///
[JsonProperty]
public KismetExpression LocalizedKey;
///
/// Namespace of this text if it is localized text. Used when is .
///
[JsonProperty]
public KismetExpression LocalizedNamespace;
///
/// Value of this text if it is an invariant string literal. Used when is .
///
[JsonProperty]
public KismetExpression InvariantLiteralString;
///
/// Value of this text if it is a string literal. Used when is .
///
[JsonProperty]
public KismetExpression LiteralString;
///
/// Pointer to this text's UStringTable. Not used at runtime, but exists for asset dependency gathering. Used when is .
///
[JsonProperty]
public FPackageIndex StringTableAsset;
///
/// Table ID string literal (namespace). Used when is .
///
[JsonProperty]
public KismetExpression StringTableId;
///
/// String table key string literal. Used when is .
///
[JsonProperty]
public KismetExpression StringTableKey;
///
/// Reads out an FBlueprintText from a BinaryReader.
///
/// The BinaryReader to read from.
public virtual void Read(AssetBinaryReader reader)
{
TextLiteralType = (EBlueprintTextLiteralType)reader.ReadByte();
switch (TextLiteralType)
{
case EBlueprintTextLiteralType.Empty:
break;
case EBlueprintTextLiteralType.LocalizedText:
LocalizedSource = ExpressionSerializer.ReadExpression(reader);
LocalizedKey = ExpressionSerializer.ReadExpression(reader);
LocalizedNamespace = ExpressionSerializer.ReadExpression(reader);
break;
case EBlueprintTextLiteralType.InvariantText: // IsCultureInvariant
InvariantLiteralString = ExpressionSerializer.ReadExpression(reader);
break;
case EBlueprintTextLiteralType.LiteralString:
LiteralString = ExpressionSerializer.ReadExpression(reader);
break;
case EBlueprintTextLiteralType.StringTableEntry:
StringTableAsset = reader.XFER_OBJECT_POINTER();
StringTableId = ExpressionSerializer.ReadExpression(reader);
StringTableKey = ExpressionSerializer.ReadExpression(reader);
break;
default:
throw new NotImplementedException("Unimplemented blueprint text literal type " + TextLiteralType);
}
}
///
/// Writes an FBlueprintText to a BinaryWriter.
///
/// The BinaryWriter to write from.
/// The iCode offset of the data that was written.
public virtual int Write(AssetBinaryWriter writer)
{
int offset = 0;
writer.Write((byte)TextLiteralType); offset += sizeof(byte);
switch (TextLiteralType)
{
case EBlueprintTextLiteralType.Empty:
break;
case EBlueprintTextLiteralType.LocalizedText:
offset += ExpressionSerializer.WriteExpression(LocalizedSource, writer);
offset += ExpressionSerializer.WriteExpression(LocalizedKey, writer);
offset += ExpressionSerializer.WriteExpression(LocalizedNamespace, writer);
break;
case EBlueprintTextLiteralType.InvariantText: // IsCultureInvariant
offset += ExpressionSerializer.WriteExpression(InvariantLiteralString, writer);
break;
case EBlueprintTextLiteralType.LiteralString:
offset += ExpressionSerializer.WriteExpression(LiteralString, writer);
break;
case EBlueprintTextLiteralType.StringTableEntry:
offset += writer.XFER_OBJECT_POINTER(StringTableAsset);
offset += ExpressionSerializer.WriteExpression(StringTableId, writer);
offset += ExpressionSerializer.WriteExpression(StringTableKey, writer);
break;
default:
throw new NotImplementedException("Unimplemented blueprint text literal type " + TextLiteralType);
}
return offset;
}
}
}