void Serialize(MegaloScriptModel model, IO.BitStream s, Proto.MegaloScriptProtoVariableReference protoType) { s.Stream(ref Type, protoType.TypeBitLength); if (Type < 0 || Type >= protoType.Members.Count) { throw new System.IO.InvalidDataException(string.Format(Util.InvariantCultureInfo, "{0}/{1}: Encountered invalid {2} type data", s.StreamName, model.MegaloVariant.BaseVariant.Header.Title, mReferenceKind)); } var member = protoType.Members[Type]; if (member.HasDataType) { MegaloScriptEnumValue.SerializeValue(model, s, member.EnumValueType, ref DataType); } else { DataType = TypeExtensions.kNone; } if (member.HasDataValue) { SerializeData(model, s, member.ValueType); } else { Data = TypeExtensions.kNone; } }
void Serialize <TDoc, TCursor>(MegaloScriptModel model, IO.TagElementStream <TDoc, TCursor, string> s, Proto.MegaloScriptProtoVariableReference protoType) where TDoc : class where TCursor : class { const string kTypeAttributeName = "varRefType"; if ((model.TagElementStreamSerializeFlags & MegaloScriptModelTagElementStreamFlags.UseEnumNames) != 0) { s.StreamAttributeIdAsString(kTypeAttributeName, ref Type, protoType, ToMemberIndex, FromMemberIndex); } else { s.StreamAttribute(kTypeAttributeName, ref Type); } var member = protoType.Members[Type]; if (member.HasDataType) { MegaloScriptEnumValue.SerializeValue(model, s, member.EnumValueType, ref DataType, IO.TagElementNodeType.Attribute, "dataType"); } else { DataType = TypeExtensions.kNone; } if (member.HasDataValue) { SerializeData(model, s, member.ValueType); } else { Data = TypeExtensions.kNone; } }