88 msg "github.com/markus-wa/demoinfocs-golang/v2/pkg/demoinfocs/msg"
99)
1010
11- const entitySentinel = 9999
12-
1311func (p * parser ) handlePacketEntities (pe * msg.CSVCMsg_PacketEntities ) {
1412 defer func () {
1513 p .setError (recoverFromUnexpectedEOF (recover ()))
@@ -21,31 +19,30 @@ func (p *parser) handlePacketEntities(pe *msg.CSVCMsg_PacketEntities) {
2119 for i := 0 ; i < int (pe .UpdatedEntries ); i ++ {
2220 currentEntity += 1 + int (r .ReadUBitInt ())
2321
24- if currentEntity > entitySentinel {
25- break
26- }
27-
28- if r .ReadBit () {
29- // Leave PVS
30- if entity := p .gameState .entities [currentEntity ]; entity != nil {
31- entity .Destroy ()
32- delete (p .gameState .entities , currentEntity )
33- }
22+ cmd := r .ReadBitsToByte (2 )
23+ if cmd & 1 == 0 {
24+ if cmd & 2 != 0 {
25+ // Enter PVS
26+ if existing := p .gameState .entities [currentEntity ]; existing != nil {
27+ // Sometimes entities don't get destroyed when they should be
28+ // For instance when a player is replaced by a BOT
29+ existing .Destroy ()
30+ }
3431
35- // 'Force Delete' flag, not exactly sure what it's supposed to do
36- r .ReadBit ()
37- } else if r .ReadBit () {
38- // Enter PVS
39- if existing := p .gameState .entities [currentEntity ]; existing != nil {
40- // Sometimes entities don't get destroyed when they should be
41- // For instance when a player is replaced by a BOT
42- existing .Destroy ()
32+ p .gameState .entities [currentEntity ] = p .stParser .ReadEnterPVS (r , currentEntity )
33+ } else { //nolint:gocritic
34+ // Delta Update
35+ if entity := p .gameState .entities [currentEntity ]; entity != nil {
36+ entity .ApplyUpdate (r )
37+ }
4338 }
44- p .gameState .entities [currentEntity ] = p .stParser .ReadEnterPVS (r , currentEntity )
45- } else { //nolint:gocritic
46- // Delta Update
47- if entity := p .gameState .entities [currentEntity ]; entity != nil {
48- entity .ApplyUpdate (r )
39+ } else {
40+ if cmd & 2 != 0 {
41+ // Leave PVS
42+ if entity := p .gameState .entities [currentEntity ]; entity != nil {
43+ entity .Destroy ()
44+ delete (p .gameState .entities , currentEntity )
45+ }
4946 }
5047 }
5148 }
0 commit comments