Skip to content

Commit 51e7026

Browse files
authored
common: fix active Player.ActiveWeapon() sometimes being off after buy (#273)
1 parent 4df3c83 commit 51e7026

File tree

5 files changed

+17
-3
lines changed

5 files changed

+17
-3
lines changed

pkg/demoinfocs/common/common_test.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -152,6 +152,7 @@ type demoInfoProviderMock struct {
152152
ingameTick int
153153
playersByHandle map[int]*Player
154154
playerResourceEntity st.Entity
155+
equipment *Equipment
155156
}
156157

157158
func (p demoInfoProviderMock) TickRate() float64 {
@@ -170,6 +171,10 @@ func (p demoInfoProviderMock) PlayerResourceEntity() st.Entity {
170171
return p.playerResourceEntity
171172
}
172173

174+
func (p demoInfoProviderMock) FindWeaponByEntityID(id int) *Equipment {
175+
return p.equipment
176+
}
177+
173178
func mockDemoInfoProvider(tickRate float64, tick int) demoInfoProvider {
174179
return demoInfoProviderMock{
175180
tickRate: tickRate,

pkg/demoinfocs/common/player.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,7 @@ func (p *Player) activeWeaponID() int {
127127

128128
// ActiveWeapon returns the currently active / equipped weapon of the player.
129129
func (p *Player) ActiveWeapon() *Equipment {
130-
return p.Inventory[p.activeWeaponID()]
130+
return p.demoInfoProvider.FindWeaponByEntityID(p.activeWeaponID())
131131
}
132132

133133
// Weapons returns all weapons in the player's possession.
@@ -425,6 +425,7 @@ type demoInfoProvider interface {
425425
TickRate() float64 // in-game tick rate, used for Player.IsBlinded()
426426
FindPlayerByHandle(handle int) *Player
427427
PlayerResourceEntity() st.Entity
428+
FindWeaponByEntityID(id int) *Equipment
428429
}
429430

430431
// NewPlayer creates a *Player with an initialized equipment map.

pkg/demoinfocs/common/player_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,9 @@ func TestPlayerActiveWeapon(t *testing.T) {
1717
ak47 := NewEquipment(EqAK47)
1818

1919
pl := newPlayer(0)
20+
pl.demoInfoProvider = demoInfoProviderMock{equipment: ak47}
2021
pl.Inventory[1] = knife
21-
pl.Inventory[2] = glock
22-
pl.Inventory[3] = ak47
22+
pl.Inventory[3] = glock
2323
pl.Entity = entityWithProperty("m_hActiveWeapon", st.PropertyValue{IntVal: 3})
2424

2525
assert.Equal(t, ak47, pl.ActiveWeapon(), "Should have AK-47 equipped")

pkg/demoinfocs/events/events_test.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,3 +73,7 @@ func (p demoInfoProviderMock) FindPlayerByHandle(int) *common.Player {
7373
func (p demoInfoProviderMock) PlayerResourceEntity() st.Entity {
7474
return nil
7575
}
76+
77+
func (p demoInfoProviderMock) FindWeaponByEntityID(int) *common.Equipment {
78+
return nil
79+
}

pkg/demoinfocs/parser.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -363,3 +363,7 @@ func (p demoInfoProvider) FindPlayerByHandle(handle int) *common.Player {
363363
func (p demoInfoProvider) PlayerResourceEntity() st.Entity {
364364
return p.parser.gameState.playerResourceEntity
365365
}
366+
367+
func (p demoInfoProvider) FindWeaponByEntityID(entityID int) *common.Equipment {
368+
return p.parser.gameState.weapons[entityID]
369+
}

0 commit comments

Comments
 (0)