blob: 4410369650be5429aeb8b0234b63ff4dec20803f (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
|
package messages
import (
"github.com/pektezol/bitreader"
"github.com/pektezol/demoparser/pkg/writer"
)
type SvcGameEvent struct {
Length uint16
EventID uint32
EventDescription GameEventDescriptor
EventDescriptors []EventDescriptorKey
}
type EventDescriptorKey struct {
Name string
Descriptor any
}
func ParseSvcGameEvent(reader *bitreader.Reader) SvcGameEvent {
svcGameEvent := SvcGameEvent{
Length: uint16(reader.TryReadBits(11)),
}
gameEventReader := bitreader.NewReaderFromBytes(reader.TryReadBitsToSlice(uint64(svcGameEvent.Length)), true)
svcGameEvent.parseGameEvent(gameEventReader)
return svcGameEvent
}
func (svcGameEvent *SvcGameEvent) parseGameEvent(reader *bitreader.Reader) {
svcGameEvent.EventID = uint32(reader.TryReadBits(9))
svcGameEvent.EventDescription = GameEventList.GameEventDescriptor[svcGameEvent.EventID]
writer.TempAppendLine("\t\t%s (%d):", svcGameEvent.EventDescription.Name, svcGameEvent.EventID)
for _, descriptor := range svcGameEvent.EventDescription.Keys {
var value any
switch descriptor.Type {
case EventDescriptorString:
value = reader.TryReadString()
case EventDescriptorFloat:
value = reader.TryReadFloat32()
case EventDescriptorInt32:
value = reader.TryReadSInt32()
case EventDescriptorInt16:
value = reader.TryReadSInt16()
case EventDescriptorInt8:
value = reader.TryReadUInt8()
case EventDescriptorBool:
value = reader.TryReadBool()
case EventDescriptorUInt64:
value = reader.TryReadUInt64()
}
svcGameEvent.EventDescriptors = append(svcGameEvent.EventDescriptors, EventDescriptorKey{
Name: descriptor.Name,
Descriptor: value,
})
writer.TempAppendLine("\t\t\t%s: %v", descriptor.Name, value)
}
}
|