public static JointDriverMeta ReadDriverMeta(BinaryReader reader) { int type = reader.ReadByte(); JointDriverMeta meta = (JointDriverMeta)JOINT_DRIVER_META_TYPES[type].GetConstructor(new Type[0]).Invoke(new Object[0]); meta.ReadDataInternal(reader); return(meta); }
/// <summary> /// Adds the given joint driver metadata object to this driver, or replaces the existing metadata of the same type. /// </summary> /// <param name="metaDriver">The metadata</param> public void AddInfo(JointDriverMeta metaDriver) { try { MetaInfo.Add(metaDriver.GetType(), metaDriver); } catch { //Always throws SystemNullReferenceException here when you are exporting pneumatic //Go to JointDrivderMeta.cs Line 15 to patch MetaInfo[metaDriver.GetType()] = metaDriver; } }
/// <summary> /// Used for writing joint driver meta data. /// </summary> /// <param name="meta"></param> /// <param name="writer"></param> private static void WriteJointDriverMeta(JointDriverMeta meta, XmlWriter writer) { switch (meta.GetType().ToString()) { case "ElevatorDriverMeta": WriteElevatorDriverMeta((ElevatorDriverMeta)meta, writer); break; case "PneumaticDriverMeta": WritePneumaticDriverMeta((PneumaticDriverMeta)meta, writer); break; case "WheelDriverMeta": WriteWheelDriverMeta((WheelDriverMeta)meta, writer); break; } }
/// <summary> /// Reads the binary representation of this driver from the stream. /// </summary> /// <param name="reader">Input stream</param> public void ReadBinaryData(System.IO.BinaryReader reader) { type = (JointDriverType)((int)reader.ReadByte()); port1 = reader.ReadInt16(); port2 = reader.ReadInt16(); lowerLimit = reader.ReadSingle(); upperLimit = reader.ReadSingle(); isCan = reader.ReadBoolean(); int extensions = reader.ReadInt32(); MetaInfo.Clear(); for (int i = 0; i < extensions; i++) { JointDriverMeta meta = JointDriverMeta.ReadDriverMeta(reader); AddInfo(meta); } }