Пример #1
0
        public static UEStructProperty[] Read(BinaryReader reader, long valueLength, int count)
        {
            var type = reader.ReadUEString();
            var id   = new Guid(reader.ReadBytes(16));

            if (id != Guid.Empty)
            {
                throw new FormatException($"Offset: 0x{reader.BaseStream.Position - 16:x8}. Expected struct ID {Guid.Empty}, but was {id}");
            }

            var terminator = reader.ReadByte();

            if (terminator != 0)
            {
                throw new FormatException($"Offset: 0x{reader.BaseStream.Position - 1:x8}. Expected terminator (0x00), but was (0x{terminator:x2})");
            }

            var result = new UEStructProperty[Math.Max(count, 1)];

            if (count == 0)
            {
                result[0]            = new UEGenericStructProperty();
                result[0].StructType = type;
                return(result);
            }
            for (var i = 0; i < count; i++)
            {
                result[i] = ReadStructValue(type, reader, valueLength);
            }
            return(result);
        }
Пример #2
0
        protected static UEStructProperty ReadStructValue(string type, BinaryReader reader)
        {
            UEStructProperty result;

            switch (type)
            {
            case "DateTime":
                result = new UEDateTimeStructProperty(reader);
                break;

            case "Guid":
                result = new UEGuidStructProperty(reader);
                break;

            case "Vector":
            case "Rotator":
                result = new UEVectorStructProperty(reader);
                break;

            case "Rotation":
                result = new UEVectorStructProperty(reader);
                break;

            case "LinearColor":
                result = new UELinearColorStructProperty(reader);
                break;

            case "Quat":
                // TODO: Implement Quat parser, GUID parser as placeholder, results are currently invalid
                result = new UEGuidStructProperty(reader);
                break;

            default:
                var tmp = new UEGenericStructProperty();
                while (Read(reader) is UEProperty prop)
                {
                    tmp.Properties.Add(prop);
                    if (prop is UENoneProperty)
                    {
                        break;
                    }
                }
                result = tmp;
                break;
            }
            result.Type = type;
            return(result);
        }
Пример #3
0
        protected static UEStructProperty ReadStructValue(string type, BinaryReader reader)
        {
            UEStructProperty result;

            switch (type)
            {
            case "DateTime":
                result = new UEDateTimeStructProperty(reader);
                break;

            case "Guid":
                result = new UEGuidStructProperty(reader);
                break;

            case "Vector":
            case "Rotator":
                result = new UEVectorStructProperty(reader);
                break;

            case "LinearColor":
                result = new UELinearColorStructProperty(reader);
                break;

            case "Quat":
                result = new UEQuatStructProperty(reader);
                break;

            default:
                var tmp = new UEGenericStructProperty();
                while (Read(reader) is { } prop)
                {
                    tmp.Properties.Add(prop);
                    if (prop is UENoneProperty)
                    {
                        break;
                    }
                }
                result = tmp;
                break;
            }
            result.Type = type;
            return(result);
        }
Пример #4
0
        protected static UEStructProperty ReadStructValue(string type, BinaryReader reader, long valueLength)
        {
            UEStructProperty result;

            switch (type)
            {
            case "DateTime":
                result = new UEDateTimeStructProperty(reader);
                break;

            case "Guid":
                result = new UEGuidStructProperty(reader);
                break;

            case "Vector":
            case "Rotator":
                result = new UEVectorStructProperty(reader);
                break;

            case "LinearColor":
                result = new UELinearColorStructProperty(reader);
                break;

            /*case "Transform":
             *  result = new UETransformStructProperty(reader);
             *  break;*/
            case "Quat":
                result = new UEQuaternionStructProperty(reader);
                break;

            default:
                result = new UEGenericStructProperty(reader);
                break;
            }
            result.StructType  = type;
            result.ValueLength = valueLength;
            return(result);
        }