aboutsummaryrefslogtreecommitdiff
path: root/classes/userCmdInfo.go
diff options
context:
space:
mode:
authorBiSaXa <1669855+BiSaXa@users.noreply.github.com>2022-08-29 03:21:51 +0300
committerArda Serdar Pektezol <1669855+pektezol@users.noreply.github.com>2023-09-16 21:39:35 +0300
commitde673b3264c68926c693e3714c70761a3bcedf1c (patch)
tree3bc2802187e63391c4abde602a70a19a76615727 /classes/userCmdInfo.go
parentnew readme badges (diff)
downloadsdp.go-de673b3264c68926c693e3714c70761a3bcedf1c.tar.gz
sdp.go-de673b3264c68926c693e3714c70761a3bcedf1c.tar.bz2
sdp.go-de673b3264c68926c693e3714c70761a3bcedf1c.zip
janky bitreader, usercmdinfo almost finished
Diffstat (limited to 'classes/userCmdInfo.go')
-rw-r--r--classes/userCmdInfo.go140
1 files changed, 42 insertions, 98 deletions
diff --git a/classes/userCmdInfo.go b/classes/userCmdInfo.go
index a85a495..e91633d 100644
--- a/classes/userCmdInfo.go
+++ b/classes/userCmdInfo.go
@@ -1,8 +1,6 @@
1package classes 1package classes
2 2
3import ( 3import (
4 "fmt"
5
6 "github.com/bisaxa/demoparser/utils" 4 "github.com/bisaxa/demoparser/utils"
7) 5)
8 6
@@ -15,110 +13,56 @@ type UserCmdInfo struct {
15 ForwardMove float32 13 ForwardMove float32
16 SideMove float32 14 SideMove float32
17 UpMove float32 15 UpMove float32
16 // Buttons int32 This could work but no idea on parsing buttons
17 // Impulse byte }
18 // WeaponSelect int32 }
19 // WeaponSubtype int32 Not worth the effort, no one cares about these
20 // MouseDx int16 }
21 // MouseDy int }
18} 22}
19 23
24// It is so janky it hurts, but hey it is at least working (hopefully)
25// Reading the data is really weird, who even implemented this smh
20func UserCmdInfoInit(byteArr []byte, size int32) (output UserCmdInfo) { 26func UserCmdInfoInit(byteArr []byte, size int32) (output UserCmdInfo) {
21 var class UserCmdInfo 27 var class UserCmdInfo
22 if utils.ReadBitsFromReversedByteArray1(byteArr) { 28 successCount := 0
23 class.CommandNumber = int32(utils.ReadBitsFromReversedByteArray16(byteArr, 15)) 29 failedCount := 0
24 fmt.Printf("%b\n", class.CommandNumber) 30 looped := 0
25 } 31 classIndex := 0
26 return class 32 // fmt.Println(byteArr)
27} 33 // fmt.Printf("%08b", byteArr)
28 34 for i := 0; i < 8; i++ {
29/* 35 if successCount+failedCount > 7 {
30func UserCmdInfoInit(byteArr []byte, size int) (output UserCmdInfo) { 36 failedCount = -successCount
31 var class UserCmdInfo 37 looped++
32 reversedByteArr := utils.ReverseByteArrayValues(byteArr, size)
33 reader := bitreader.BitReader(reversedByteArr)
34 if size-1 >= 4 {
35 bit, err := reader.ReadBit()
36 utils.CheckError(err)
37 if bit {
38 value, err := reader.ReadBits(32)
39 utils.CheckError(err)
40 class.CommandNumber = int32(value)
41 } else {
42 return class
43 } 38 }
44 } 39 firstBit, err := utils.ReadBitStateLSB(byteArr[successCount*4+looped], successCount+failedCount)
45 if size-1 >= 8 {
46 bit, err := reader.ReadBit()
47 utils.CheckError(err)
48 if bit {
49 value, err := reader.ReadBits(32)
50 utils.CheckError(err)
51 class.TickCount = int32(value)
52 } else {
53 return class
54 }
55 }
56 if size-1 >= 12 {
57 bit, err := reader.ReadBit()
58 utils.CheckError(err)
59 if bit {
60 value, err := reader.ReadBits(32)
61 utils.CheckError(err)
62 class.ViewAnglesX = float32(value)
63 } else {
64 return class
65 }
66 }
67 if size-1 >= 16 {
68 bit, err := reader.ReadBit()
69 utils.CheckError(err)
70 if bit {
71 value, err := reader.ReadBits(32)
72 utils.CheckError(err)
73 class.ViewAnglesY = float32(value)
74 } else {
75 return class
76 }
77 }
78 if size-1 >= 20 {
79 bit, err := reader.ReadBit()
80 utils.CheckError(err)
81 if bit {
82 value, err := reader.ReadBits(32)
83 utils.CheckError(err)
84 class.ViewAnglesZ = float32(value)
85 } else {
86 return class
87 }
88 }
89 if size-1 >= 24 {
90 bit, err := reader.ReadBit()
91 utils.CheckError(err)
92 if bit {
93 value, err := reader.ReadBits(32)
94 utils.CheckError(err)
95 class.ForwardMove = float32(value)
96 } else {
97 return class
98 }
99 }
100 if size-1 >= 28 {
101 bit, err := reader.ReadBit()
102 utils.CheckError(err)
103 if bit {
104 value, err := reader.ReadBits(32)
105 utils.CheckError(err)
106 class.SideMove = float32(value)
107 } else {
108 return class
109 }
110 }
111 if size-1 >= 32 {
112 bit, err := reader.ReadBit()
113 utils.CheckError(err) 40 utils.CheckError(err)
114 if bit { 41 if firstBit {
115 value, err := reader.ReadBits(32) 42 successCount++
116 utils.CheckError(err) 43 switch classIndex {
117 class.UpMove = float32(value) 44 case 0:
45 class.CommandNumber = utils.Read32BitsAfterFirstBitInt32(byteArr, successCount+failedCount, successCount*4+looped)
46 case 1:
47 class.TickCount = utils.Read32BitsAfterFirstBitInt32(byteArr, successCount+failedCount, successCount*4+looped)
48 case 2:
49 class.ViewAnglesX = utils.Read32BitsAfterFirstBitFloat32(byteArr, successCount+failedCount, successCount*4+looped)
50 case 3:
51 class.ViewAnglesY = utils.Read32BitsAfterFirstBitFloat32(byteArr, successCount+failedCount, successCount*4+looped)
52 case 4:
53 class.ViewAnglesZ = utils.Read32BitsAfterFirstBitFloat32(byteArr, successCount+failedCount, successCount*4+looped)
54 case 5:
55 class.ForwardMove = utils.Read32BitsAfterFirstBitFloat32(byteArr, successCount+failedCount, successCount*4+looped)
56 case 6:
57 class.SideMove = utils.Read32BitsAfterFirstBitFloat32(byteArr, successCount+failedCount, successCount*4+looped)
58 case 7:
59 class.UpMove = utils.Read32BitsAfterFirstBitFloat32(byteArr, successCount+failedCount, successCount*4+looped)
60 }
61 classIndex++
118 } else { 62 } else {
119 return class 63 failedCount++
64 classIndex++
120 } 65 }
121 } 66 }
122 return class 67 return class
123} 68}
124*/