diff options
| author | Arda Serdar Pektezol <1669855+pektezol@users.noreply.github.com> | 2023-09-27 21:43:40 +0300 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-09-27 21:43:40 +0300 |
| commit | b73e472a972183386e8e787a6889ec452de0ef7f (patch) | |
| tree | 3d18aae200e54e982eb7e1f4ee5e36aeb6749f54 /pkg/messages/types/svcGameEvent.go | |
| parent | added game event list detailed parsing (#14) (diff) | |
| download | sdp.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.go | 45 |
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 | ||
| 8 | type SvcGameEvent struct { | 8 | type SvcGameEvent struct { |
| 9 | Length uint16 | 9 | Length uint16 |
| 10 | Data []byte // TODO: GameEvent[] | 10 | EventID uint32 |
| 11 | EventDescription GameEventDescriptor | ||
| 12 | EventDescriptors []EventDescriptorKey | ||
| 13 | } | ||
| 14 | |||
| 15 | type EventDescriptorKey struct { | ||
| 16 | Name string | ||
| 17 | Descriptor any | ||
| 11 | } | 18 | } |
| 12 | 19 | ||
| 13 | func ParseSvcGameEvent(reader *bitreader.Reader) SvcGameEvent { | 20 | func 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 | |||
| 29 | func (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 | } | ||