public static SendProp GetProperty(this IStaticPropertySet set, SendPropDefinition def) { var retVal = set.Properties.SingleOrDefault(x => x.Definition == def); Debug.Assert(retVal == null || ReferenceEquals(retVal.Definition, def)); Debug.Assert(retVal == null || ReferenceEquals(retVal.Entity, set)); return(retVal); }
static SendTable ParseSendTable(BitStream stream) { SendTable table = new SendTable(); table.Unknown1 = stream.ReadBool(); table.NetTableName = stream.ReadCString(); int propertyCount = (int)stream.ReadULong(PROPINFOBITS_NUMPROPS); SendPropDefinition arrayElementProp = null; for (int i = 0; i < propertyCount; i++) { SendPropDefinition prop = new SendPropDefinition(table); prop.Type = (SendPropType)stream.ReadULong(PROPINFOBITS_TYPE); Debug.Assert(Enum.GetValues(typeof(SendPropType)).Cast <SendPropType>().Contains(prop.Type)); Debug.Assert(prop.Type == SendPropType.Datatable ? prop.Flags == 0 : true); prop.Name = stream.ReadCString(); prop.Flags = (SendPropFlags)stream.ReadULong(PROPINFOBITS_FLAGS); if (prop.Type == SendPropType.Datatable) { prop.ExcludeName = stream.ReadCString(); } else { if ((prop.Flags & SendPropFlags.Exclude) != 0) { prop.ExcludeName = stream.ReadCString(); } else if (prop.Type == SendPropType.Array) { prop.ArrayElements = (int)stream.ReadULong(PROPINFOBITS_NUMELEMENTS); } else { prop.LowValue = stream.ReadSingle(); prop.HighValue = stream.ReadSingle(); prop.BitCount = stream.ReadULong(PROPINFOBITS_NUMBITS); } } if (prop.Flags.HasFlag(SendPropFlags.NoScale)) { if (prop.Type == SendPropType.Float) { prop.BitCount = 32; } else if (prop.Type == SendPropType.Vector) { if (!prop.Flags.HasFlag(SendPropFlags.Normal)) { prop.BitCount = 32 * 3; } } } if (arrayElementProp != null) { Debug.Assert(prop.Type == SendPropType.Array); prop.ArrayProperty = arrayElementProp; arrayElementProp = null; } if (prop.Flags.HasFlag(SendPropFlags.InsideArray)) { Debug.Assert(arrayElementProp == null); Debug.Assert(!prop.Flags.HasFlag(SendPropFlags.ChangesOften)); arrayElementProp = prop; } else { table.Properties.Add(prop); } } return(table); }