aboutsummaryrefslogtreecommitdiff
path: root/pkg/messages/types/svcGameEvent.go
diff options
context:
space:
mode:
authorArda Serdar Pektezol <1669855+pektezol@users.noreply.github.com>2023-09-27 21:43:40 +0300
committerGitHub <noreply@github.com>2023-09-27 21:43:40 +0300
commitb73e472a972183386e8e787a6889ec452de0ef7f (patch)
tree3d18aae200e54e982eb7e1f4ee5e36aeb6749f54 /pkg/messages/types/svcGameEvent.go
parentadded game event list detailed parsing (#14) (diff)
downloadsdp.go-b73e472a972183386e8e787a6889ec452de0ef7f.tar.gz
sdp.go-b73e472a972183386e8e787a6889ec452de0ef7f.tar.bz2
sdp.go-b73e472a972183386e8e787a6889ec452de0ef7f.zip
finish SvcGameEvent while editing SvcGameEventList (#15)
Diffstat (limited to 'pkg/messages/types/svcGameEvent.go')
-rw-r--r--pkg/messages/types/svcGameEvent.go45
1 files changed, 41 insertions, 4 deletions
diff --git a/pkg/messages/types/svcGameEvent.go b/pkg/messages/types/svcGameEvent.go
index e12d75a..4410369 100644
--- a/pkg/messages/types/svcGameEvent.go
+++ b/pkg/messages/types/svcGameEvent.go
@@ -6,15 +6,52 @@ import (
6) 6)
7 7
8type SvcGameEvent struct { 8type SvcGameEvent struct {
9 Length uint16 9 Length uint16
10 Data []byte // TODO: GameEvent[] 10 EventID uint32
11 EventDescription GameEventDescriptor
12 EventDescriptors []EventDescriptorKey
13}
14
15type EventDescriptorKey struct {
16 Name string
17 Descriptor any
11} 18}
12 19
13func ParseSvcGameEvent(reader *bitreader.Reader) SvcGameEvent { 20func ParseSvcGameEvent(reader *bitreader.Reader) SvcGameEvent {
14 svcGameEvent := SvcGameEvent{ 21 svcGameEvent := SvcGameEvent{
15 Length: uint16(reader.TryReadBits(11)), 22 Length: uint16(reader.TryReadBits(11)),
16 } 23 }
17 svcGameEvent.Data = reader.TryReadBitsToSlice(uint64(svcGameEvent.Length)) 24 gameEventReader := bitreader.NewReaderFromBytes(reader.TryReadBitsToSlice(uint64(svcGameEvent.Length)), true)
18 writer.TempAppendLine("\t\tData: %v", svcGameEvent.Data) 25 svcGameEvent.parseGameEvent(gameEventReader)
19 return svcGameEvent 26 return svcGameEvent
20} 27}
28
29func (svcGameEvent *SvcGameEvent) parseGameEvent(reader *bitreader.Reader) {
30 svcGameEvent.EventID = uint32(reader.TryReadBits(9))
31 svcGameEvent.EventDescription = GameEventList.GameEventDescriptor[svcGameEvent.EventID]
32 writer.TempAppendLine("\t\t%s (%d):", svcGameEvent.EventDescription.Name, svcGameEvent.EventID)
33 for _, descriptor := range svcGameEvent.EventDescription.Keys {
34 var value any
35 switch descriptor.Type {
36 case EventDescriptorString:
37 value = reader.TryReadString()
38 case EventDescriptorFloat:
39 value = reader.TryReadFloat32()
40 case EventDescriptorInt32:
41 value = reader.TryReadSInt32()
42 case EventDescriptorInt16:
43 value = reader.TryReadSInt16()
44 case EventDescriptorInt8:
45 value = reader.TryReadUInt8()
46 case EventDescriptorBool:
47 value = reader.TryReadBool()
48 case EventDescriptorUInt64:
49 value = reader.TryReadUInt64()
50 }
51 svcGameEvent.EventDescriptors = append(svcGameEvent.EventDescriptors, EventDescriptorKey{
52 Name: descriptor.Name,
53 Descriptor: value,
54 })
55 writer.TempAppendLine("\t\t\t%s: %v", descriptor.Name, value)
56 }
57}