Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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);
        }