public override bool ManualRead(string property, object value)
        {
            switch (property)
            {
            case "ReplicatedMovement":
                ReplicatedMovement = (FRepMovement)value;
                break;

            case "Projectile":
                Projectile = (NetworkGUID)value;
                break;

            case "ProjectileActor":
                ProjectileActor = (NetworkGUID)value;
                break;

            case "PlayerPawn":
                PlayerPawn = (NetworkGUID)value;
                break;

            case "CatchParticleOn":
                CatchParticleOn = (bool)value;
                break;

            case "Weapon":
                Weapon = (NetworkGUID)value;
                break;

            default:
                return(base.ManualRead(property, value));
            }

            return(true);
        }
        public void Serialize(NetBitReader reader)
        {
            reader.ReadBits(2); //Unknown

            Id = new NetworkGUID
            {
                Value = reader.ReadIntPacked()
            };

            reader.ReadBits(31); //Unknown
        }
        /// <summary>
        /// PropertyBaseObject.cpp 84
        /// </summary>
        public uint SerializePropertyObject()
        {
            //InternalLoadObject(); // TODO make available in archive

            var netGuid = new NetworkGUID()
            {
                Value = ReadIntPacked()
            };

            return(netGuid.Value);

            //if (!netGuid.IsValid())
            //{
            //    return;
            //}

            //if (netGuid.IsDefault() || exportGUIDs)
            //{
            //    var flags = archive.ReadByteAsEnum<ExportFlags>();

            //    // outerguid
            //    if (flags == ExportFlags.bHasPath || flags == ExportFlags.bHasPathAndNetWorkChecksum || flags == ExportFlags.All)
            //    {
            //        var outerGuid = InternalLoadObject(archive, true); // TODO: archetype?

            //        var pathName = archive.ReadFString();

            //        if (!NetGuidCache.ContainsKey(netGuid.Value))
            //        {
            //            NetGuidCache.Add(netGuid.Value, pathName);
            //        }

            //        if (flags >= ExportFlags.bHasNetworkChecksum)
            //        {
            //            var networkChecksum = archive.ReadUInt32();
            //        }

            //        return netGuid;
            //    }
            //}

            //return netGuid;

            //UObject* Object = GetObjectPropertyValue(Data);
            //bool Result = Map->SerializeObject(Ar, PropertyClass, Object);
            //SetObjectPropertyValue(Data, Object);
            //return Result;
        }