Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
98 changes: 49 additions & 49 deletions parser/pkg/log/logger.go
Original file line number Diff line number Diff line change
@@ -1,49 +1,49 @@
package log
import (
"csgo-2d-demo-player/conf"
"fmt"
"go.uber.org/zap"
)
var logger *zap.Logger
func Init(mode conf.Mode) {
switch mode {
case conf.MODE_DEV:
logger = zap.Must(zap.NewDevelopment())
logger.Info("initialized development logger")
case conf.MODE_PROD:
logger = zap.Must(zap.NewProduction())
logger.Info("initialized production logger")
default:
panic("unknown mode")
}
}
func Close() {
errClose := logger.Sync()
if errClose != nil {
panic(errClose)
}
}
func L() *zap.Logger {
if logger == nil {
Init(conf.MODE_DEV)
}
return logger
}
func Print(msg string, err error) {
L().Info(msg, zap.Error(err))
}
func Printf(msg string, args ...any) {
L().Info(fmt.Sprintf(msg, args...))
}
func Println(msg string, err error) {
L().Info(msg, zap.Error(err))
}
package log

import (
"csgo-2d-demo-player/conf"
"fmt"

"go.uber.org/zap"
)

var logger *zap.Logger

func Init(mode conf.Mode) {
switch mode {
case conf.MODE_DEV:
logger = zap.Must(zap.NewDevelopment())
logger.Info("initialized development logger")
case conf.MODE_PROD:
logger = zap.Must(zap.NewProduction())
logger.Info("initialized production logger")
default:
panic("unknown mode")
}
}

func Close() {
errClose := logger.Sync()
if errClose != nil {
panic(errClose)
}
}

func L() *zap.Logger {
if logger == nil {
Init(conf.MODE_DEV)
}
return logger
}

func Print(msg string, err error) {
L().Info(msg, zap.Error(err))
}

func Printf(msg string, args ...any) {
L().Info(fmt.Sprintf(msg, args...))
}

func Println(msg string, err error) {
L().Info(msg, zap.Error(err))
}
15 changes: 8 additions & 7 deletions parser/pkg/parser/bomb.go
Original file line number Diff line number Diff line change
Expand Up @@ -57,19 +57,20 @@ func (b *bombHandler) tick() {
// because there is no event that tells us bomb is in zero state (in game, not planted), we detect
// bomb movement by calculating distance between frames. this happens at the end of the round when bomb was
// previously in different state (planted, exploded)
bombPos := b.parser.GameState().Bomb().Position()
bombPos.Z = 0
oldBombPos := b.position
oldBombPos.Z = 0
distance := bombPos.Distance(oldBombPos)
newBombPos := b.parser.GameState().Bomb().Position()

if distance > distanceDelta &&
// Calculate 2D distance without creating new vectors
dx := newBombPos.X - b.position.X
dy := newBombPos.Y - b.position.Y
distance := dx*dx + dy*dy // Use squared distance to avoid sqrt

if distance > (distanceDelta*distanceDelta) &&
(b.state == message.Bomb_Planted || b.state == message.Bomb_Explode || b.state == message.Bomb_Defused) {
//log.Printf("bomb movement detected '%v', state back to ZERO from '%v'", distance, b.state)
b.state = message.Bomb_Zero
}

b.position = b.parser.GameState().Bomb().Position()
b.position = newBombPos
}

func (b *bombHandler) message(mapCS *MapCS) *message.Bomb {
Expand Down
116 changes: 58 additions & 58 deletions parser/pkg/parser/map.go
Original file line number Diff line number Diff line change
@@ -1,58 +1,58 @@
// Package metadata provides metadata and utility functions,
// like translations from ingame coordinates to radar image pixels (see also /assets/maps directory).
package parser
import (
"github.com/golang/geo/r2"
)
// MapCS represents a CS:GO map. It contains information required to translate
// in-game world coordinates to coordinates relative to (0, 0) on the provided map-overviews (radar images).
type MapCS struct {
Name string
PZero r2.Point
Scale float64
}
// Translate translates in-game world-relative coordinates to (0, 0) relative coordinates.
func (m MapCS) Translate(x, y float64) (float64, float64) {
return x - m.PZero.X, m.PZero.Y - y
}
// TranslateScale translates and scales in-game world-relative coordinates to (0, 0) relative coordinates.
// The outputs are pixel coordinates for the radar images found in the maps folder.
func (m MapCS) TranslateScale(x, y float64) (float64, float64) {
x, y = m.Translate(x, y)
return x / m.Scale, y / m.Scale
}
// MapNameToMap translates a map name to a Map.
var MapNameToMap = make(map[string]MapCS)
// makeMap creates a map stuct initialized with the given parameters.
func makeMap(name string, x, y, scale float64) MapCS {
m := MapCS{Name: name, PZero: r2.Point{X: x, Y: y}, Scale: scale}
MapNameToMap[name] = m
return m
}
// Pre-defined map translations.
// see "steamapps/common/Counter-Strike Global Offensive/csgo/resource/overviews/*.txt"
var (
MapDeAncient = makeMap("de_ancient", -2953, 2164, 5)
MapDeAnubis = makeMap("de_anubis", -2796, 3328, 5.22)
MapDeCache = makeMap("de_cache", -2000, 3250, 5.5)
MapDeCanals = makeMap("de_canals", -2496, 1792, 4)
MapDeCbble = makeMap("de_cbble", -3840, 3072, 6)
MapDeDust2 = makeMap("de_dust2", -2476, 3239, 4.4)
MapDeInferno = makeMap("de_inferno", -2087, 3870, 4.9)
MapDeMirage = makeMap("de_mirage", -3230, 1713, 5)
MapDeNuke = makeMap("de_nuke", -3453, 2887, 7)
MapDeOverpass = makeMap("de_overpass", -4831, 1781, 5.2)
MapDeTrain = makeMap("de_train", -2477, 2392, 4.7)
MapDeVertigo = makeMap("de_vertigo", -3168, 1762, 4)
MapCsAgency = makeMap("cs_agency", -2947, 2492, 5)
MapCsOffice = makeMap("cs_office", -1838, 1858, 4.1)
)
// Package metadata provides metadata and utility functions,
// like translations from ingame coordinates to radar image pixels (see also /assets/maps directory).
package parser

import (
"github.com/golang/geo/r2"
)

// MapCS represents a CS:GO map. It contains information required to translate
// in-game world coordinates to coordinates relative to (0, 0) on the provided map-overviews (radar images).
type MapCS struct {
Name string
PZero r2.Point
Scale float64
}

// Translate translates in-game world-relative coordinates to (0, 0) relative coordinates.
func (m MapCS) Translate(x, y float64) (float64, float64) {
return x - m.PZero.X, m.PZero.Y - y
}

// TranslateScale translates and scales in-game world-relative coordinates to (0, 0) relative coordinates.
// The outputs are pixel coordinates for the radar images found in the maps folder.
func (m MapCS) TranslateScale(x, y float64) (float64, float64) {
x, y = m.Translate(x, y)
return x / m.Scale, y / m.Scale
}

// MapNameToMap translates a map name to a Map.
var MapNameToMap = make(map[string]MapCS)

// makeMap creates a map stuct initialized with the given parameters.
func makeMap(name string, x, y, scale float64) MapCS {
m := MapCS{Name: name, PZero: r2.Point{X: x, Y: y}, Scale: scale}

MapNameToMap[name] = m

return m
}

// Pre-defined map translations.
// see "steamapps/common/Counter-Strike Global Offensive/csgo/resource/overviews/*.txt"
var (
MapDeAncient = makeMap("de_ancient", -2953, 2164, 5)
MapDeAnubis = makeMap("de_anubis", -2796, 3328, 5.22)
MapDeCache = makeMap("de_cache", -2000, 3250, 5.5)
MapDeCanals = makeMap("de_canals", -2496, 1792, 4)
MapDeCbble = makeMap("de_cbble", -3840, 3072, 6)
MapDeDust2 = makeMap("de_dust2", -2476, 3239, 4.4)
MapDeInferno = makeMap("de_inferno", -2087, 3870, 4.9)
MapDeMirage = makeMap("de_mirage", -3230, 1713, 5)
MapDeNuke = makeMap("de_nuke", -3453, 2887, 7)
MapDeOverpass = makeMap("de_overpass", -4831, 1781, 5.2)
MapDeTrain = makeMap("de_train", -2477, 2392, 4.7)
MapDeVertigo = makeMap("de_vertigo", -3168, 1762, 4)
MapCsAgency = makeMap("cs_agency", -2947, 2492, 5)
MapCsOffice = makeMap("cs_office", -1838, 1858, 4.1)
)
Loading
Loading