@@ -12,6 +12,7 @@ import (
1212 "time"
1313
1414 dem "github.com/markus-wa/demoinfocs-golang"
15+ common "github.com/markus-wa/demoinfocs-golang/common"
1516 events "github.com/markus-wa/demoinfocs-golang/events"
1617)
1718
@@ -40,21 +41,43 @@ func TestDemoInfoCs(t *testing.T) {
4041 if err != nil {
4142 t .Fatal (err )
4243 }
43- fmt .Printf ("Header: %v\n " , h )
44+ fmt .Printf ("Header: %v - FrameRate()=%.2f frames/s ; FrameTime()=%.1fms\n " , h , h .FrameRate (), h .FrameTime ()* 1000 )
45+ h2 := p .Header ()
46+ if h != h2 {
47+ t .Errorf ("Headers returned by ParseHeader() & Header(), respectively, aren't equal; ParseHeader(): %v - Header(): %v" , h , h2 )
48+ }
4449
4550 fmt .Println ("Registering handlers" )
46- tState := p .GameState ().TState ()
47- ctState := p .GameState ().CTState ()
48- var oldTScore , oldCtScore int
49- p .RegisterEventHandler (func (events.TickDoneEvent ) {
50- newTScore := tState .Score ()
51- newCtScore := ctState .Score ()
52- if oldTScore != newTScore {
53- fmt .Println ("T-side score:" , newTScore )
54- oldTScore = newTScore
55- } else if ctState != nil && oldCtScore != newCtScore {
56- fmt .Println ("CT-side score:" , newCtScore )
57- oldCtScore = newCtScore
51+ p .RegisterEventHandler (func (e events.RoundEndedEvent ) {
52+ gs := p .GameState ()
53+ var winner * dem.TeamState
54+ var loser * dem.TeamState
55+ var winnerSide string
56+ switch e .Winner {
57+ case common .TeamTerrorists :
58+ winner = gs .TState ()
59+ loser = gs .CTState ()
60+ winnerSide = "T"
61+ case common .TeamCounterTerrorists :
62+ winner = gs .CTState ()
63+ loser = gs .TState ()
64+ winnerSide = "CT"
65+ default :
66+ // Probably match medic or something similar
67+ fmt .Println ("Round finished: No winner (tie)" )
68+ return
69+ }
70+ winnerClan := winner .ClanName ()
71+ winnerId := winner .ID ()
72+ winnerFlag := winner .Flag ()
73+ ingameTime := p .CurrentTime ()
74+ progressPercent := p .Progress () * 100
75+ ingameTick := gs .IngameTick ()
76+ currentFrame := p .CurrentFrame ()
77+ // Score + 1 for winner because it hasn't actually been updated yet
78+ fmt .Printf ("Round finished: score=%d:%d ; winnerSide=%s ; clanName=%q ; teamId=%d ; teamFlag=%s ; ingameTime=%.1fs ; progress=%.1f%% ; tick=%d ; frame=%d\n " , winner .Score ()+ 1 , loser .Score (), winnerSide , winnerClan , winnerId , winnerFlag , ingameTime , progressPercent , ingameTick , currentFrame )
79+ if len (winnerClan ) == 0 || winnerId == 0 || len (winnerFlag ) == 0 || ingameTime == 0 || progressPercent == 0 || ingameTick == 0 || currentFrame == 0 {
80+ t .Error ("Unexprected default value, check output of last round" )
5881 }
5982 })
6083
@@ -201,19 +224,21 @@ func TestDemoSet(t *testing.T) {
201224 defer func () {
202225 pErr := recover ()
203226 if pErr != nil {
204- t .Errorf ("Failed to parse '%s/%s' - %s\n " , demSetPath , name , pErr )
227+ t .Errorf ("Failed to parse '%s/%s': %s\n " , demSetPath , name , pErr )
205228 }
206229 }()
207230
208231 p := dem .NewParser (f , nil )
209232 _ , err = p .ParseHeader ()
210233 if err != nil {
211- t .Fatal (err )
234+ t .Error (err )
235+ return
212236 }
213237
214238 err = p .ParseToEnd ()
215239 if err != nil {
216- t .Fatal (err )
240+ t .Error (err )
241+ return
217242 }
218243 }()
219244 }
0 commit comments