@@ -2,6 +2,7 @@ package demoinfocs
22
33import (
44 "fmt"
5+ "math"
56 "strings"
67
78 "github.com/golang/geo/r3"
@@ -122,6 +123,8 @@ func (p *parser) bindBomb() {
122123 site = events .BombsiteA
123124 case 2 :
124125 site = events .BombsiteB
126+ case 0 :
127+ site = p .getClosestBombsiteFromPosition (planter .Position ())
125128 }
126129
127130 if ! p .disableMimicSource1GameEvents {
@@ -305,18 +308,36 @@ func (p *parser) bindBombSites() {
305308 playerResource .BindProperty ("m_bombsiteCenterB" , & p .bombsiteB .center , st .ValTypeVector )
306309 })
307310
308- p . stParser . ServerClasses (). FindByName ( "CBaseTrigger" ). OnEntityCreated ( func (baseTrigger st.Entity ) {
311+ onBombTargetEntityCreated := func (target st.Entity ) {
309312 t := new (boundingBoxInformation )
310- p .triggers [baseTrigger .ID ()] = t
313+ p .triggers [target .ID ()] = t
311314
315+ var (
316+ minPropName string
317+ maxPropName string
318+ )
312319 if p .isSource2 () {
313- baseTrigger . BindProperty ( "m_vecMins" , & t . min , st . ValTypeVector )
314- baseTrigger . BindProperty ( "m_vecMaxs" , & t . max , st . ValTypeVector )
320+ minPropName = "m_vecMins"
321+ maxPropName = "m_vecMaxs"
315322 } else {
316- baseTrigger . BindProperty ( "m_Collision.m_vecMins" , & t . min , st . ValTypeVector )
317- baseTrigger . BindProperty ( "m_Collision.m_vecMaxs" , & t . max , st . ValTypeVector )
323+ minPropName = "m_Collision.m_vecMins"
324+ maxPropName = "m_Collision.m_vecMaxs"
318325 }
319- })
326+
327+ target .BindProperty (minPropName , & t .min , st .ValTypeVector )
328+ target .BindProperty (maxPropName , & t .max , st .ValTypeVector )
329+ }
330+
331+ if p .isSource2 () {
332+ // CBombTarget is not available with CS2 demos created in the early days of the limited test.
333+ bombTargetClass := p .stParser .ServerClasses ().FindByName ("CBombTarget" )
334+ if bombTargetClass != nil {
335+ bombTargetClass .OnEntityCreated (onBombTargetEntityCreated )
336+ return
337+ }
338+ }
339+
340+ p .stParser .ServerClasses ().FindByName ("CBaseTrigger" ).OnEntityCreated (onBombTargetEntityCreated )
320341}
321342
322343func (p * parser ) bindPlayers () {
@@ -899,10 +920,10 @@ func (p *parser) bindWeaponS2(entity st.Entity) {
899920 // - The player is inside the buy zone
900921 // - The player's money has increased AND the weapon entity is destroyed at the same tick (unfortunately the money is updated first)
901922 var (
902- owner * common.Player
903- oldOwnerMoney int
923+ owner * common.Player
924+ oldOwnerMoney int
904925 lastMoneyUpdateTick int
905- lastMoneyIncreased bool
926+ lastMoneyIncreased bool
906927 )
907928
908929 entity .Property ("m_hOwnerEntity" ).OnUpdate (func (val st.PropertyValue ) {
@@ -1300,3 +1321,18 @@ func (p *parser) bindHostages() {
13001321 })
13011322 })
13021323}
1324+
1325+ func getDistanceBetweenVectors (vectorA r3.Vector , vectorB r3.Vector ) float64 {
1326+ return math .Sqrt (math .Pow (vectorA .X - vectorB .X , 2 ) + math .Pow (vectorA .Y - vectorB .Y , 2 ) + math .Pow (vectorA .Z - vectorB .Z , 2 ))
1327+ }
1328+
1329+ func (p * parser ) getClosestBombsiteFromPosition (position r3.Vector ) events.Bombsite {
1330+ distanceFromBombsiteA := getDistanceBetweenVectors (position , p .bombsiteA .center )
1331+ distanceFromBombsiteB := getDistanceBetweenVectors (position , p .bombsiteB .center )
1332+
1333+ if distanceFromBombsiteA < distanceFromBombsiteB {
1334+ return events .BombsiteA
1335+ }
1336+
1337+ return events .BombsiteB
1338+ }
0 commit comments