From 4e71a481884c0c43aea3d0ee695ae68cdec56478 Mon Sep 17 00:00:00 2001 From: BiSaXa <1669855+BiSaXa@users.noreply.github.com> Date: Wed, 7 Sep 2022 19:40:16 +0300 Subject: first rewrite commit using bisaxa/bitreader --- classes/classes.go | 155 +++++++++++++++++++++++++++++++++++++++++++++++++ classes/cmdInfo.go | 25 -------- classes/stringTable.go | 27 --------- classes/types.go | 28 +++++++++ classes/userCmdInfo.go | 72 ----------------------- 5 files changed, 183 insertions(+), 124 deletions(-) create mode 100644 classes/classes.go delete mode 100644 classes/cmdInfo.go delete mode 100644 classes/stringTable.go create mode 100644 classes/types.go delete mode 100644 classes/userCmdInfo.go (limited to 'classes') diff --git a/classes/classes.go b/classes/classes.go new file mode 100644 index 0000000..beaab77 --- /dev/null +++ b/classes/classes.go @@ -0,0 +1,155 @@ +package classes + +import ( + "os" + + "github.com/bisaxa/bitreader" + "github.com/bisaxa/demoparser/utils" +) + +func ParseCmdInfo(file *os.File, MSSC int) []CmdInfo { + reader := bitreader.Reader(file, true) + var cmdinfo CmdInfo + var cmdinfoarray []CmdInfo + for count := 0; count < MSSC; count++ { + cmdinfo.Flags = int32(reader.TryReadInt32()) + var floatArray [3]float32 + for i := 0; i < 3; i++ { + floatArray[i] = reader.TryReadFloat32() + } + cmdinfo.ViewOrigin = floatArray[:] + for i := 0; i < 3; i++ { + floatArray[i] = reader.TryReadFloat32() + } + cmdinfo.ViewAngles = floatArray[:] + for i := 0; i < 3; i++ { + floatArray[i] = reader.TryReadFloat32() + } + cmdinfo.LocalViewAngles = floatArray[:] + for i := 0; i < 3; i++ { + floatArray[i] = reader.TryReadFloat32() + } + cmdinfo.ViewOrigin2 = floatArray[:] + for i := 0; i < 3; i++ { + floatArray[i] = reader.TryReadFloat32() + } + cmdinfo.ViewAngles2 = floatArray[:] + for i := 0; i < 3; i++ { + floatArray[i] = reader.TryReadFloat32() + } + cmdinfo.LocalViewAngles2 = floatArray[:] + cmdinfoarray = append(cmdinfoarray, cmdinfo) + } + return cmdinfoarray +} + +func ParseUserCmdInfo(file *os.File, size int) UserCmdInfo { + count := 0 + reader := bitreader.Reader(file, true) + var usercmd UserCmdInfo + flag, err := reader.ReadBool() + utils.CheckError(err) + if flag { + usercmd.CommandNumber = int32(reader.TryReadInt32()) + count += 32 + } + count++ + flag, err = reader.ReadBool() + utils.CheckError(err) + if flag { + usercmd.TickCount = int32(reader.TryReadInt32()) + count += 32 + } + count++ + flag, err = reader.ReadBool() + utils.CheckError(err) + if flag { + usercmd.ViewAnglesX = reader.TryReadFloat32() + count += 32 + } + count++ + flag, err = reader.ReadBool() + utils.CheckError(err) + if flag { + usercmd.ViewAnglesY = reader.TryReadFloat32() + count += 32 + } + count++ + flag, err = reader.ReadBool() + utils.CheckError(err) + if flag { + usercmd.ViewAnglesZ = reader.TryReadFloat32() + count += 32 + } + count++ + flag, err = reader.ReadBool() + utils.CheckError(err) + if flag { + usercmd.ForwardMove = reader.TryReadFloat32() + count += 32 + } + count++ + flag, err = reader.ReadBool() + utils.CheckError(err) + if flag { + usercmd.SideMove = reader.TryReadFloat32() + count += 32 + } + count++ + flag, err = reader.ReadBool() + utils.CheckError(err) + if flag { + usercmd.UpMove = reader.TryReadFloat32() + count += 32 + } + count++ + flag, err = reader.ReadBool() + utils.CheckError(err) + if flag { + usercmd.Buttons = int32(reader.TryReadInt32()) + count += 32 + } + count++ + flag, err = reader.ReadBool() + utils.CheckError(err) + if flag { + //reader.SkipBits(8) + usercmd.Impulse = int8(reader.TryReadInt8()) + count += 8 + } + count++ + flag, err = reader.ReadBool() + utils.CheckError(err) + if flag { + value, err := reader.ReadBits(11) + utils.CheckError(err) + usercmd.WeaponSelect = int(value) + flag, err = reader.ReadBool() + utils.CheckError(err) + count += 11 + if flag { + value, err := reader.ReadBits(6) + utils.CheckError(err) + usercmd.WeaponSubtype = int(value) + count += 6 + } + count++ + } + count++ + flag, err = reader.ReadBool() + utils.CheckError(err) + if flag { + usercmd.MouseDx = int16(reader.TryReadInt16()) + count += 16 + } + count++ + flag, err = reader.ReadBool() + utils.CheckError(err) + if flag { + usercmd.MouseDy = int16(reader.TryReadInt16()) + count += 16 + } + count++ + reader.SkipBits(size*8 - count) + return usercmd +} diff --git a/classes/cmdInfo.go b/classes/cmdInfo.go deleted file mode 100644 index 7e7e1bc..0000000 --- a/classes/cmdInfo.go +++ /dev/null @@ -1,25 +0,0 @@ -package classes - -import "github.com/bisaxa/demoparser/utils" - -type CmdInfo struct { - Flags int32 - ViewOrigin []float32 - ViewAngles []float32 - LocalViewAngles []float32 - ViewOrigin2 []float32 - ViewAngles2 []float32 - LocalViewAngles2 []float32 -} - -func CmdInfoInit(bytes []byte) (output CmdInfo) { - var class CmdInfo - class.Flags = int32(utils.IntFromBytes(bytes[:4])) - class.ViewOrigin = utils.FloatArrFromBytes(bytes[4:16]) - class.ViewAngles = utils.FloatArrFromBytes(bytes[16:28]) - class.LocalViewAngles = utils.FloatArrFromBytes(bytes[28:40]) - class.ViewOrigin2 = utils.FloatArrFromBytes(bytes[40:52]) - class.ViewAngles2 = utils.FloatArrFromBytes(bytes[52:64]) - class.LocalViewAngles2 = utils.FloatArrFromBytes(bytes[64:76]) - return class -} diff --git a/classes/stringTable.go b/classes/stringTable.go deleted file mode 100644 index 0833612..0000000 --- a/classes/stringTable.go +++ /dev/null @@ -1,27 +0,0 @@ -package classes - -type StringTable struct { - NumOfTables int32 - TableName string - NumOfEntries int16 - EntryName string - EntrySize int16 - EntryData []byte - NumOfClientEntries int16 - ClientEntryName string - ClientEntrySize int16 - ClientEntryData []byte -} - -/* -func StringTableInit(bytes []byte) (output StringTable) { - var class StringTable - class.NumOfTables = int(utils.IntFromBytes(bytes[:1])) - class.TableName = string(bytes[1:16]) - class.ViewAngles = utils.FloatArrFromBytes(bytes[16:28]) - class.LocalViewAngles = utils.FloatArrFromBytes(bytes[28:40]) - class.ViewOrigin2 = utils.FloatArrFromBytes(bytes[40:52]) - class.ViewAngles2 = utils.FloatArrFromBytes(bytes[52:64]) - class.LocalViewAngles2 = utils.FloatArrFromBytes(bytes[64:76]) - return class -}*/ diff --git a/classes/types.go b/classes/types.go new file mode 100644 index 0000000..3fcc692 --- /dev/null +++ b/classes/types.go @@ -0,0 +1,28 @@ +package classes + +type CmdInfo struct { + Flags int32 + ViewOrigin []float32 + ViewAngles []float32 + LocalViewAngles []float32 + ViewOrigin2 []float32 + ViewAngles2 []float32 + LocalViewAngles2 []float32 +} + +type UserCmdInfo struct { + CommandNumber int32 + TickCount int32 + ViewAnglesX float32 + ViewAnglesY float32 + ViewAnglesZ float32 + ForwardMove float32 + SideMove float32 + UpMove float32 + Buttons int32 + Impulse int8 + WeaponSelect int + WeaponSubtype int + MouseDx int16 + MouseDy int16 +} diff --git a/classes/userCmdInfo.go b/classes/userCmdInfo.go deleted file mode 100644 index d2de229..0000000 --- a/classes/userCmdInfo.go +++ /dev/null @@ -1,72 +0,0 @@ -package classes - -import ( - "fmt" - - "github.com/bisaxa/demoparser/utils" -) - -type UserCmdInfo struct { - CommandNumber int32 - TickCount int32 - ViewAnglesX float32 - ViewAnglesY float32 - ViewAnglesZ float32 - ForwardMove float32 - SideMove float32 - UpMove float32 - Buttons int32 - // Impulse byte } - // WeaponSelect int32 } - // WeaponSubtype int32 Not worth the effort, no one cares about these - // MouseDx int16 } - // MouseDy int } -} - -// It is so janky it hurts, but hey it is at least working (hopefully) -// Reading the data is really weird, who even implemented this smh -func UserCmdInfoInit(byteArr []byte, size int32) (output UserCmdInfo) { - var class UserCmdInfo - successCount := 0 - failedCount := 0 - looped := 0 - classIndex := 0 - //fmt.Println(byteArr) - fmt.Printf("%08b\n", byteArr) - for i := 0; i < 9; i++ { - if successCount+failedCount > 7 { - failedCount = -successCount - looped++ - } - firstBit, err := utils.ReadBitStateLSB(byteArr[successCount*4+looped], successCount+failedCount) - utils.CheckError(err) - if firstBit { - successCount++ - switch classIndex { - case 0: - class.CommandNumber = utils.Read32BitsAfterFirstBitInt32(byteArr, successCount+failedCount, successCount*4+looped) - case 1: - class.TickCount = utils.Read32BitsAfterFirstBitInt32(byteArr, successCount+failedCount, successCount*4+looped) - case 2: - class.ViewAnglesX = utils.Read32BitsAfterFirstBitFloat32(byteArr, successCount+failedCount, successCount*4+looped) - case 3: - class.ViewAnglesY = utils.Read32BitsAfterFirstBitFloat32(byteArr, successCount+failedCount, successCount*4+looped) - case 4: - class.ViewAnglesZ = utils.Read32BitsAfterFirstBitFloat32(byteArr, successCount+failedCount, successCount*4+looped) - case 5: - class.ForwardMove = utils.Read32BitsAfterFirstBitFloat32(byteArr, successCount+failedCount, successCount*4+looped) - case 6: - class.SideMove = utils.Read32BitsAfterFirstBitFloat32(byteArr, successCount+failedCount, successCount*4+looped) - case 7: - class.UpMove = utils.Read32BitsAfterFirstBitFloat32(byteArr, successCount+failedCount, successCount*4+looped) - case 8: - class.Buttons = utils.Read32BitsAfterFirstBitInt32(byteArr, successCount+failedCount, successCount*4+looped) - } - classIndex++ - } else { - failedCount++ - classIndex++ - } - } - return class -} -- cgit v1.2.3