1
1
import { gsiState , players } from '/hud/core/state.js'
2
2
import { parsePosition } from '/hud/gsi/parse-position.js'
3
3
4
- const additionalGrenadeData = ( grenade ) => {
4
+ const cachedFirebombTypes = { }
5
+
6
+ const getFirebombType = ( grenadeId , owner ) => {
7
+ const ownerActiveGrenade = owner ?. grenades ?. find ( ( nade ) => nade . isActive )
8
+
9
+ if ( ! ownerActiveGrenade ) {
10
+ return cachedFirebombTypes [ grenadeId ]
11
+ }
12
+
13
+ if ( ownerActiveGrenade . name === 'weapon_incgrenade' ) {
14
+ cachedFirebombTypes [ grenadeId ] = 'incgrenade'
15
+ return 'incgrenade'
16
+ }
17
+
18
+ if ( ownerActiveGrenade . name === 'weapon_molotov' ) {
19
+ cachedFirebombTypes [ grenadeId ] = 'molotov'
20
+ return 'molotov'
21
+ }
22
+ }
23
+
24
+ const additionalGrenadeData = ( grenade , grenadeId , owner ) => {
5
25
switch ( grenade . type ) {
6
26
case 'inferno' :
7
27
return {
@@ -11,6 +31,11 @@ const additionalGrenadeData = (grenade) => {
11
31
} ) )
12
32
}
13
33
34
+ case 'firebomb' :
35
+ return {
36
+ firebombType : getFirebombType ( grenadeId , owner ) ,
37
+ }
38
+
14
39
case 'decoy' :
15
40
case 'smoke' :
16
41
return {
@@ -21,19 +46,37 @@ const additionalGrenadeData = (grenade) => {
21
46
}
22
47
}
23
48
24
- export const parseGrenades = ( ) => Object . entries ( gsiState . grenades ) . map ( ( [ id , grenade ] ) => {
25
- const velocity = parsePosition ( grenade . velocity )
49
+ export const parseGrenades = ( ) => {
50
+ const firebombGrenadeIds = new Set ( )
51
+
52
+ const grenades = Object . entries ( gsiState . grenades ) . map ( ( [ id , grenade ] ) => {
53
+ const velocity = parsePosition ( grenade . velocity )
54
+ const owner = players . find ( ( player ) => player . steam64Id === grenade . owner )
26
55
27
- return {
28
- id ,
29
- velocity ,
56
+ if ( grenade . type === 'firebomb' ) {
57
+ firebombGrenadeIds . add ( id )
58
+ }
30
59
31
- isDetonated : velocity && velocity [ 0 ] === 0 && velocity [ 1 ] === 0 && velocity [ 2 ] === 0 ,
32
- lifeTimeSec : Number ( grenade . lifetime ) ,
33
- owner : players . find ( ( player ) => player . steam64Id === grenade . owner ) ,
34
- position : parsePosition ( grenade . position ) ,
35
- type : grenade . type ,
60
+ return {
61
+ id,
62
+ owner,
63
+ velocity,
36
64
37
- ...additionalGrenadeData ( grenade ) ,
65
+ isDetonated : velocity && velocity [ 0 ] === 0 && velocity [ 1 ] === 0 && velocity [ 2 ] === 0 ,
66
+ lifeTimeSec : Number ( grenade . lifetime ) ,
67
+ position : parsePosition ( grenade . position ) ,
68
+ type : grenade . type ,
69
+
70
+ ...additionalGrenadeData ( grenade , id , owner ) ,
71
+ }
72
+ } )
73
+
74
+ for ( const id in cachedFirebombTypes ) {
75
+ if ( ! firebombGrenadeIds . has ( id ) ) {
76
+ delete cachedFirebombTypes [ id ]
77
+ console . log ( 'deleting' , id )
78
+ }
38
79
}
39
- } )
80
+
81
+ return grenades
82
+ }
0 commit comments