Beispiel #1
0
        public override void Read(AssetBinaryReader reader, bool includeHeader, long leng1, long leng2 = 0)
        {
            if (includeHeader)
            {
                PropertyGuid = reader.ReadPropertyGuid();
            }

            if (reader.Asset.EngineVersion < UE4Version.VER_UE4_FTEXT_HISTORY)
            {
                CultureInvariantString = reader.ReadFString();
                if (reader.Asset.EngineVersion >= UE4Version.VER_UE4_ADDED_NAMESPACE_AND_KEY_DATA_TO_FTEXT)
                {
                    Namespace = reader.ReadFString();
                    Value     = reader.ReadFString();
                }
                else
                {
                    Namespace = null;
                    Value     = reader.ReadFString();
                }
            }

            Flags = (ETextFlag)reader.ReadUInt32();

            if (reader.Asset.EngineVersion >= UE4Version.VER_UE4_FTEXT_HISTORY)
            {
                HistoryType = (TextHistoryType)reader.ReadSByte();

                switch (HistoryType)
                {
                case TextHistoryType.None:
                    Value = null;
                    if (reader.Asset.GetCustomVersion <FEditorObjectVersion>() >= FEditorObjectVersion.CultureInvariantTextSerializationKeyStability)
                    {
                        bool bHasCultureInvariantString = reader.ReadInt32() == 1;
                        if (bHasCultureInvariantString)
                        {
                            CultureInvariantString = reader.ReadFString();
                        }
                    }
                    break;

                case TextHistoryType.Base:
                    Namespace = reader.ReadFString();
                    Value     = reader.ReadFString();
                    CultureInvariantString = reader.ReadFString();
                    break;

                case TextHistoryType.StringTableEntry:
                    TableId = reader.ReadFName();
                    Value   = reader.ReadFString();
                    break;

                default:
                    throw new NotImplementedException("Unimplemented reader for " + HistoryType.ToString());
                }
            }
        }
Beispiel #2
0
        // https://github.com/EpicGames/UnrealEngine/blob/7d9919ac7bfd80b7483012eab342cb427d60e8c9/Engine/Source/Runtime/Core/Private/Internationalization/Text.cpp#L769
        internal FText(PackageReader reader)
        {
            Flags = (ETextFlag)reader.ReadUInt32();

            // "Assuming" the reader/archive is persistent
            Flags &= ETextFlag.ConvertedProperty | ETextFlag.InitializedFromString;

            // Execute if UE4 version is at least VER_UE4_FTEXT_HISTORY

            // The type is serialized during the serialization of the history, during deserialization we need to deserialize it and create the correct history
            var HistoryType = (ETextHistoryType)reader.ReadSByte();

            // Create the history class based on the serialized type
            switch (HistoryType)
            {
            case ETextHistoryType.Base:
                Text = new FTextHistory.Base(reader);
                break;

            case ETextHistoryType.AsDateTime:
                Text = new FTextHistory.DateTime(reader);
                break;

            // https://github.com/EpicGames/UnrealEngine/blob/bf95c2cbc703123e08ab54e3ceccdd47e48d224a/Engine/Source/Runtime/Core/Private/Internationalization/TextHistory.cpp
            // https://github.com/EpicGames/UnrealEngine/blob/bf95c2cbc703123e08ab54e3ceccdd47e48d224a/Engine/Source/Runtime/Core/Private/Internationalization/TextData.h
            case ETextHistoryType.NamedFormat:
            case ETextHistoryType.OrderedFormat:
                Text = new FTextHistory.OrderedFormat(reader);
                break;

            case ETextHistoryType.AsNumber:
            case ETextHistoryType.AsPercent:
            case ETextHistoryType.AsCurrency:
                Text = new FTextHistory.FormatNumber(reader);
                break;

            case ETextHistoryType.StringTableEntry:
                Text = new FTextHistory.StringTableEntry(reader);
                break;

            case ETextHistoryType.ArgumentFormat:
            case ETextHistoryType.AsDate:
            case ETextHistoryType.AsTime:
            case ETextHistoryType.Transform:
            case ETextHistoryType.TextGenerator:
                throw new NotImplementedException(string.Format(FModel.Properties.Resources.ParsingNotSupported, HistoryType));

            default:
                Text = new FTextHistory.None(reader);
                break;
            }
        }
Beispiel #3
0
 internal FText(ETextFlag flags, FTextHistory text)
 {
     Flags = flags;
     Text  = text;
 }