Exemplo n.º 1
0
        /// <summary>
        /// Adds an entry. Delta is assumed to be delta_description_t. Should only need to be called when parsing svc_deltadescription.
        /// </summary>
        /// <param name="delta"></param>
        public void AddEntry(HalfLifeDelta delta)
        {
            String     name    = (String)delta.FindEntryValue("name");
            UInt32     nBits   = (UInt32)delta.FindEntryValue("nBits");
            Single     divisor = (Single)delta.FindEntryValue("divisor");
            EntryFlags flags   = (EntryFlags)((UInt32)delta.FindEntryValue("flags"));

            //Single preMultiplier = (Single)delta.FindEntryValue("preMultiplier");

            AddEntry(name, nBits, divisor, flags);
        }
Exemplo n.º 2
0
        public Byte[] CreateDeltaBitmask(HalfLifeDelta delta)
        {
            UInt32 nBitmaskBytes = (UInt32)((entryList.Count / 8) + (entryList.Count % 8 > 0 ? 1 : 0));

            Byte[] bitmaskBytes = new Byte[nBitmaskBytes];

            for (Int32 i = 0; i < bitmaskBytes.Length; i++)
            {
                for (Int32 j = 0; j < 8; j++)
                {
                    Int32 index = j + i * 8;

                    if (index >= entryList.Count)
                    {
                        break;
                    }

                    if (delta.FindEntryValue(entryList[index].Name) != null)
                    {
                        bitmaskBytes[i] |= (Byte)(1 << j);
                    }
                }
            }

            return(bitmaskBytes);
        }
Exemplo n.º 3
0
        private void WriteEntry(HalfLifeDelta delta, BitWriter bitWriter, Entry e)
        {
            Boolean signed = ((e.Flags & EntryFlags.Signed) != 0);
            Object  value  = delta.FindEntryValue(e.Name);

            if ((e.Flags & EntryFlags.Byte) != 0)
            {
                if (signed)
                {
                    SByte writeValue = (SByte)value;
                    WriteInt(bitWriter, e, (Int32)writeValue);
                }
                else
                {
                    Byte writeValue = (Byte)value;
                    WriteUnsignedInt(bitWriter, e, (UInt32)writeValue);
                }
            }
            else if ((e.Flags & EntryFlags.Short) != 0)
            {
                if (signed)
                {
                    Int16 writeValue = (Int16)value;
                    WriteInt(bitWriter, e, (Int32)writeValue);
                }
                else
                {
                    UInt16 writeValue = (UInt16)value;
                    WriteUnsignedInt(bitWriter, e, (UInt32)writeValue);
                }
            }
            else if ((e.Flags & EntryFlags.Integer) != 0)
            {
                if (signed)
                {
                    WriteInt(bitWriter, e, (Int32)value);
                }
                else
                {
                    WriteUnsignedInt(bitWriter, e, (UInt32)value);
                }
            }
            else if ((e.Flags & EntryFlags.Angle) != 0)
            {
                bitWriter.WriteUnsignedBits((UInt32)((Single)value / (360.0f / (Single)(1 << (Int32)e.nBits))), (Int32)e.nBits);
            }
            else if ((e.Flags & EntryFlags.String) != 0)
            {
                bitWriter.WriteString((String)value);
            }
            else if ((e.Flags & EntryFlags.Float) != 0 || (e.Flags & EntryFlags.TimeWindow8) != 0 || (e.Flags & EntryFlags.TimeWindowBig) != 0)
            {
                Single writeValue  = (Single)value;
                Int32  bitsToWrite = (Int32)e.nBits;

                if (signed)
                {
                    bitWriter.WriteBoolean(writeValue < 0);
                    bitsToWrite--;
                }

                bitWriter.WriteUnsignedBits((UInt32)(Math.Abs(writeValue) * e.Divisor), bitsToWrite);
            }
            else
            {
                throw new ApplicationException(String.Format("Unknown delta entry type {0}.", e.Flags));
            }
        }
Exemplo n.º 4
0
        private void WriteEntry(HalfLifeDelta delta, BitWriter bitWriter, Entry e)
        {
            Boolean signed = ((e.Flags & EntryFlags.Signed) != 0);
            Object value = delta.FindEntryValue(e.Name);

            if ((e.Flags & EntryFlags.Byte) != 0)
            {
                if (signed)
                {
                    SByte writeValue = (SByte)value;
                    WriteInt(bitWriter, e, (Int32)writeValue);
                }
                else
                {
                    Byte writeValue = (Byte)value;
                    WriteUnsignedInt(bitWriter, e, (UInt32)writeValue);
                }
            }
            else if ((e.Flags & EntryFlags.Short) != 0)
            {
                if (signed)
                {
                    Int16 writeValue = (Int16)value;
                    WriteInt(bitWriter, e, (Int32)writeValue);
                }
                else
                {
                    UInt16 writeValue = (UInt16)value;
                    WriteUnsignedInt(bitWriter, e, (UInt32)writeValue);
                }
            }
            else if ((e.Flags & EntryFlags.Integer) != 0)
            {
                if (signed)
                {
                    WriteInt(bitWriter, e, (Int32)value);
                }
                else
                {
                    WriteUnsignedInt(bitWriter, e, (UInt32)value);
                }
            }
            else if ((e.Flags & EntryFlags.Angle) != 0)
            {
                bitWriter.WriteUnsignedBits((UInt32)((Single)value / (360.0f / (Single)(1 << (Int32)e.nBits))), (Int32)e.nBits);
            }
            else if ((e.Flags & EntryFlags.String) != 0)
            {
                bitWriter.WriteString((String)value);
            }
            else if ((e.Flags & EntryFlags.Float) != 0 || (e.Flags & EntryFlags.TimeWindow8) != 0 || (e.Flags & EntryFlags.TimeWindowBig) != 0)
            {
                Single writeValue = (Single)value;
                Int32 bitsToWrite = (Int32)e.nBits;

                if (signed)
                {
                    bitWriter.WriteBoolean(writeValue < 0);
                    bitsToWrite--;
                }

                bitWriter.WriteUnsignedBits((UInt32)(Math.Abs(writeValue) * e.Divisor), bitsToWrite);
            }
            else
            {
                throw new ApplicationException(String.Format("Unknown delta entry type {0}.", e.Flags));
            }
        }
Exemplo n.º 5
0
        public Byte[] CreateDeltaBitmask(HalfLifeDelta delta)
        {
            UInt32 nBitmaskBytes = (UInt32)((entryList.Count / 8) + (entryList.Count % 8 > 0 ? 1 : 0));
            Byte[] bitmaskBytes = new Byte[nBitmaskBytes];

            for (Int32 i = 0; i < bitmaskBytes.Length; i++)
            {
                for (Int32 j = 0; j < 8; j++)
                {
                    Int32 index = j + i * 8;

                    if (index >= entryList.Count)
                    {
                        break;
                    }

                    if (delta.FindEntryValue(entryList[index].Name) != null)
                    {
                        bitmaskBytes[i] |= (Byte)(1 << j);
                    }
                }
            }

            return bitmaskBytes;
        }
Exemplo n.º 6
0
        /// <summary>
        /// Adds an entry. Delta is assumed to be delta_description_t. Should only need to be called when parsing svc_deltadescription.
        /// </summary>
        /// <param name="delta"></param>
        public void AddEntry(HalfLifeDelta delta)
        {
            String name = (String)delta.FindEntryValue("name");
            UInt32 nBits = (UInt32)delta.FindEntryValue("nBits");
            Single divisor = (Single)delta.FindEntryValue("divisor");
            EntryFlags flags = (EntryFlags)((UInt32)delta.FindEntryValue("flags"));
            //Single preMultiplier = (Single)delta.FindEntryValue("preMultiplier");

            AddEntry(name, nBits, divisor, flags);
        }