Exemple #1
0
        public void TestCustomSerializationStructsInMap()
        {
            var tester = new UAsset(Path.Combine("TestCustomSerializationStructsInMap", "wtf.uasset"), UE4Version.VER_UE4_25);

            Assert.IsTrue(tester.VerifyBinaryEquality());

            // Get the map property in export 2
            Export exportTwo = FPackageIndex.FromRawIndex(2).ToExport(tester);

            Assert.IsTrue(exportTwo is NormalExport);

            NormalExport exportTwoNormal = (NormalExport)exportTwo;

            var             mapPropertyName = FName.FromString("KekWait");
            MapPropertyData testMap         = exportTwoNormal[mapPropertyName] as MapPropertyData;

            Assert.IsNotNull(testMap);
            Assert.IsTrue(testMap == exportTwoNormal[mapPropertyName.Value.Value]);

            // Get the first entry of the map
            StructPropertyData entryKey   = testMap?.Value?.Keys?.ElementAt(0) as StructPropertyData;
            StructPropertyData entryValue = testMap?.Value?[0] as StructPropertyData;

            Assert.IsNotNull(entryKey?.Value?[0]);
            Assert.IsNotNull(entryValue?.Value?[0]);

            // Check that the properties are correct
            Assert.IsTrue(entryKey.Value[0] is VectorPropertyData);
            Assert.IsTrue(entryValue.Value[0] is LinearColorPropertyData);
        }
Exemple #2
0
        public static PropertyData TypeToClass(string type, string name, AssetReader asset, BinaryReader reader = null, long leng = 0, bool includeHeader = true)
        {
            //Debug.WriteLine(type);
            PropertyData data;

            switch (type)
            {
            case "BoolProperty":
                data = new BoolPropertyData(name, asset);
                break;

            case "Int8Property":
                data = new Int8PropertyData(name, asset);
                break;

            case "Int16Property":
                data = new Int16PropertyData(name, asset);
                break;

            case "IntProperty":
                data = new IntPropertyData(name, asset);
                break;

            case "Int64Property":
                data = new Int64PropertyData(name, asset);
                break;

            case "UInt16Property":
                data = new UInt16PropertyData(name, asset);
                break;

            case "UInt32Property":
                data = new UInt32PropertyData(name, asset);
                break;

            case "UInt64Property":
                data = new UInt64PropertyData(name, asset);
                break;

            case "FloatProperty":
                data = new FloatPropertyData(name, asset);
                break;

            case "TextProperty":
                data = new TextPropertyData(name, asset);
                break;

            case "StrProperty":
                data = new StrPropertyData(name, asset);
                break;

            case "ObjectProperty":
                data = new ObjectPropertyData(name, asset);
                break;

            case "EnumProperty":
                data = new EnumPropertyData(name, asset);
                break;

            case "ByteProperty":
                data = new BytePropertyData(name, asset);
                break;

            case "NameProperty":
                data = new NamePropertyData(name, asset);
                break;

            case "ArrayProperty":
                data = new ArrayPropertyData(name, asset);
                break;

            case "MapProperty":
                data = new MapPropertyData(name, asset);
                break;

            case "StructProperty":
                data = new StructPropertyData(name, asset);
                break;

            case "Guid":
                data = new GuidPropertyData(name, asset);
                break;

            case "LinearColor":
                data = new LinearColorPropertyData(name, asset);
                break;

            case "Color":
                data = new ColorPropertyData(name, asset);
                break;

            case "Vector":
                data = new VectorPropertyData(name, asset);
                break;

            case "Vector2D":
                data = new Vector2DPropertyData(name, asset);
                break;

            case "Box":
                data = new BoxPropertyData(name, asset);
                break;

            case "IntPoint":
                data = new IntPointPropertyData(name, asset);
                break;

            case "DateTime":
                data = new DateTimePropertyData(name, asset);
                break;

            case "Timespan":
                data = new TimespanPropertyData(name, asset);
                break;

            case "Rotator":
                data = new RotatorPropertyData(name, asset);
                break;

            case "Quat":
                data = new QuatPropertyData(name, asset);
                break;

            case "Vector4":
                data = new Vector4PropertyData(name, asset);
                break;

            case "SoftObjectProperty":
                data = new SoftObjectPropertyData(name, asset);
                break;

            case "MulticastDelegateProperty":
                data = new MulticastDelegatePropertyData(name, asset);
                break;

            default:
#if DEBUG
                Debug.WriteLine("Last type: " + lastType);
#endif
                if (reader == null)
                {
                    throw new FormatException("Unknown property type: " + type + " (on " + name + ")");
                }
                throw new FormatException("Unknown property type: " + type + " (on " + name + " at " + reader.BaseStream.Position + ")");
            }
#if DEBUG
            lastType = type;
#endif
            if (reader != null)
            {
                data.Read(reader, includeHeader, leng);
            }
            return(data);
        }