diff options
Diffstat (limited to 'pkg/classes/packet.go')
| -rw-r--r-- | pkg/classes/packet.go | 63 |
1 files changed, 3 insertions, 60 deletions
diff --git a/pkg/classes/packet.go b/pkg/classes/packet.go index 0bba102..a81cd87 100644 --- a/pkg/classes/packet.go +++ b/pkg/classes/packet.go | |||
| @@ -1,11 +1,7 @@ | |||
| 1 | package classes | 1 | package classes |
| 2 | 2 | ||
| 3 | import ( | 3 | import ( |
| 4 | "fmt" | ||
| 5 | |||
| 6 | "github.com/pektezol/bitreader" | 4 | "github.com/pektezol/bitreader" |
| 7 | "github.com/pektezol/demoparser/pkg/messages" | ||
| 8 | "github.com/pektezol/demoparser/pkg/writer" | ||
| 9 | ) | 5 | ) |
| 10 | 6 | ||
| 11 | const MSSC int = 2 | 7 | const MSSC int = 2 |
| @@ -30,61 +26,8 @@ type CmdInfo struct { | |||
| 30 | 26 | ||
| 31 | func (packet *Packet) ParsePacket(reader *bitreader.Reader) { | 27 | func (packet *Packet) ParsePacket(reader *bitreader.Reader) { |
| 32 | for count := 0; count < MSSC; count++ { | 28 | for count := 0; count < MSSC; count++ { |
| 33 | packet.ParseCmdInfo(reader) | 29 | reader.SkipBytes(76) |
| 34 | } | ||
| 35 | packet.InSequence = reader.TryReadUInt32() | ||
| 36 | packet.OutSequence = reader.TryReadUInt32() | ||
| 37 | packet.Size = reader.TryReadUInt32() | ||
| 38 | packetReader := bitreader.NewReaderFromBytes(reader.TryReadBytesToSlice(uint64(packet.Size)), true) | ||
| 39 | for { | ||
| 40 | messageType, err := packetReader.ReadBits(6) | ||
| 41 | if err != nil { | ||
| 42 | break | ||
| 43 | } | ||
| 44 | packet.Data = append(packet.Data, messages.ParseMessages(messageType, packetReader)) | ||
| 45 | } | ||
| 46 | } | ||
| 47 | |||
| 48 | func (packet *Packet) ParseCmdInfo(reader *bitreader.Reader) { | ||
| 49 | packet.PacketInfo = append(packet.PacketInfo, CmdInfo{ | ||
| 50 | Flags: reader.TryReadUInt32(), | ||
| 51 | ViewOrigin: []float32{reader.TryReadFloat32(), reader.TryReadFloat32(), reader.TryReadFloat32()}, | ||
| 52 | ViewAngles: []float32{reader.TryReadFloat32(), reader.TryReadFloat32(), reader.TryReadFloat32()}, | ||
| 53 | LocalViewAngles: []float32{reader.TryReadFloat32(), reader.TryReadFloat32(), reader.TryReadFloat32()}, | ||
| 54 | ViewOrigin2: []float32{reader.TryReadFloat32(), reader.TryReadFloat32(), reader.TryReadFloat32()}, | ||
| 55 | ViewAngles2: []float32{reader.TryReadFloat32(), reader.TryReadFloat32(), reader.TryReadFloat32()}, | ||
| 56 | LocalViewAngles2: []float32{reader.TryReadFloat32(), reader.TryReadFloat32(), reader.TryReadFloat32()}, | ||
| 57 | }) | ||
| 58 | writer.AppendLine("\tFlags: %s", CmdInfoFlags(packet.PacketInfo[len(packet.PacketInfo)-1].Flags).String()) | ||
| 59 | writer.AppendLine("\tView Origin: %v", packet.PacketInfo[len(packet.PacketInfo)-1].ViewOrigin) | ||
| 60 | writer.AppendLine("\tView Angles: %v", packet.PacketInfo[len(packet.PacketInfo)-1].ViewAngles) | ||
| 61 | writer.AppendLine("\tLocal View Angles: %v", packet.PacketInfo[len(packet.PacketInfo)-1].LocalViewAngles) | ||
| 62 | writer.AppendLine("\tView Origin 2: %v", packet.PacketInfo[len(packet.PacketInfo)-1].ViewOrigin2) | ||
| 63 | writer.AppendLine("\tView Angles 2: %v", packet.PacketInfo[len(packet.PacketInfo)-1].ViewAngles2) | ||
| 64 | writer.AppendLine("\tLocal View Angles 2: %v", packet.PacketInfo[len(packet.PacketInfo)-1].LocalViewAngles2) | ||
| 65 | writer.AppendLine("") | ||
| 66 | } | ||
| 67 | |||
| 68 | type CmdInfoFlags int | ||
| 69 | |||
| 70 | const ( | ||
| 71 | ECmdInfoFlagsNone = 0 | ||
| 72 | ECmdInfoFlagsUseOrigin2 = 1 | ||
| 73 | ECmdInfoFlagsUserAngles2 = 1 << 1 | ||
| 74 | ECmdInfoFlagsNoInterp = 1 << 2 | ||
| 75 | ) | ||
| 76 | |||
| 77 | func (cmdInfoFlags CmdInfoFlags) String() string { | ||
| 78 | switch cmdInfoFlags { | ||
| 79 | case ECmdInfoFlagsNone: | ||
| 80 | return "None" | ||
| 81 | case ECmdInfoFlagsUseOrigin2: | ||
| 82 | return "UseOrigin2" | ||
| 83 | case ECmdInfoFlagsUserAngles2: | ||
| 84 | return "UserAngles2" | ||
| 85 | case ECmdInfoFlagsNoInterp: | ||
| 86 | return "NoInterp" | ||
| 87 | default: | ||
| 88 | return fmt.Sprintf("%d", int(cmdInfoFlags)) | ||
| 89 | } | 30 | } |
| 31 | reader.SkipBytes(8) | ||
| 32 | reader.TryReadBytesToSlice(uint64(reader.TryReadUInt32())) | ||
| 90 | } | 33 | } |