diff options
Diffstat (limited to '')
| -rw-r--r-- | pkg/messages/types/svcGameEventList.go | 76 |
1 files changed, 72 insertions, 4 deletions
diff --git a/pkg/messages/types/svcGameEventList.go b/pkg/messages/types/svcGameEventList.go index 1fa7589..d020feb 100644 --- a/pkg/messages/types/svcGameEventList.go +++ b/pkg/messages/types/svcGameEventList.go | |||
| @@ -1,6 +1,8 @@ | |||
| 1 | package messages | 1 | package messages |
| 2 | 2 | ||
| 3 | import ( | 3 | import ( |
| 4 | "fmt" | ||
| 5 | |||
| 4 | "github.com/pektezol/bitreader" | 6 | "github.com/pektezol/bitreader" |
| 5 | "github.com/pektezol/demoparser/pkg/writer" | 7 | "github.com/pektezol/demoparser/pkg/writer" |
| 6 | ) | 8 | ) |
| @@ -8,18 +10,84 @@ import ( | |||
| 8 | type SvcGameEventList struct { | 10 | type SvcGameEventList struct { |
| 9 | Events int16 | 11 | Events int16 |
| 10 | Length int32 | 12 | Length int32 |
| 11 | GameEventDescriptor []gameEventDescriptor | 13 | GameEventDescriptor []GameEventDescriptor |
| 12 | } | 14 | } |
| 13 | 15 | ||
| 14 | type gameEventDescriptor struct { | 16 | type GameEventDescriptor struct { |
| 17 | EventID uint32 | ||
| 18 | Name string | ||
| 19 | Keys []struct { | ||
| 20 | Name string | ||
| 21 | Type EventDescriptor | ||
| 22 | } | ||
| 15 | } | 23 | } |
| 16 | 24 | ||
| 25 | type EventDescriptor uint8 | ||
| 26 | |||
| 17 | func ParseSvcGameEventList(reader *bitreader.Reader) SvcGameEventList { | 27 | func ParseSvcGameEventList(reader *bitreader.Reader) SvcGameEventList { |
| 18 | svcGameEventList := SvcGameEventList{ | 28 | svcGameEventList := SvcGameEventList{ |
| 19 | Events: int16(reader.TryReadBits(9)), | 29 | Events: int16(reader.TryReadBits(9)), |
| 20 | Length: int32(reader.TryReadBits(20)), | 30 | Length: int32(reader.TryReadBits(20)), |
| 21 | } | 31 | } |
| 22 | reader.TryReadBitsToSlice(uint64(svcGameEventList.Length)) | 32 | gameEventListReader := bitreader.NewReaderFromBytes(reader.TryReadBitsToSlice(uint64(svcGameEventList.Length)), true) |
| 23 | writer.TempAppendLine("\t\tEvents: %d", svcGameEventList.Events) | 33 | writer.TempAppendLine("\t\t%d Events:", svcGameEventList.Events) |
| 34 | svcGameEventList.parseGameEventDescriptor(gameEventListReader) | ||
| 24 | return svcGameEventList | 35 | return svcGameEventList |
| 25 | } | 36 | } |
| 37 | |||
| 38 | func (svcGameEventList *SvcGameEventList) parseGameEventDescriptor(reader *bitreader.Reader) { | ||
| 39 | svcGameEventList.GameEventDescriptor = make([]GameEventDescriptor, svcGameEventList.Events) | ||
| 40 | for event := 0; event < int(svcGameEventList.Events); event++ { | ||
| 41 | gameEventDescriptor := GameEventDescriptor{ | ||
| 42 | EventID: uint32(reader.TryReadBits(9)), | ||
| 43 | Name: reader.TryReadString(), | ||
| 44 | } | ||
| 45 | writer.TempAppendLine("\t\t\t%d: %s", gameEventDescriptor.EventID, gameEventDescriptor.Name) | ||
| 46 | for { | ||
| 47 | descriptorType := reader.TryReadBits(3) | ||
| 48 | if descriptorType == 0 { | ||
| 49 | break | ||
| 50 | } | ||
| 51 | KeyName := reader.TryReadString() | ||
| 52 | gameEventDescriptor.Keys = append(gameEventDescriptor.Keys, struct { | ||
| 53 | Name string | ||
| 54 | Type EventDescriptor | ||
| 55 | }{ | ||
| 56 | Name: KeyName, | ||
| 57 | Type: EventDescriptor(descriptorType), | ||
| 58 | }) | ||
| 59 | } | ||
| 60 | writer.TempAppendLine("\t\t\t\tKeys: %v", gameEventDescriptor.Keys) | ||
| 61 | } | ||
| 62 | } | ||
| 63 | |||
| 64 | const ( | ||
| 65 | String EventDescriptor = iota + 1 | ||
| 66 | Float | ||
| 67 | Int32 | ||
| 68 | Int16 | ||
| 69 | Int8 | ||
| 70 | Bool | ||
| 71 | UInt64 | ||
| 72 | ) | ||
| 73 | |||
| 74 | func (eventDescriptor EventDescriptor) String() string { | ||
| 75 | switch eventDescriptor { | ||
| 76 | case String: | ||
| 77 | return "String" | ||
| 78 | case Float: | ||
| 79 | return "Float" | ||
| 80 | case Int32: | ||
| 81 | return "Int32" | ||
| 82 | case Int16: | ||
| 83 | return "Int16" | ||
| 84 | case Int8: | ||
| 85 | return "Int8" | ||
| 86 | case Bool: | ||
| 87 | return "Bool" | ||
| 88 | case UInt64: | ||
| 89 | return "UInt64" | ||
| 90 | default: | ||
| 91 | return fmt.Sprintf("%d", eventDescriptor) | ||
| 92 | } | ||
| 93 | } | ||