示例#1
0
        /// <summary>
        /// Decodes the bytes in the packet-entites message.
        /// </summary>
        /// <param name="packetEntities">Packet entities.</param>
        /// <param name="reader">Reader.</param>
        /// <param name="parser">Parser.</param>
        public static void Apply(PacketEntities packetEntities, IBitStream reader, DemoParser parser)
        {
            int currentEntity = -1;

            for (int i = 0; i < packetEntities.UpdatedEntries; i++)
            {
                //First read which entity is updated
                currentEntity += 1 + (int)reader.ReadUBitInt();

                //Find out whether we should create, destroy or update it.
                // Leave flag
                if (!reader.ReadBit())
                {
                    // enter flag
                    if (reader.ReadBit())
                    {
                        //create it
                        var e = ReadEnterPVS(reader, currentEntity, parser);

                        parser.Entities[currentEntity] = e;

                        e.ApplyUpdate(reader);
                    }
                    else
                    {
                        if (currentEntity < 0 || currentEntity >= parser.Entities.Length)
                        {
                            return;
                        }
                        // preserve / update
                        Entity e = parser.Entities[currentEntity];
                        if (e == null)
                        {
                            return;
                        }

                        e.ApplyUpdate(reader);
                    }
                }
                else
                {
                    Entity e = parser.Entities[currentEntity];
                    if (e == null)
                    {
                        return;
                    }

                    e.ServerClass.AnnounceDestroyedEntity(e);

                    // leave / destroy
                    e.Leave();
                    parser.Entities[currentEntity] = null;

                    //dunno, but you gotta read this.
                    if (reader.ReadBit())
                    {
                    }
                }
            }
        }
示例#2
0
        public uint ReadUBitInt()
        {
            var a = A.ReadUBitInt();
            var b = B.ReadUBitInt();

            Verify(a, b);
            return(a);
        }
示例#3
0
        public bool TryApplyMessage(ProtoBuf.IExtensible message, DemoParser parser)
        {
            CSVCMsg_PacketEntities packetEntities = message as CSVCMsg_PacketEntities;

            if (packetEntities == null)
            {
                return(false);
            }

            // TODO check
            // In official C++ source code, loop is from last to first entities in packetEntities -> impact ?
            using (IBitStream reader = BitStreamUtil.Create(packetEntities.entity_data)) {
                int currentEntity = -1;

                for (int i = 0; i < packetEntities.updated_entries; i++)
                {
                    currentEntity += 1 + (int)reader.ReadUBitInt();

                    if (!reader.ReadBit())
                    {
                        Entity entity;

                        if (reader.ReadBit())
                        {
                            // EnterPVS = add entity
                            entity = EnterPVS(reader, currentEntity, parser);
                        }
                        else
                        {
                            // DeltaEnt = update entity
                            entity = parser.entities[currentEntity];
                        }

                        entity.ApplyUpdate(reader);

                        UpdateModel(entity, parser);

                        Debug.WriteLine("Entity #" + entity.ID + ": " + entity.ServerClass.Name);
                    }
                    else
                    {
                        // LeavePVS
                        if (reader.ReadBit())
                        {
                            parser.entities.Remove(currentEntity);
                        }
                    }
                }
            }

            return(true);
        }
        /// <summary>
        ///     Decodes the bytes in the packet-entites message.
        /// </summary>
        /// <param name="packetEntities">Packet entities.</param>
        /// <param name="reader">Reader.</param>
        /// <param name="parser">Parser.</param>
        public static void Apply(PacketEntities packetEntities, IBitStream reader, DemoParser parser)
        {
            var currentEntity = -1;

            for (var i = 0; i < packetEntities.UpdatedEntries; i++)
            {
                //First read which entity is updated
                currentEntity += 1 + (int)reader.ReadUBitInt();

                //Find out whether we should create, destroy or update it.
                // Leave flag
                if (!reader.ReadBit())
                {
                    // enter flag
                    if (reader.ReadBit())
                    {
                        //create it
                        var e = ReadEnterPVS(reader, currentEntity, parser);

                        parser.Entities[currentEntity] = e;

                        e.ApplyUpdate(reader);
                    }
                    else
                    {
                        // preserve / update
                        var e = parser.Entities[currentEntity];
                        e.ApplyUpdate(reader);
                    }
                }
                else
                {
                    // leave / destroy
                    parser.Entities[currentEntity].Leave();
                    parser.Entities[currentEntity] = null;

                    //dunno, but you gotta read this.
                    if (reader.ReadBit())
                    {
                    }
                }
            }
        }
        public static void Apply(PacketEntities packetEntities, IBitStream reader, DemoParser parser)
        {
            int currentEntity = -1;

            for (int i = 0; i < packetEntities.UpdatedEntries; i++)
            {
                currentEntity += 1 + (int)reader.ReadUBitInt();

                // Leave flag
                if (!reader.ReadBit())
                {
                    // enter flag
                    if (reader.ReadBit())
                    {
                        var e = ReadEnterPVS(reader, currentEntity, parser);

                        parser.Entities[currentEntity] = e;

                        e.ApplyUpdate(reader);
                    }
                    else
                    {
                        // preserve
                        Entity e = parser.Entities[currentEntity];
                        e.ApplyUpdate(reader);
                    }
                }
                else
                {
                    // leave
                    parser.Entities [currentEntity].Leave();
                    parser.Entities[currentEntity] = null;
                    if (reader.ReadBit())
                    {
                    }
                }
            }
        }
		/// <summary>
		/// Decodes the bytes in the packet-entites message. 
		/// </summary>
		/// <param name="packetEntities">Packet entities.</param>
		/// <param name="reader">Reader.</param>
		/// <param name="parser">Parser.</param>
		public static void Apply(PacketEntities packetEntities, IBitStream reader, DemoParser parser)
        {
			int currentEntity = -1;

			for (int i = 0; i < packetEntities.UpdatedEntries; i++) {

				//First read which entity is updated
				currentEntity += 1 + (int)reader.ReadUBitInt();

				//Find out whether we should create, destroy or update it. 
				// Leave flag
				if (!reader.ReadBit()) {
					// enter flag
					if (reader.ReadBit()) {
						//create it
						var e = ReadEnterPVS(reader, currentEntity, parser);

						parser.Entities[currentEntity] = e;

						e.ApplyUpdate(reader);
					} else {
						// preserve / update
						Entity e = parser.Entities[currentEntity];
						e.ApplyUpdate(reader);
					}
				} else {
					// leave / destroy
					parser.Entities [currentEntity].Leave ();
					parser.Entities[currentEntity] = null;

					//dunno, but you gotta read this. 
					if (reader.ReadBit()) {
					}
				}
			}
        }