/// <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()) { } } } }
public uint ReadUBitInt() { var a = A.ReadUBitInt(); var b = B.ReadUBitInt(); Verify(a, b); return(a); }
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()) { } } } }