Ejemplo n.º 1
0
        public override int Write(AssetBinaryWriter writer, bool includeHeader)
        {
            if (includeHeader)
            {
                if (Value.Count > 0)
                {
                    writer.Write(Value.Keys.ElementAt(0).PropertyType);
                    writer.Write(Value[0].PropertyType);
                }
                else
                {
                    writer.Write(KeyType);
                    writer.Write(ValueType);
                }
                writer.WritePropertyGuid(PropertyGuid);
            }

            int here = (int)writer.BaseStream.Position;

            writer.Write(KeysToRemove?.Length ?? 0);
            if (KeysToRemove != null)
            {
                for (int i = 0; i < KeysToRemove.Length; i++)
                {
                    var entry = KeysToRemove[i];
                    entry.Offset = writer.BaseStream.Position;
                    entry.Write(writer, false);
                }
            }

            writer.Write(Value.Count);
            WriteRawMap(writer, Value);
            return((int)writer.BaseStream.Position - here);
        }
Ejemplo n.º 2
0
        public override int Write(AssetBinaryWriter writer, bool includeHeader)
        {
            this.ShouldSerializeStructsDifferently = false;

            if (Value.Length > 0)
            {
                ArrayType = Value[0].PropertyType;
            }

            if (includeHeader)
            {
                writer.Write(ArrayType);
                writer.WritePropertyGuid(PropertyGuid);
            }

            var removedItemsDummy = new ArrayPropertyData(new FName("ElementsToRemove"));

            removedItemsDummy.ShouldSerializeStructsDifferently = false;
            removedItemsDummy.ArrayType = ArrayType;
            removedItemsDummy.Value     = ElementsToRemove;

            int leng1 = removedItemsDummy.Write(writer, false);

            return(leng1 + base.Write(writer, false));
        }
Ejemplo n.º 3
0
        public override int Write(AssetBinaryWriter writer, bool includeHeader)
        {
            if (includeHeader)
            {
                writer.Write(StructType);
                if (writer.Asset.EngineVersion >= UE4Version.VER_UE4_STRUCT_GUID_IN_PROPERTY_TAG)
                {
                    writer.Write(StructGUID.ToByteArray());
                }
                writer.WritePropertyGuid(PropertyGuid);
            }

            MainSerializer.PropertyTypeRegistry.TryGetValue(StructType.Value.Value, out RegistryEntry targetEntry);
            bool hasCustomStructSerialization = targetEntry != null && targetEntry.HasCustomStructSerialization;

            if (StructType.Value.Value == "RichCurveKey" && writer.Asset.EngineVersion < UE4Version.VER_UE4_SERIALIZE_RICH_CURVE_KEY)
            {
                hasCustomStructSerialization = false;
            }

            if (targetEntry != null && hasCustomStructSerialization)
            {
                return(WriteOnce(writer));
            }
            if (Value.Count == 0 && !SerializeNone)
            {
                return(0);
            }
            return(WriteNTPL(writer));
        }
Ejemplo n.º 4
0
        public override int Write(AssetBinaryWriter writer, bool includeHeader)
        {
            if (includeHeader)
            {
                writer.WritePropertyGuid(PropertyGuid);
            }

            return(WriteExpressionInput(writer, false));
        }
Ejemplo n.º 5
0
        public override int Write(AssetBinaryWriter writer, bool includeHeader)
        {
            if (includeHeader)
            {
                writer.WritePropertyGuid(PropertyGuid);
            }

            return(Value.Write(writer, false));
        }
Ejemplo n.º 6
0
        public override int Write(AssetBinaryWriter writer, bool includeHeader)
        {
            if (includeHeader)
            {
                writer.WritePropertyGuid(PropertyGuid);
            }

            writer.Write(Value.ToByteArray());
            return(16);
        }
Ejemplo n.º 7
0
        public override int Write(AssetBinaryWriter writer, bool includeHeader)
        {
            if (includeHeader)
            {
                writer.WritePropertyGuid(PropertyGuid);
            }

            writer.Write(Value);
            return(sizeof(ulong));
        }
Ejemplo n.º 8
0
        public override int Write(AssetBinaryWriter writer, bool includeHeader)
        {
            if (includeHeader)
            {
                writer.WritePropertyGuid(PropertyGuid);
            }

            writer.Write(X);
            writer.Write(Y);
            return(sizeof(float) * 2);
        }
Ejemplo n.º 9
0
        public override int Write(AssetBinaryWriter writer, bool includeHeader)
        {
            if (includeHeader)
            {
                writer.WritePropertyGuid(PropertyGuid);
            }

            int expLength = WriteExpressionInput(writer, false);

            writer.Write((int)0);
            return(expLength + Value.Write(writer, false) + sizeof(int));
        }
Ejemplo n.º 10
0
        public override int Write(AssetBinaryWriter writer, bool includeHeader)
        {
            if (includeHeader)
            {
                writer.WritePropertyGuid(PropertyGuid);
            }

            writer.Write(Value.Pitch);
            writer.Write(Value.Yaw);
            writer.Write(Value.Roll);
            return(sizeof(float) * 3);
        }
Ejemplo n.º 11
0
        public override int Write(AssetBinaryWriter writer, bool includeHeader)
        {
            if (includeHeader)
            {
                writer.WritePropertyGuid(PropertyGuid);
            }

            int here = (int)writer.BaseStream.Position;

            writer.Write(Value);
            return((int)writer.BaseStream.Position - here);
        }
Ejemplo n.º 12
0
        public override int Write(AssetBinaryWriter writer, bool includeHeader)
        {
            if (includeHeader)
            {
                writer.WritePropertyGuid(PropertyGuid);
            }

            writer.Write(BlendTime);
            writer.Write((byte)BlendFunction);
            writer.Write(BlendExp);
            writer.Write(bLockOutgoing ? 1 : 0);
            return(sizeof(float) * 2 + sizeof(byte) + sizeof(int));
        }
Ejemplo n.º 13
0
        public override int Write(AssetBinaryWriter writer, bool includeHeader)
        {
            if (includeHeader)
            {
                writer.WritePropertyGuid(PropertyGuid);
            }

            for (int i = 0; i < 2; i++)
            {
                writer.Write(Value[i]);
            }
            return(sizeof(int) * 2);
        }
Ejemplo n.º 14
0
        public override int Write(AssetBinaryWriter writer, bool includeHeader)
        {
            if (includeHeader)
            {
                writer.WritePropertyGuid(PropertyGuid);
            }

            writer.Write(Value.R);
            writer.Write(Value.G);
            writer.Write(Value.B);
            writer.Write(Value.A);
            return(sizeof(float) * 4);
        }
        public override int Write(AssetBinaryWriter writer, bool includeHeader)
        {
            if (includeHeader)
            {
                writer.WritePropertyGuid(PropertyGuid);
            }

            writer.Write(Value.Length);
            for (int i = 0; i < Value.Length; i++)
            {
                writer.Write(Value[i]);
            }
            return(sizeof(int) + sizeof(bool) * Value.Length);
        }
Ejemplo n.º 16
0
        public override int Write(AssetBinaryWriter writer, bool includeHeader)
        {
            if (includeHeader)
            {
                writer.WritePropertyGuid(PropertyGuid);
            }

            int totalSize = 0;

            for (int i = 0; i < 2; i++)
            {
                totalSize += Value[i].Write(writer, includeHeader);
            }
            writer.Write(IsValid);
            return(totalSize + sizeof(bool));
        }
        public override int Write(AssetBinaryWriter writer, bool includeHeader)
        {
            if (includeHeader)
            {
                writer.WritePropertyGuid(PropertyGuid);
            }

            writer.Write(Value.Length);
            int totalSize = sizeof(int);

            for (int i = 0; i < Value.Length; i++)
            {
                writer.Write(Value[i]);
                totalSize += sizeof(int) * 2;
            }
            return(totalSize);
        }
Ejemplo n.º 18
0
        public override int Write(AssetBinaryWriter writer, bool includeHeader)
        {
            if (includeHeader)
            {
                writer.WritePropertyGuid(PropertyGuid);
            }

            writer.Write((sbyte)InterpMode);
            writer.Write((sbyte)TangentMode);
            writer.Write((sbyte)TangentWeightMode);
            writer.Write(Time);
            writer.Write(Value);
            writer.Write(ArriveTangent);
            writer.Write(ArriveTangentWeight);
            writer.Write(LeaveTangent);
            writer.Write(LeaveTangentWeight);
            return(sizeof(float) * 6 + sizeof(sbyte) * 3);
        }
Ejemplo n.º 19
0
        public override int Write(AssetBinaryWriter writer, bool includeHeader)
        {
            if (includeHeader)
            {
                writer.WritePropertyGuid(PropertyGuid);
            }

            int here = (int)writer.BaseStream.Position;

            if (writer.Asset.EngineVersion < UE4Version.VER_UE4_ADDED_SOFT_OBJECT_PATH)
            {
                writer.Write(Path);
            }
            else
            {
                writer.Write(AssetPathName);
                writer.Write(SubPathString);
            }

            return((int)writer.BaseStream.Position - here);
        }
Ejemplo n.º 20
0
        public override int Write(AssetBinaryWriter writer, bool includeHeader)
        {
            if (includeHeader)
            {
                writer.WritePropertyGuid(PropertyGuid);
            }

            long here = writer.BaseStream.Position;

            writer.Write(DisplayName);
            if (writer.Asset.GetCustomVersion <FAnimPhysObjectVersion>() < FAnimPhysObjectVersion.RemoveUIDFromSmartNameSerialize)
            {
                writer.Write(SmartNameID);
            }
            if (writer.Asset.GetCustomVersion <FAnimPhysObjectVersion>() < FAnimPhysObjectVersion.SmartNameRefactorForDeterministicCooking)
            {
                writer.Write(TempGUID.ToByteArray());
            }

            return((int)(writer.BaseStream.Position - here));
        }
Ejemplo n.º 21
0
        public override int Write(AssetBinaryWriter writer, bool includeHeader)
        {
            if (includeHeader)
            {
                writer.Write((long)EnumType);
                writer.WritePropertyGuid(PropertyGuid);
            }

            switch (ByteType)
            {
            case BytePropertyType.Byte:
                writer.Write((byte)Value);
                return(1);

            case BytePropertyType.Long:
                writer.Write((long)Value);
                return(8);

            default:
                throw new FormatException("Invalid BytePropertyType " + ByteType);
            }
        }
Ejemplo n.º 22
0
        public override int Write(AssetBinaryWriter writer, bool includeHeader)
        {
            if (includeHeader)
            {
                writer.WritePropertyGuid(PropertyGuid);
            }

            writer.Write(Prob.Length);
            for (int i = 0; i < Prob.Length; i++)
            {
                writer.Write(Prob[i]);
            }

            writer.Write(Alias.Length);
            for (int i = 0; i < Alias.Length; i++)
            {
                writer.Write(Alias[i]);
            }

            writer.Write(TotalWeight);

            return(sizeof(int) + sizeof(float) * Prob.Length + sizeof(int) + sizeof(int) * Alias.Length + sizeof(float));
        }
Ejemplo n.º 23
0
        public override int Write(AssetBinaryWriter writer, bool includeHeader)
        {
            if (includeHeader)
            {
                writer.WritePropertyGuid(PropertyGuid);
            }

            int here = (int)writer.BaseStream.Position;

            if (writer.Asset.EngineVersion < UE4Version.VER_UE4_FTEXT_HISTORY)
            {
                writer.Write(CultureInvariantString);
                if (writer.Asset.EngineVersion >= UE4Version.VER_UE4_ADDED_NAMESPACE_AND_KEY_DATA_TO_FTEXT)
                {
                    writer.Write(Namespace);
                    writer.Write(Value);
                }
                else
                {
                    writer.Write(Value);
                }
            }

            writer.Write((uint)Flags);

            if (writer.Asset.EngineVersion >= UE4Version.VER_UE4_FTEXT_HISTORY)
            {
                writer.Write((sbyte)HistoryType);

                switch (HistoryType)
                {
                case TextHistoryType.None:
                    if (writer.Asset.GetCustomVersion <FEditorObjectVersion>() >= FEditorObjectVersion.CultureInvariantTextSerializationKeyStability)
                    {
                        if (CultureInvariantString == null || string.IsNullOrEmpty(CultureInvariantString.Value))
                        {
                            writer.Write(0);
                        }
                        else
                        {
                            writer.Write(1);
                            writer.Write(CultureInvariantString);
                        }
                    }
                    break;

                case TextHistoryType.Base:
                    writer.Write(Namespace);
                    writer.Write(Value);
                    writer.Write(CultureInvariantString);
                    break;

                case TextHistoryType.StringTableEntry:
                    writer.Write(TableId);
                    writer.Write(Value);
                    break;

                default:
                    throw new NotImplementedException("Unimplemented writer for " + HistoryType.ToString());
                }
            }

            return((int)writer.BaseStream.Position - here);
        }
Ejemplo n.º 24
0
        public override int Write(AssetBinaryWriter writer, bool includeHeader)
        {
            if (Value.Length > 0)
            {
                ArrayType = Value[0].PropertyType;
            }

            if (includeHeader)
            {
                writer.Write(ArrayType);
                writer.WritePropertyGuid(PropertyGuid);
            }

            int here = (int)writer.BaseStream.Position;

            writer.Write(Value.Length);
            if (ArrayType.Value.Value == "StructProperty" && ShouldSerializeStructsDifferently)
            {
                if (Value.Length == 0 && DummyStruct == null)
                {
                    throw new InvalidOperationException("No dummy struct present in an empty StructProperty array, cannot serialize");
                }
                if (Value.Length > 0)
                {
                    DummyStruct = (StructPropertyData)Value[0];
                }

                FName fullType = DummyStruct.StructType;

                int lengthLoc = -1;
                if (writer.Asset.EngineVersion >= UE4Version.VER_UE4_INNER_ARRAY_TAG_INFO)
                {
                    writer.Write(DummyStruct.Name);
                    writer.Write(new FName("StructProperty"));
                    lengthLoc = (int)writer.BaseStream.Position;
                    writer.Write((long)0);
                    writer.Write(fullType);
                    if (writer.Asset.EngineVersion >= UE4Version.VER_UE4_STRUCT_GUID_IN_PROPERTY_TAG)
                    {
                        writer.Write(DummyStruct.StructGUID.ToByteArray());
                    }
                    if (writer.Asset.EngineVersion >= UE4Version.VER_UE4_PROPERTY_GUID_IN_PROPERTY_TAG)
                    {
                        writer.Write((byte)0);
                    }
                }

                for (int i = 0; i < Value.Length; i++)
                {
                    ((StructPropertyData)Value[i]).StructType = fullType;
                    Value[i].Offset = writer.BaseStream.Position;
                    Value[i].Write(writer, false);
                }

                if (writer.Asset.EngineVersion >= UE4Version.VER_UE4_INNER_ARRAY_TAG_INFO)
                {
                    int fullLen = (int)writer.BaseStream.Position - lengthLoc;
                    int newLoc  = (int)writer.BaseStream.Position;
                    writer.Seek(lengthLoc, SeekOrigin.Begin);
                    writer.Write(fullLen - 32 - (includeHeader ? 1 : 0));
                    writer.Seek(newLoc, SeekOrigin.Begin);
                }
            }
            else
            {
                for (int i = 0; i < Value.Length; i++)
                {
                    Value[i].Offset = writer.BaseStream.Position;
                    Value[i].Write(writer, false);
                }
            }

            return((int)writer.BaseStream.Position - here);
        }