From 7cea8421119ccd7c13c88ffb469b80a04ac46280 Mon Sep 17 00:00:00 2001 From: ExtReMLapin Date: Wed, 19 Jun 2019 00:46:14 +0200 Subject: [PATCH] added support for x64 --- garrysmod/garrysmod/lua/autorun/TrackIR.lua | 38 ++++++++---------- .../garrysmod/lua/bin/gmcl_TrackIR_win32.dll | Bin 24576 -> 24576 bytes .../garrysmod/lua/bin/gmcl_TrackIR_win64.dll | Bin 0 -> 28672 bytes 3 files changed, 17 insertions(+), 21 deletions(-) create mode 100644 garrysmod/garrysmod/lua/bin/gmcl_TrackIR_win64.dll diff --git a/garrysmod/garrysmod/lua/autorun/TrackIR.lua b/garrysmod/garrysmod/lua/autorun/TrackIR.lua index fb34a09..f07ba92 100644 --- a/garrysmod/garrysmod/lua/autorun/TrackIR.lua +++ b/garrysmod/garrysmod/lua/autorun/TrackIR.lua @@ -1,9 +1,4 @@ if CLIENT then - if not file.Exists("garrysmod/lua/bin/gmcl_TrackIR_win32.dll", "BASE_PATH") then - print("no trackir m8") - return - end - local DPS = 66 -- tickrate local draw = draw local math = math @@ -12,8 +7,6 @@ if CLIENT then local data1 local data2 - - local function RotateVector(vector, angle) local _vector = vector local _angle = angle @@ -22,6 +15,8 @@ if CLIENT then return _vector end + + -- no ugly view like 'max is 130, min is 130, more like max is 130 but every ° over 130 is reducted (1/exp function) local function Nicerlimit(var, minu, maxi) local _maxi = maxi + 0.2 * maxi -- +20% local _minu = minu + 0.2 * minu @@ -47,7 +42,8 @@ if CLIENT then var = math.min(math.max(_minu, var), _maxi) return var - end -- no ugly view like 'max is 130, min is 130, more like max is 130 but every ° over 130 is reducted (1/exp function) + end + local function TrackIR_View(ply, origin, angles, fov, znear, zfar) local vehicle = LocalPlayer():GetVehicle() @@ -60,12 +56,10 @@ if CLIENT then return end - if LocalPlayer():GetNWEntity("ScriptedVehicle", NULL) ~= NULL and string.StartWith(LocalPlayer():GetNetworkedEntity("ScriptedVehicle", NULL):GetClass(), "sent_") then return end - local ang1 = Angle(Nicerlimit(TrackIR.Pitch / 90, -70, 70), 0, 0) local ang2 = Angle(0, Nicerlimit(TrackIR.Yaw / 90, -130, 130), 0) local ang3 = Angle(0, 0, Nicerlimit(-1 * TrackIR.Roll / 90 + -2 * TrackIR.X / 900, -70, 70)) @@ -81,9 +75,9 @@ if CLIENT then view.drawviewer = false return view - end -- for the players + end - local function TrackIR_View2(ply, origin, angles, fov, znear, zfar) + local function TrackIR_View2(ply, origin, angles, fov, znear, zfar) local ang1 = Angle(Nicerlimit(TrackIR.Pitch / 90, -70, 70) + angles[1], 0, 0) local ang2 = Angle(0, Nicerlimit(TrackIR.Yaw / 90, -130, 130) + angles[2], 0) local ang3 = Angle(0, 0, Nicerlimit(-1 * TrackIR.Roll / 90 + -2 * TrackIR.X / 900, -70, 70)) @@ -99,9 +93,11 @@ if CLIENT then view.drawviewer = false return view - end -- for the players + end + local function TrackIR_Timer() + -- the best way would be to make it 60/120 times per sec. (i mean, not 60-120, it's 60 OR 120 (depending of the trackir device)) TrackIR.Update() TrackIR.Pitch = TrackIR.get_Pitch() or 0 TrackIR.Yaw = TrackIR.get_Yaw() or 0 @@ -113,33 +109,32 @@ if CLIENT then Var_TrackIR_Angle_APIRAW = Angle(Nicerlimit(TrackIR.Pitch / 90, -70, 70), Nicerlimit(TrackIR.Yaw / 90, -130, 130), Nicerlimit(-1 * TrackIR.Roll / 90 + -2 * TrackIR.X / 900, -70, 70)) data1 = Angle(Nicerlimit(TrackIR.Roll / 90 + TrackIR.X / 900, -70, 70), -1 * Nicerlimit(TrackIR.Pitch / 90, -70, 70), Nicerlimit(TrackIR.Yaw / 90, -130, 130)) data2 = -1 * TrackIR.X / 500 - end -- the best way would be to make it 60/120 times per sec. (i mean, not 60-120, it's 60 OR 120 (depending of the trackir device)) + end + hook.Add("HUDPaint", "TrackIr real aiming", function() + -- don't get lost my friend, know where you're aiming ;) local tr = (util.TraceLine(util.GetPlayerTrace(LocalPlayer())).HitPos):ToScreen() draw.RoundedBox(0, tr.x - 6, tr.y - 6, 12, 12, Color(0, 0, 0, 105)) draw.RoundedBox(4, tr.x - 5, tr.y - 5, 10, 10, Color(64, 134, 195, 170)) - end) -- don't get lost my friend, know where you're aiming ;) + end) + hook.Add("Tick", "fix *AfxGetMainWnd()", function() + -- wait until gmod has focus, else *AfxGetMainWnd() from the module will return NULL (0x0) if not system.HasFocus() then return end require("TrackIR") -- no shit sherlock - TrackIR.Pitch = 0 TrackIR.Roll = 0 TrackIR.Yaw = 0 TrackIR.X = 0 TrackIR.Y = 0 TrackIR.Z = 0 - - local _data1 local _data2 - - hook.Add("Think", "TrackIRupdate", TrackIR_Timer) timer.Create("TrackIR_Net", 1 / DPS, 0, function() @@ -165,7 +160,8 @@ if CLIENT then end hook.Remove("Tick", "fix *AfxGetMainWnd()") -- everything has been executed, don't let it get executed twice - end) -- wait until gmod has focus, else *AfxGetMainWnd() from the module will return NULL (0x0) + end) + end if SERVER then diff --git a/garrysmod/garrysmod/lua/bin/gmcl_TrackIR_win32.dll b/garrysmod/garrysmod/lua/bin/gmcl_TrackIR_win32.dll index c0ee04f41bff281e514ea5bf1dedb1c82e972d11..0eded9408267b3eec515e1f875db0a95a83a683d 100644 GIT binary patch delta 103 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 literal 0 HcmV?d00001