From 7bf1a49893118f4277e8069f47ad348e24624de0 Mon Sep 17 00:00:00 2001 From: LiddulBOFH <13317534+LiddulBOFH@users.noreply.github.com> Date: Fri, 2 Feb 2024 14:00:08 -0600 Subject: [PATCH] More new models, new E2/SF functions Added more models courtesy of ghosteh (electric turret motor, hydraulic turret motor, gyroscope, and computer) Adjusted min/max arc limits to not pass 0, so there is less potential confusion and the turret is always able to reach "home" New E2/SF functions including: E:acfGetTurret* - Angle: Current degrees from center - Gyro: Linked gyro - Motor: Linked motor - Mass: Loaded mass (kg) - MassCenter: Local mass center - SlewRate: Current slew rate (degrees/s) - MaxSlewRate: Maximum slew rate (degrees/s) - SlewAccel: Slew acceleration (degrees/s^2) - Stabilized: 0-1 depending on stabilization - Data: Table containing most of the above data for ease of use (E2) E:acfCenterTurret: Returns the turret to center E:acfAimTurret: Takes a number, angle, or vector - Number: Local degrees from center - Angle: Global angle to attempt to aim at - Vector: Position to attempt to aim at (SF) E:acfCenterTurret: Same as E2 E:acfSetTurretDegree: Attempts to rotate to this degree from center E:acfSetTurretAngle: Attempts to rotate to this global angle E:acfSetTurretTargetPosition: Attempts to rotate to aim at this position --- lua/acf/entities/turrets/turret_menu_cl.lua | 11 +- lua/acf/entities/turrets/turrets.lua | 16 +- lua/entities/acf_turret/cl_init.lua | 23 +- lua/entities/acf_turret/init.lua | 8 +- lua/entities/acf_turret_gyro/shared.lua | 1 + lua/entities/acf_turret_motor/shared.lua | 1 + .../core/custom/acffunctions.lua | 167 ++++++++++- .../core/custom/cl_acfdescriptions.lua | 20 +- lua/starfall/libs_sh/acffunctions.lua | 271 ++++++++++++++++++ models/acf/core/t_computer.dx80.vtx | Bin 0 -> 8439 bytes models/acf/core/t_computer.dx90.vtx | Bin 0 -> 8439 bytes models/acf/core/t_computer.mdl | Bin 0 -> 1748 bytes models/acf/core/t_computer.phy | Bin 0 -> 1092 bytes models/acf/core/t_computer.sw.vtx | Bin 0 -> 8431 bytes models/acf/core/t_computer.vvd | Bin 0 -> 42688 bytes models/acf/core/t_drive_e.dx80.vtx | Bin 0 -> 5499 bytes models/acf/core/t_drive_e.dx90.vtx | Bin 0 -> 5499 bytes models/acf/core/t_drive_e.mdl | Bin 0 -> 1748 bytes models/acf/core/t_drive_e.phy | Bin 0 -> 2330 bytes models/acf/core/t_drive_e.sw.vtx | Bin 0 -> 5491 bytes models/acf/core/t_drive_e.vvd | Bin 0 -> 26048 bytes models/acf/core/t_drive_h.dx80.vtx | Bin 0 -> 9867 bytes models/acf/core/t_drive_h.dx90.vtx | Bin 0 -> 9867 bytes models/acf/core/t_drive_h.mdl | Bin 0 -> 1748 bytes models/acf/core/t_drive_h.phy | Bin 0 -> 2331 bytes models/acf/core/t_drive_h.sw.vtx | Bin 0 -> 9859 bytes models/acf/core/t_drive_h.vvd | Bin 0 -> 49344 bytes models/acf/core/t_gyro.dx80.vtx | Bin 0 -> 7395 bytes models/acf/core/t_gyro.dx90.vtx | Bin 0 -> 7395 bytes models/acf/core/t_gyro.mdl | Bin 0 -> 1744 bytes models/acf/core/t_gyro.phy | Bin 0 -> 1471 bytes models/acf/core/t_gyro.sw.vtx | Bin 0 -> 7387 bytes models/acf/core/t_gyro.vvd | Bin 0 -> 34240 bytes models/acf/core/t_ring.mdl | Bin 1744 -> 1744 bytes models/acf/core/t_ring.vvd | Bin 16832 -> 16832 bytes models/acf/core/t_trun.mdl | Bin 1744 -> 1744 bytes 36 files changed, 495 insertions(+), 23 deletions(-) create mode 100644 models/acf/core/t_computer.dx80.vtx create mode 100644 models/acf/core/t_computer.dx90.vtx create mode 100644 models/acf/core/t_computer.mdl create mode 100644 models/acf/core/t_computer.phy create mode 100644 models/acf/core/t_computer.sw.vtx create mode 100644 models/acf/core/t_computer.vvd create mode 100644 models/acf/core/t_drive_e.dx80.vtx create mode 100644 models/acf/core/t_drive_e.dx90.vtx create mode 100644 models/acf/core/t_drive_e.mdl create mode 100644 models/acf/core/t_drive_e.phy create mode 100644 models/acf/core/t_drive_e.sw.vtx create mode 100644 models/acf/core/t_drive_e.vvd create mode 100644 models/acf/core/t_drive_h.dx80.vtx create mode 100644 models/acf/core/t_drive_h.dx90.vtx create mode 100644 models/acf/core/t_drive_h.mdl create mode 100644 models/acf/core/t_drive_h.phy create mode 100644 models/acf/core/t_drive_h.sw.vtx create mode 100644 models/acf/core/t_drive_h.vvd create mode 100644 models/acf/core/t_gyro.dx80.vtx create mode 100644 models/acf/core/t_gyro.dx90.vtx create mode 100644 models/acf/core/t_gyro.mdl create mode 100644 models/acf/core/t_gyro.phy create mode 100644 models/acf/core/t_gyro.sw.vtx create mode 100644 models/acf/core/t_gyro.vvd diff --git a/lua/acf/entities/turrets/turret_menu_cl.lua b/lua/acf/entities/turrets/turret_menu_cl.lua index f78f0e540..5c800b2a0 100644 --- a/lua/acf/entities/turrets/turret_menu_cl.lua +++ b/lua/acf/entities/turrets/turret_menu_cl.lua @@ -40,9 +40,9 @@ do -- Turret ring Panel:SetBGColor(Color(150,150,150)) end - local MinDeg = ArcSettings:AddSlider("Minimum Degrees", -180, 180, 1) + local MinDeg = ArcSettings:AddSlider("Minimum Degrees", -180, 0, 1) - local MaxDeg = ArcSettings:AddSlider("Maximum Degrees", -180, 180, 1) + local MaxDeg = ArcSettings:AddSlider("Maximum Degrees", 0, 180, 1) local ArcDraw = vgui.Create("Panel",ArcSettings) ArcDraw:SetSize(64,64) @@ -99,7 +99,7 @@ do -- Turret ring MinDeg:SetClientData("MinDeg","OnValueChanged") MinDeg:DefineSetter(function(Panel, _, _, Value) - local N = math.Clamp(math.Round(Value,1),-180,MaxDeg:GetValue()) + local N = math.Clamp(math.Round(Value,1),-180,0) Panel:SetValue(N) @@ -110,7 +110,7 @@ do -- Turret ring MaxDeg:SetClientData("MaxDeg", "OnValueChanged") MaxDeg:DefineSetter(function(Panel, _, _, Value) - local N = math.Clamp(math.Round(Value,1),MinDeg:GetValue(),180) + local N = math.Clamp(math.Round(Value,1),0,180) Panel:SetValue(N) @@ -119,6 +119,9 @@ do -- Turret ring MaxDeg:SetValue(180) MaxDeg:SetEnabled(false) + ACF.SetClientData("MinDeg",-180) + ACF.SetClientData("MaxDeg",180) + ArcToggle.OnChange = function(_, Value) MinDeg:SetEnabled(Value) MaxDeg:SetEnabled(Value) diff --git a/lua/acf/entities/turrets/turrets.lua b/lua/acf/entities/turrets/turrets.lua index 86980f6a9..a33bbbd1f 100644 --- a/lua/acf/entities/turrets/turrets.lua +++ b/lua/acf/entities/turrets/turrets.lua @@ -165,9 +165,10 @@ do -- Turret drives SlewFuncs = { GetStab = function(Turret) + if (not (Turret.Stabilized and Turret.Active)) or (Turret.Manual == true) then return 0 end local AngDiff = Turret.Rotator:WorldToLocalAngles(Turret.LastRotatorAngle) - return (Turret.Stabilized and Turret.Active) and (AngDiff.yaw * Turret.StabilizeAmount) or 0 + return (AngDiff.yaw * Turret.StabilizeAmount) or 0 end, GetTargetBearing = function(Turret,StabAmt) @@ -225,9 +226,10 @@ do -- Turret drives SlewFuncs = { GetStab = function(Turret) + if (not (Turret.Stabilized and Turret.Active)) or (Turret.Manual == true) then return 0 end local AngDiff = Turret.Rotator:WorldToLocalAngles(Turret.LastRotatorAngle) - return (Turret.Stabilized and Turret.Active) and (AngDiff.pitch * Turret.StabilizeAmount) or 0 + return (AngDiff.pitch * Turret.StabilizeAmount) or 0 end, GetTargetBearing = function(Turret,StabAmt) @@ -284,7 +286,7 @@ do -- Turret motors Turrets.RegisterItem("Motor-ELC","2-Motor",{ Name = "Electric Motor", Description = "A snappy responsive electric motor, can handle most uses cases but quickly falters under higher weights", - Model = "models/engines/emotor-standalone-sml.mdl", + Model = "models/acf/core/t_drive_e.mdl", Sound = "acf_base/fx/turret_electric.wav", Mass = 60, -- Base mass, will be further modified by settings @@ -315,7 +317,7 @@ do -- Turret motors Turrets.RegisterItem("Motor-HYD","2-Motor",{ Name = "Hydraulic Motor", Description = "A strong but sluggish hydraulic motor, it'll turn the world over but takes a little bit to get to that point.", - Model = "models/xqm/hydcontrolbox.mdl", + Model = "models/acf/core/t_drive_h.mdl", Sound = "acf_base/fx/turret_hydraulic.wav", Mass = 80, -- Base mass, will be further modified by settings @@ -375,7 +377,7 @@ do -- Turret gyroscopes Turrets.RegisterItem("2-Gyro","3-Gyro",{ Name = "Dual Axis Turret Gyro", Description = "A component that will stabilize one vertical and horizontal turret drive.\nMust be parented to or share the parent with the horizontal turret drive.\nEach turret drive must have a motor linked.", - Model = "models/kobilica/relay.mdl", + Model = "models/acf/core/t_gyro.mdl", Mass = 150, IsDual = true, @@ -413,7 +415,7 @@ do -- Turret computers Turrets.RegisterItem("DIR-BalComp","4-Computer",{ Name = "Direct Ballistics Computer", Description = "A component that is capable of calculating the angle required to shoot a weapon to hit a spot within view.\nHas a delay between uses.", - Model = "", + Model = "models/acf/core/t_computer.mdl", Mass = 100, @@ -426,7 +428,7 @@ do -- Turret computers Turrets.RegisterItem("IND-BalComp","4-Computer",{ Name = "Indirect Ballistics Computer", Description = "A component that is capable of calculating the angle required to shoot a weapon to hit a spot out of view.\nHas a delay between uses.", - Model = "", + Model = "models/acf/core/t_computer.mdl", Mass = 150, diff --git a/lua/entities/acf_turret/cl_init.lua b/lua/entities/acf_turret/cl_init.lua index 49f9c927f..bca69e9d2 100644 --- a/lua/entities/acf_turret/cl_init.lua +++ b/lua/entities/acf_turret/cl_init.lua @@ -95,6 +95,8 @@ do -- Turret drive drawing if CSM:GetColor() ~= self:GetColor() then CSM:Remove() return end if CSM.Matrix ~= self.Matrix then CSM:Remove() return end + if CSM:GetParent() ~= self then CSM:Remove() return end + CSM:SetAngles(Rotator:GetAngles()) end @@ -128,12 +130,13 @@ do -- Overlay render.DrawLine(Pos + UX,Pos + (self:GetForward() * X) + UX,orange,true) - if IsValid(self.Rotator) then render.DrawLine(Pos,Pos + self.Rotator:GetForward() * X,green,true) end + if IsValid(self.Rotator) then render.DrawLine(Pos,Pos + self.Rotator:GetForward() * X,color_white,true) end local LocPos = self:WorldToLocal(Trace.HitPos) local AimAng = 0 local CurAng = 0 local LocDir = Vector(LocPos.x,LocPos.y,0):GetNormalized() + local HasArc = not ((self.MinDeg == -180) and (self.MaxDeg == 180)) if self.Type == "Turret-V" then LocDir = Vector(LocPos.x,0,LocPos.z):GetNormalized() @@ -152,7 +155,9 @@ do -- Overlay render.DrawWireframeSphere(self.Rotator:LocalToWorld(self.LocalCoM),1.5,4,3,red) render.OverrideDepthEnable(false,false) - if not ((self.MinDeg == -180) and (self.MaxDeg == 180)) then + local MinArcPos = {} + local MaxArcPos = {} + if HasArc then local MinDir = Vector(X,0,0) local MaxDir = Vector(X,0,0) @@ -164,8 +169,11 @@ do -- Overlay MaxDir:Rotate(Angle(0,-self.MaxDeg,0)) end - render.DrawLine(Pos - UX,self:LocalToWorld(self:OBBCenter() + MinDir) - UX,red,true) - render.DrawLine(Pos - UX,self:LocalToWorld(self:OBBCenter() + MaxDir) - UX,green,true) + render.DrawLine(Pos - UX * 2,self:LocalToWorld(self:OBBCenter() + MinDir) - UX * 2,red,true) + render.DrawLine(Pos - UX * 2,self:LocalToWorld(self:OBBCenter() + MaxDir) - UX * 2,green,true) + + MinArcPos = (self:LocalToWorld(self:OBBCenter() + MinDir) - UX * 2):ToScreen() + MaxArcPos = (self:LocalToWorld(self:OBBCenter() + MaxDir) - UX * 2):ToScreen() end local HomePos = (Pos + UX + self:GetForward() * X):ToScreen() @@ -176,11 +184,16 @@ do -- Overlay cam.Start2D() draw.SimpleTextOutlined("Zero","DermaDefault",HomePos.x,HomePos.y,orange,TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER,1,color_black) - draw.SimpleTextOutlined("Current: " .. CurAng,"DermaDefault",CurPos.x,CurPos.y,green,TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER,1,color_black) + draw.SimpleTextOutlined("Current: " .. CurAng,"DermaDefault",CurPos.x,CurPos.y,color_white,TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER,1,color_black) draw.SimpleTextOutlined("Aim: " .. AimAng,"DermaDefault",AimPos.x,AimPos.y,magenta,TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER,1,color_black) draw.SimpleTextOutlined("Mass: " .. self.Mass .. "kg","DermaDefault",CoMPos.x,CoMPos.y,color_white,TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER,1,color_black) draw.SimpleTextOutlined("Lateral Distance: " .. self.CoMDist .. "u","DermaDefault",CoMPos.x,CoMPos.y + 16,color_white,TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER,1,color_black) + + if HasArc then + draw.SimpleTextOutlined("Min: " .. self.MinDeg,"DermaDefault",MinArcPos.x,MinArcPos.y,red,TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER,1,color_black) + draw.SimpleTextOutlined("Max: " .. self.MaxDeg,"DermaDefault",MaxArcPos.x,MaxArcPos.y,green,TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER,1,color_black) + end cam.End2D() end end \ No newline at end of file diff --git a/lua/entities/acf_turret/init.lua b/lua/entities/acf_turret/init.lua index 3d5da9dbc..74d3c6bf1 100644 --- a/lua/entities/acf_turret/init.lua +++ b/lua/entities/acf_turret/init.lua @@ -418,6 +418,8 @@ do -- Spawn and Update funcs if not IsValid(k) then continue end ParentLink(Entity,k,true) + if Class == "acf_turret_motor" then k:ValidatePlacement() end + local PO = k:GetPhysicsObject() if not IsValid(PO) then continue end @@ -762,7 +764,7 @@ do -- Metamethods self.UseVector = false if isnumber(Direction) then - self.DesiredDeg = Direction + self.DesiredDeg = math.NormalizeAngle(Direction) return end @@ -770,7 +772,7 @@ do -- Metamethods if isangle(Direction) then Direction:Normalize() - self.DesiredAng = Direction + self.DesiredAngle = Direction return end @@ -819,7 +821,7 @@ do -- Metamethods local StabAmt = math.Clamp(self.SlewFuncs.GetStab(self), -SlewMax, SlewMax) - local TargetBearing = self.SlewFuncs.GetTargetBearing(self,StabAmt) + local TargetBearing = math.Round(self.SlewFuncs.GetTargetBearing(self,StabAmt),8) local sign = TargetBearing < 0 and -1 or 1 local Dist = math.abs(TargetBearing) diff --git a/lua/entities/acf_turret_gyro/shared.lua b/lua/entities/acf_turret_gyro/shared.lua index 673fa0531..658585b9a 100644 --- a/lua/entities/acf_turret_gyro/shared.lua +++ b/lua/entities/acf_turret_gyro/shared.lua @@ -4,5 +4,6 @@ ENT.PrintName = "ACF Turret Gyro" ENT.WireDebugName = "ACF Turret Gyro" ENT.PluralName = "ACF Turret Gyros" ENT.IsACFEntity = true +ENT.IsACFGyro = true cleanup.Register("_acf_turret_gyro") \ No newline at end of file diff --git a/lua/entities/acf_turret_motor/shared.lua b/lua/entities/acf_turret_motor/shared.lua index 744d2bcb4..348f93607 100644 --- a/lua/entities/acf_turret_motor/shared.lua +++ b/lua/entities/acf_turret_motor/shared.lua @@ -4,5 +4,6 @@ ENT.PrintName = "ACF Turret Motor" ENT.WireDebugName = "ACF Turret Motor" ENT.PluralName = "ACF Turret Motors" ENT.IsACFEntity = true +ENT.IsACFMotor = true cleanup.Register("_acf_turret_motor") \ No newline at end of file diff --git a/lua/entities/gmod_wire_expression2/core/custom/acffunctions.lua b/lua/entities/gmod_wire_expression2/core/custom/acffunctions.lua index dce992253..1daef872a 100644 --- a/lua/entities/gmod_wire_expression2/core/custom/acffunctions.lua +++ b/lua/entities/gmod_wire_expression2/core/custom/acffunctions.lua @@ -17,6 +17,7 @@ local Clock = ACF.Utilities.Clock local match = string.match local floor = math.floor local Round = math.Round +local newE2Table = E2Lib.newE2Table local function IsACFEntity(Entity) if not validPhysics(Entity) then return false end @@ -144,6 +145,14 @@ e2function number entity:acfIsGun() return this.IsACFWeapon and 1 or 0 end +-- Returns 1 if the entity is an ACF turret +e2function number entity:acfIsGun() + if not validPhysics(this) then return 0 end + if RestrictInfo(self, this) then return 0 end + + return this.IsACFTurret and 1 or 0 +end + -- Returns 1 if the entity is an ACF ammo crate e2function number entity:acfIsAmmo() if not validPhysics(this) then return 0 end @@ -744,6 +753,13 @@ e2function void entity:acfRefuelDuty(number On) this:TriggerInput("Refuel Duty", On) end +e2function void entity:acfDisableRevLimiter(number Disabled) + if not this.IsACFEngine then return end + if RestrictInfo(self, this) then return end + + this.revLimiterEnabled = not tobool(Disabled) +end + __e2setcost(10) -- Returns the remaining liters or kilowatt hours of fuel in an ACF fuel tank or engine @@ -1143,9 +1159,154 @@ e2function number entity:acfBlastRadius() return Radius and Round(Radius, 2) or 0 end -e2function void entity:acfDisableRevLimiter(number Disabled) - if not this.IsACFEngine then return end +--===============================================================================================-- +-- Turret Functions +--===============================================================================================-- + +__e2setcost(5) + + +-- Getters -- + +-- Returns the turret's current angle +e2function number entity:acfGetTurretAngle() + if not this.IsACFTurret then return 0 end if RestrictInfo(self, this) then return 0 end - this.revLimiterEnabled = not tobool(Disabled) + return math.Round(-this.CurrentAngle,4) +end + +-- Returns the turret's linked gyroscope +e2function entity entity:acfGetTurretGyro() + if not this.IsACFTurret then return end + if RestrictInfo(self, this) then return end + + return IsValid(this.Gyro) and this.Gyro or nil +end + +-- Returns the turret's linked gyroscope +e2function entity entity:acfGetTurretMotor() + if not this.IsACFTurret then return end + if RestrictInfo(self, this) then return end + + return IsValid(this.Motor) and this.Motor or nil +end + +-- Returns the turret's loaded mass, in kg +e2function number entity:acfGetTurretMass() + if not this.IsACFTurret then return end + if RestrictInfo(self, this) then return end + + return math.Round(this.TurretData.TotalMass,2) +end + +-- Returns the turret's center of mass, local to the turret +e2function vector entity:acfGetTurretMassCenter() + if not this.IsACFTurret then return end + if RestrictInfo(self, this) then return end + + return this:WorldToLocal(this.Rotator:LocalToWorld(this.TurretData.LocalCoM)) +end + +-- Returns the turret's current slew rate, in degrees/second +e2function number entity:acfGetTurretSlewRate() + if not this.IsACFTurret then return end + if RestrictInfo(self, this) then return end + + return math.Round(-this.SlewRate / Clock.DeltaTime,2) +end + +-- Returns the turret's top slew rate, in degrees/second +e2function number entity:acfGetTurretMaxSlewRate() + if not this.IsACFTurret then return end + if RestrictInfo(self, this) then return end + + return math.Round(this.MaxSlewRate,2) +end + +-- Returns the turret's acceleration, in degrees/second ^ 2 +e2function number entity:acfGetTurretSlewAccel() + if not this.IsACFTurret then return end + if RestrictInfo(self, this) then return end + + return math.Round(this.SlewAccel,4) +end + +-- Returns whether or not the turret is stabilized, and the percentage (0-1) +e2function number entity:acfGetTurretStabilized() + if not this.IsACFTurret then return end + if RestrictInfo(self, this) then return end + + return this.Stabilized and this.StabilizeAmount or 0 +end + +-- Returns the turret's data +e2function table entity:acfGetTurretData() + local ret = newE2Table() + if not this.IsACFTurret then return ret end + if RestrictInfo(self, this) then return ret end + + local Data = { + MaxSlewRate = math.Round(this.MaxSlewRate,2), + SlewAccel = math.Round(this.SlewAccel,4), + Angle = -this.CurrentAngle, + + Stabilized = this.Stabilized, + StabilizeAmount = this.StabilizeAmount, + + HasArc = this.HasArc, + Minimum = this.MinDeg, + Maximum = this.MaxDeg, + + TotalMass = this.TurretData.TotalMass, + LocalMassCenter = IsValid(this.Rotator) and this:WorldToLocal(this.Rotator:LocalToWorld(this.TurretData.LocalCoM)) or Vector(), + + Motor = IsValid(this.Motor) and this.Motor or nil, + Gyro = IsValid(this.Gyro) and this.Gyro or nil, + } + + for k,v in pairs(Data) do + local tid = typeids[k] + + ret.n[k] = v + ret.ntypes[k] = tid + end + + ret.size = 12 + + return ret +end + +-- Setters -- + +-- Makes the turret go back to home angle +e2function void entity:acfCenterTurret() + if not this.IsACFTurret then return end + if not isOwner(self, this) then return end + + this:InputDirection(0) +end + +-- Makes the turret attempt to point to the requested degree +e2function void entity:acfAimTurret(number Degree) + if not this.IsACFTurret then return end + if not isOwner(self, this) then return end + + this:InputDirection(Degree) +end + +-- Makes the turret attempt to point to the angle +e2function void entity:acfAimTurret(angle Angle) + if not this.IsACFTurret then return end + if not isOwner(self, this) then return end + + this:InputDirection(Angle) +end + +-- Makes the turret attempt to point to the position +e2function void entity:acfAimTurret(vector Position) + if not this.IsACFTurret then return end + if not isOwner(self, this) then return end + + this:InputDirection(Position) end \ No newline at end of file diff --git a/lua/entities/gmod_wire_expression2/core/custom/cl_acfdescriptions.lua b/lua/entities/gmod_wire_expression2/core/custom/cl_acfdescriptions.lua index 3ae20e85c..ead39a7ff 100644 --- a/lua/entities/gmod_wire_expression2/core/custom/cl_acfdescriptions.lua +++ b/lua/entities/gmod_wire_expression2/core/custom/cl_acfdescriptions.lua @@ -10,6 +10,7 @@ E2Desc["acfClass(e:)"] = "Returns the class of ACF entity." E2Desc["acfIsEngine(e:)"] = "Returns 1 if the entity is an ACF engine." E2Desc["acfIsGearbox(e:)"] = "Returns 1 if the entity is an ACF gearbox." E2Desc["acfIsGun(e:)"] = "Returns 1 if the entity is an ACF gun." +E2Desc["acfIsTurret(e:)"] = "Returns 1 if the entity is an ACF turret." E2Desc["acfIsAmmo(e:)"] = "Returns 1 if the entity is an ACF ammo crate." E2Desc["acfIsFuel(e:)"] = "Returns 1 if the entity is an ACF fuel tank." E2Desc["acfSoundPath(e:)"] = "Returns the sound path of an ACF entity." @@ -78,6 +79,7 @@ E2Desc["acfShiftPointScale(e:n)"] = "Sets the shift point scale for an ACF entit E2Desc["acfFuel(e:)"] = "Returns the remaining liters of fuel or kilowatt hours in an ACF fuel tank, or available to an engine." E2Desc["acfFuelLevel(e:)"] = "Returns the percent remaining fuel in an ACF fuel tank, or available to an engine." E2Desc["acfRefuelDuty(e:)"] = "Sets an ACF fuel tank on refuel duty, causing it to supply other fuel tanks with fuel." +E2Desc["acfDisableRevLimiter(e:n)"] = "Disables the rev limiter on an ACF engine." E2Desc["acfFuelUse(e:)"] = "Returns the current fuel consumption of an ACF entity in liters per minute or kilowatts." E2Desc["acfPeakFuelUse(e:)"] = "Returns the peak fuel consumption of an ACF entity in liters per minute or kilowatts." @@ -116,4 +118,20 @@ E2Desc["acfPenetration(e:)"] = "Returns the penetration of a round in an ACF ent E2Desc["acfBlastRadius(e:)"] = "Returns the blast radius of a round in an ACF entity." E2Desc["acfAmmoCount(e:)"] = "Returns the number of rounds in active ammo crates linked to an ACF entity." E2Desc["acfTotalAmmoCount(e:)"] = "Returns the number of rounds in all ammo crates linked to an ACF entity." -E2Desc["acfDisableRevLimiter(e:n)"] = "Disables the rev limiter on an ACF engine." \ No newline at end of file + +-- Turret functions +E2Desc["acfGetTurretAngle(e:)"] = "Returns the turret's current angle, relative to home." +E2Desc["acfGetTurretGyro(e:)"] = "Returns the turret's linked gyroscope, if available." +E2Desc["acfGetTurretMotor(e:)"] = "Returns the turret's linked motor, if available." +E2Desc["acfGetTurretMass(e:)"] = "Returns the turret's loaded mass, in kg." +E2Desc["acfGetTurretMassCenter(e:)"] = "Returns the turret's center of mass, local to the turret." +E2Desc["acfGetTurretSlewRate(e:)"] = "Returns the turret's slew rate, in degrees/second." +E2Desc["acfGetTurretMaxSlewRate(e:)"] = "Returns the turret's top slew rate, in degrees/second." +E2Desc["acfGetTurretSlewAccel(e:)"] = "Returns the turret's slew acceleration rate, in degrees/second ^ 2." +E2Desc["acfGetTurretStabilized(e:)"] = "Returns the turret's stabilizer percentage, if stabilized." +E2Desc["acfGetTurretData(e:)"] = "Returns the turret's data." + +E2Desc["acfCenterTurret(e:)"] = "Sets the turret to return to the home angle." +E2Desc["acfAimTurret(e:n)"] = "Sets the turret to attempt to aim at the input degree." +E2Desc["acfAimTurret(e:a)"] = "Sets the turret to attempt to aim at the input angle." +E2Desc["acfAimTurret(e:v)"] = "Sets the turret to attempt to aim at the input position." \ No newline at end of file diff --git a/lua/starfall/libs_sh/acffunctions.lua b/lua/starfall/libs_sh/acffunctions.lua index e8a07e569..0ba69ab4a 100644 --- a/lua/starfall/libs_sh/acffunctions.lua +++ b/lua/starfall/libs_sh/acffunctions.lua @@ -829,6 +829,20 @@ if SERVER then return This.IsACFWeapon or false end + --- Returns true if the entity is an ACF turret + -- @server + -- @return boolean True if the entity is an ACF turret + function ents_methods:acfIsTurret() + CheckType(self, ents_metatable) + + local This = unwrap(self) + + if not IsACFEntity(This) then SF.Throw("Entity is not valid", 2) end + if RestrictInfo(This) then return false end + + return This.IsACFTurret or false + end + --- Returns true if the entity is an ACF ammo crate -- @server -- @return boolean True if the entity is an ACF ammo crate @@ -2462,5 +2476,262 @@ if SERVER then This.revLimiterEnabled = not tobool(bool) end + --===============================================================================================-- + -- Turret Functions + --===============================================================================================-- + + -- Getters + + --- Returns the turret's current angle, relative to home + -- @server + -- @return number The turret's current angle, relative to home, in degrees + function ents_methods:acfGetTurretAngle() + CheckType(self, ents_metatable) + + local This = unwrap(self) + + if not (IsACFEntity(This) and (This.IsACFTurret or false)) then SF.Throw("Entity is not valid", 2) end + if RestrictInfo(This) then return end + + CheckPerms(instance, This, "entities.acf") + + return math.Round(-This.CurrentAngle,4) + end + + --- Returns the gyroscope linked to the turret + -- @server + -- @return Entity? The gyroscope linked to the turret, if available, nil if not + function ents_methods:acfGetTurretGyro() + CheckType(self, ents_metatable) + + local This = unwrap(self) + + if not (IsACFEntity(This) and (This.IsACFTurret or false)) then SF.Throw("Entity is not valid", 2) end + if RestrictInfo(This) then return end + + CheckPerms(instance, This, "entities.acf") + + return IsValid(This.Gyro) and This.Gyro or nil + end + + --- Returns the motor linked to the turret + -- @server + -- @return Entity? The motor linked to the turret, if available, nil if not + function ents_methods:acfGetTurretMotor() + CheckType(self, ents_metatable) + + local This = unwrap(self) + + if not (IsACFEntity(This) and (This.IsACFTurret or false)) then SF.Throw("Entity is not valid", 2) end + if RestrictInfo(This) then return end + + CheckPerms(instance, This, "entities.acf") + + return IsValid(This.Motor) and This.Motor or nil + end + + --- Returns the turret's current loaded mass, in kg + -- @server + -- @return number The turret's current loaded mass, in kg + function ents_methods:acfGetTurretMass() + CheckType(self, ents_metatable) + + local This = unwrap(self) + + if not (IsACFEntity(This) and (This.IsACFTurret or false)) then SF.Throw("Entity is not valid", 2) end + if RestrictInfo(This) then return end + + CheckPerms(instance, This, "entities.acf") + + return math.Round(This.TurretData.TotalMass,2) + end + + --- Returns the turret's mass center + -- @server + -- @return Vector The turret's mass center, local to the turret + function ents_methods:acfGetTurretMassCenter() + CheckType(self, ents_metatable) + + local This = unwrap(self) + + if not (IsACFEntity(This) and (This.IsACFTurret or false)) then SF.Throw("Entity is not valid", 2) end + if RestrictInfo(This) then return end + if not IsValid(This.Rotator) then return end + + CheckPerms(instance, This, "entities.acf") + + return This:WorldToLocal(This.Rotator:LocalToWorld(This.TurretData.LocalCoM)) + end + + --- Returns the turret's current slew rate, in degrees/second + -- @server + -- @return number The turret's current slew rate, in degrees/second + function ents_methods:acfGetTurretSlewRate() + CheckType(self, ents_metatable) + + local This = unwrap(self) + + if not (IsACFEntity(This) and (This.IsACFTurret or false)) then SF.Throw("Entity is not valid", 2) end + if RestrictInfo(This) then return end + + CheckPerms(instance, This, "entities.acf") + + return math.Round(This.SlewRate / Clock.DeltaTime,2) + end + + --- Returns the turret's maximum slew rate, in degrees/second + -- @server + -- @return number The turret's maximum slew rate, in degrees/second + function ents_methods:acfGetTurretMaxSlewRate() + CheckType(self, ents_metatable) + + local This = unwrap(self) + + if not (IsACFEntity(This) and (This.IsACFTurret or false)) then SF.Throw("Entity is not valid", 2) end + if RestrictInfo(This) then return end + + CheckPerms(instance, This, "entities.acf") + + return math.Round(This.MaxSlewRate,2) + end + + --- Returns the turret's slew acceleration, in degrees/second ^ 2 + -- @server + -- @return number The turret's slew acceleration, in degrees/second ^ 2 + function ents_methods:acfGetTurretSlewAccel() + CheckType(self, ents_metatable) + + local This = unwrap(self) + + if not (IsACFEntity(This) and (This.IsACFTurret or false)) then SF.Throw("Entity is not valid", 2) end + if RestrictInfo(This) then return end + + CheckPerms(instance, This, "entities.acf") + + return math.Round(This.SlewAccel,4) + end + + --- Returns whether or not the turret is stabilized, and by how much + -- @server + -- @return boolean If the turret is stabilized or not + -- @return number Percentage of stabilization (0-1) + function ents_methods:acfGetTurretStabilization() + CheckType(self, ents_metatable) + + local This = unwrap(self) + + if not (IsACFEntity(This) and (This.IsACFTurret or false)) then SF.Throw("Entity is not valid", 2) end + if RestrictInfo(This) then return end + + CheckPerms(instance, This, "entities.acf") + + local Stabilized = This.Stabilized + + return Stabilized, Stabilized and This.StabilizeAmount or 0 + end + + --- Returns the turret's data + -- @server + -- @return table The turret's data + function ents_methods:acfGetTurretData() + CheckType(self, ents_metatable) + + local This = unwrap(self) + + if not (IsACFEntity(This) and (This.IsACFTurret or false)) then SF.Throw("Entity is not valid", 2) end + if RestrictInfo(This) then return end + + CheckPerms(instance, This, "entities.acf") + + local Data = { + MaxSlewRate = math.Round(This.MaxSlewRate,2), + SlewAccel = math.Round(This.SlewAccel,4), + Angle = -This.CurrentAngle, + + Stabilized = This.Stabilized, + StabilizeAmount = This.StabilizeAmount, + + HasArc = This.HasArc, + Minimum = This.MinDeg, + Maximum = This.MaxDeg, + + TotalMass = This.TurretData.TotalMass, + LocalMassCenter = IsValid(This.Rotator) and This:WorldToLocal(This.Rotator:LocalToWorld(This.TurretData.LocalCoM)) or Vector(), + + Motor = IsValid(This.Motor) and This.Motor or nil, + Gyro = IsValid(This.Gyro) and This.Gyro or nil, + } + + return Data + end + + -- Setters + + --- Returns the turret to home (0 degrees), disabling any active stabilization + -- @server + function ents_methods:acfCenterTurret() + CheckType(self, ents_metatable) + + local This = unwrap(self) + + if not (IsACFEntity(This) and (This.IsACFTurret or false)) then SF.Throw("Entity is not valid", 2) end + if RestrictInfo(This) then return end + + CheckPerms(instance, This, "entities.acf") + + This:InputDirection(0) + end + + --- Makes the turret attempt to aim at the input degree, disabling any active stabilization + -- @server + -- @param number degree The degree relative to home angle for the turret to attempt to aim at + function ents_methods:acfSetTurretDegree(degree) + CheckType(self, ents_metatable) + CheckLuaType(degree, TYPE_NUMBER) + + local This = unwrap(self) + + if not (IsACFEntity(This) and (This.IsACFTurret or false)) then SF.Throw("Entity is not valid", 2) end + if RestrictInfo(This) then return end + + CheckPerms(instance, This, "entities.acf") + + This:InputDirection(degree) + end + + --- Makes the turret attempt to aim at the input angle, enabling any active stabilization + -- @server + -- @param Angle degree The angle for the turret to attempt to aim at + function ents_methods:acfSetTurretAngle(angle) + CheckType(self, ents_metatable) + CheckType(angle, ang_meta) + + local This = unwrap(self) + + if not (IsACFEntity(This) and (This.IsACFTurret or false)) then SF.Throw("Entity is not valid", 2) end + if RestrictInfo(This) then return end + + CheckPerms(instance, This, "entities.acf") + + This:InputDirection(Angle(angle[1],angle[2],angle[3])) + end + + --- Makes the turret attempt to aim at the input position, enabling any active stabilization + -- @server + -- @param Vector position The position for the turret to attempt to aim at + function ents_methods:acfSetTurretTargetPosition(position) + CheckType(self, ents_metatable) + CheckType(position, vec_meta) + + local This = unwrap(self) + + if not (IsACFEntity(This) and (This.IsACFTurret or false)) then SF.Throw("Entity is not valid", 2) end + if RestrictInfo(This) then return end + + CheckPerms(instance, This, "entities.acf") + + This:InputDirection(Vector(position[1],position[2],position[3])) + end + end end \ No newline at end of file diff --git a/models/acf/core/t_computer.dx80.vtx b/models/acf/core/t_computer.dx80.vtx new file mode 100644 index 0000000000000000000000000000000000000000..ac55cf7768187e6187e29e66d4f8ef2459189c4a GIT binary patch literal 8439 zcmZA6b$peD7sv5)4&BYDF}gcOcjssrJ$iI^jPC9fq!ARP6%-T{P((mfP*g-z8YBcH ze&-pl&p*FCulqgkeeZdmyTN6v`G&Ngb(<(knt>JU zw4iAYBEWKXn$k1|4Zt#Xn$R=^^}r%_8qw4TwZTGm>eAE!)xiRGYSGjH7lP+&@K-RH zol7(q!Pj6AJLhS>1z&&x?3|`K0X_%)**Qsb3>*Y~+4+d(FxUrrv2%##0QeB}WM@Ck zUho0v!Ok9<_rXrkg`M3ryTEo3#m;*)JHQsunVoGkTfs)qo}JA!?}GK99Xp$7-T`Yt zTXr_ktOF}SD|XhW)_$U>a#P4W;&P(>ajC}W*V3T>asJ1W+I3IHQAX=GaifuHQ1RzGY*Uf)!7+C zGZIwgAM6} z*})Wca?yl=P%xRDY&01`8ZeQa^fakKauCB#TACCfJ{ZqVLYf4?z&Li|(Y)dB>jfCY z&MTVd;9oGBoo6&p!5uJ?oqII5!5?4*J9lYrf?vQecCOR>1}=l4?EFe|6$}HF*%?JM z0t^9_*cnbU2n+y&!B8*|ROIwNG!qOsqyBWYTJW}qZHt!Y|-rl15n&1sr| z2B0`Q5j6EdJj#VW&1tbx;iyW~U}i6;KfrVy7xiB~Sqr zWT!Gsc~BaZ1?4~)P=M1*(B!8Hrzr`Ff_&_hqA3mvgS_k%qbUUPgFNgMp(y}zg52yB zq{$1if_xx52m`r6F0PY{CI`p^vVfc{XQO#Ya~1pm&Vt0?9(V-OfOo(KupVUMv2xIa z(qsl1Kz4RA(xeAzKsI(lXwreyAdH=~G^s!`kd>X3G|53?5Xw#pnxr5B$ihw%nnWNT z$jnYcnz$ei$iz;38UwGnEBNni>=zm3t~WIQfeb*{c}4RKgn*aeId}@vgBRclxCv5& zJK%5d2S^2OfZxG2kP=)6zk(k@3h*2F8GHwlg4^H%xCrioe?U60608QRz&9WX_!fKx zmhgIGC0Ga+gSlWHSj_25!4fc?oft44%mBl|XfT)4=Yx4*5IcQAA20-T1<~Leo=5|^ z&Q~;N!5MH4oC05hPeDJf^BK)i@Ci5$j)0FrG^h6gy}|b&8F&o-1;2n>;1c)?{0Sa_ z`yego3c7=C;0Hd`Av8bI{0y#upTPIvJFtV(cY^o8cCZV)4|apt%LM=F`-tW+hyxCS z17I)M5B7lpJS8^L^rsmJhJscD(;%V zb&}Df1W7$9eww@>56BI2f*hbUn89_*(u9LD zpcE(yii295UI)|$twAJc0~&xvpdn}qnuBJs@RuLvKj4om@jT;6d`aLx(of`>ND@mD zNh--alSy((;lBz<<(W!SOBzWl={(a(dI|Ag6J+$vD48U)WRXzMP{}G`l1;LEW|th2 z(|=u%+cUT1k-U;m@_Xi&0#Z;4Nny{zQbdYMF)8j@TuMku|BXRu&(abuWu&Z>^DHOj zrGiwHN}iRZvQ&|(Qq8lPRF@i3Q)+qElG;*7>PkJ&dQx8+NJDAl*+?2ogfx++o=v5h zG?y0A(zB(slGf5jB0VFet+bQ&(!sNXbd*lgS)x3nq>FTwZqnVeyY!Hr(o3Q}qoud> zk-pN;v!C>r0Wweqc@C1nGDL>TFwbE!Tt>)98Ra=jM#~r(E8{%J$#|I{F*4C}qD+#> zGDW6(PL*jgU1rEk&zUkyX3HFz>p55E$$VKL3q2RgB3Ud;WU1#;StiS6g{<^kDXV0) ztdX^zYh|6hBkN^@=LUIKHp(X1?73OC$X3}V+da3-4tY;@$}Z1c^1gf^yJe5(9{EuA z%0AiexnB;*K{+IcJrB!A^06F|qn=0Q6Zuq*$#Ku)@|k=tC*-8(N%=y)lv8rr^R%3i zujFev>v>kbk#q8`ocBC07v!RRCzm`g$@lVu{3w?_FUuAANq&~Ao>%1;`Bi?CYo6ES zceyTq$PLdM@~8YIf6GnJn{rET%N@Dvc~|bqeR&`cJs-+H@<<-b6VE5|RQ{D`^4#;e zypaForM&WdC9lO_lB?<)57RgrSL68+SL6E;R}*MLO{9rE6KfJps>w9DXL3!UDK(X* z_Drp5G_9u7^q%Q8L^Ehc&E%O$Giw$N)vSJmYM39PnoYB74$bMAQ*&u<&7*le^J+fL zuLZQAXF)Bbg|&zl^(?Bzw78bglAa~Cl$O?TE#pVHmh~fC%V~M7pcOqUY9+0#RkW&S zRjsDgwT9O8tf{rMw${EpKnI#37cV9&wsAv#ot>2Mw4bGY9|dNb1J5FHik(LTrMSRJS1b%Mrt#^^+yq?2`u z=My1;XRF4RT3SeJM%@t>kE)8)FtbA_(dRk~W& zc&^d4x=!EG^`7f>gTAX9b(7~N-K<-5t8Vk$rrULgzNb4qcj_*EUq8^@p1XCAeyDqO zpXWZ^uLty?9`Zb-hxH@~AWSNgS{)o=8i=Q;gW&+7%f=(qFwoge4*k{{>wd;LLw)XREBf6|}*c15rHaYcXe ztB9c*T40q-qPEixAl(R^%>+Hy{Gqm26;~(=tKQS zA9+5~$NI!)kdO7L{_8Wyr}|8v>kIu)U+OD;?fF{Y_&1T4vH2$W=VWH$8ONtuT%T(3 ze7@0mt~VOr-+S%(#?MS(@hzbxvc#6el3Fs)WR~1g_zW_+rLcBS!tg^ma=dw<1@%`D{JL^ z23gk1TLqs%mbZ#l$!Cxit+G|Is#eXjnpL+NK7*`oHLaG;@QNSdN#FY*4$cHOKWAVt&L|Ji?p^rgN(Fx*4}53?W}`! zv`*I9v$I867oR~!Sy$`kGsv#i-FjG0>*d+YqOG^jAfv61_4OHKAM0oRZGa8*9B6}V zu+Ja|*$^A*Gsqz}%!bvu&=;v-!5b7TO|PY)fpZEwkme!ruM_;O*<6 GxA{N!cSEcI literal 0 HcmV?d00001 diff --git a/models/acf/core/t_computer.dx90.vtx b/models/acf/core/t_computer.dx90.vtx new file mode 100644 index 0000000000000000000000000000000000000000..89ea9e5f11309df2a2905e0a5f05423d79c8be1c GIT binary patch literal 8439 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 a9%eF|Lwuu@-p*ug9ZXBpjbfsKB;W_fsk&kS literal 0 HcmV?d00001 diff --git a/models/acf/core/t_computer.phy b/models/acf/core/t_computer.phy new file mode 100644 index 0000000000000000000000000000000000000000..95bb30643cd6d0475e772e28752d5e5378219019 GIT binary patch literal 1092 zcmZvYOH30{6o$`q+ES)WTjXWM5S+xs4Wun3LV$slL03&A7#E6@w#pdVnM|hyqvkG* z!IdGB;L5FQR$@$O*tpOb?cVrE@DTzF1RoJB_}^)#u;8Z2-0%GV`R_T6P~`~tTwUsW z+$R!^Cr2+63MX-YxH>c3cEuiE@Dzr*Q#>~}&^+S_$VA5?8wZk zA9w?P?m0i6yjbGFINmPg@yjAFL=i8NhZGVb0={J?P~53_9NuFh^^zBgSYd z=pU0dd6z^%XPONbL>HegNCT+;VGWz=2C^j z_&0;}iM7lTe81p-&b)B6VjKRtOzW7*i>-P73JYMm5cWIn=w+}B_d1KBU#6eP|AGGZ z>;!a)USeMn|Istn4h}f`e_>(TX7}W9vFDpyY?|*XLZbUsj?8zdoVnh(^mf^|Iabpn z6?Sy)2M7|%_dUL2th~R^zwX(7{Y16yyr8@>rKdY@ONyRLXJ(X6C8kJ9PRnL+ zwI@qom4}ek@_7h}Sa-}hDCG;*buE=KEyIM8(sFtp4G_{=*3@%1c;tcG zGVCMkdM;zxx(0Lnz&veC6`Vm5@pz)Ux4%D@=uxD*QYNk2reu35l#xqm(|oHqkD&h)C;1%! literal 0 HcmV?d00001 diff --git a/models/acf/core/t_computer.sw.vtx b/models/acf/core/t_computer.sw.vtx new file mode 100644 index 0000000000000000000000000000000000000000..2c48cb68c0b488678a153b0e2a1cce4faa9c15b2 GIT binary patch literal 8431 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 literal 0 HcmV?d00001 diff --git a/models/acf/core/t_drive_e.phy b/models/acf/core/t_drive_e.phy new file mode 100644 index 0000000000000000000000000000000000000000..27f8b6c9ecd49b617c0102094d772201a3fc4a65 GIT binary patch literal 2330 zcmZuxZERCj7=G_vzt*+g?Y4fcOiK9@MbgQD#nEksn4s~;7R(a=$eOKc6GlsWecsdCupiteJ?A;k`#$e; z&U^0FsQM@v_6P31r8$TO`nEqySXi(V{h8j;b5kGgnR#Qpha(TY^TpJ<&tE_M_9w-u zse{|L?)Hf;9-EK7)IE!YN#xX?CkOg=Ok1nSvVy3Er}O-0gM1^YJYHbDp6aL#Yek`I z>;xlO$wCidT|t}&C=Of_mXid0Lnu(QVP>6VToE>UnCzI@Ol(J{mHriWU@Mh{ox$9flI<>Vn02DwW6?_*oD*a13M&kLTe71MNtpz zqCbQODt@{xoRh5Qq5$+YKF?_dbM|sxXwY|EAYdCjv{8^&l6#)JO&US_m}sH9SX1GJaRqZ1 z>Rl2o6C}L^kng6ig|C+|mPLSm7eU1PC9Yt;AoBwz4x?)!@Ie!Y5Z_22i4bsz?jZJ@ zXa(Oo&A5X3Z^8#0HnERB6@L0zOsGVC=&2QN*Mo$oSJBZ4y^*ZCN-vWVQ!ux|Qxdpj zsC_D9-9_uLRupwQ^A_}aId)VuEQ5;f!CsM%x?9LPPvGYaEA7%l+)q-m|5Z2#?sq5I zPuBXqMfTfaVn5E5`(1D1TECqVd(lff*AorEF1m<*gk`^7gDSk;L2oy~-><^0sk#?_ zn{i(P@Z*tqJ@WrSkBdfQL(_Zo=nA!Ck4JH5 z>hxvM=i98nLx5(DwrSG&ra0t@tMtGib@t?gB@kK=}yP8j?>+}hP2Upv00uwvs^alVd+22RB@P20NN zZ|-YnJTuTQ@wKO_e7x(FjK7?z@;zPsg{Ar54fGc{zZMT%%P*LEHC|%WlNj|rV;*`n zKaz*Pn!d!SFEQ%N_z%wRjknD{J~Qv1iF5uX|AF|oo@IsD^(zv8cy@1LDSz32ps5une#!Jk; z8FSv!_)e@%mkfhBeX8v-9=~zF)}1|)doB~`}auh<2zOE_}^Eh z_HKVi_vFYV<+h{*>_xn0@k6GO>NHk|=8lo(6p^2scS;lyYrHTD84-iywr^Y>j(jU}`BR06^6 z_kzdMBfF%JEt@uP=;-Wd-`E~??r|oEQ~69Hn;6Zp?QA-oH|?TmKAlgD+{fimdTb~$ J&U=y)^gkN2L0A9) literal 0 HcmV?d00001 diff --git a/models/acf/core/t_drive_e.sw.vtx b/models/acf/core/t_drive_e.sw.vtx new file mode 100644 index 0000000000000000000000000000000000000000..0731463f0068f7bcf6eccb86b018d4ec853aaea7 GIT binary patch literal 5491 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 literal 0 HcmV?d00001 diff --git a/models/acf/core/t_drive_h.mdl b/models/acf/core/t_drive_h.mdl new file mode 100644 index 0000000000000000000000000000000000000000..d61d0f81ca614b9d5925d3f01603fc4104d82af5 GIT binary patch literal 1748 zcmds2Jxc>Y5S_#iEG$ebg8l*#5flu10YOANEh7?hr#ZMYl3dinB9&TLNrc$xKd`Ys zK@mYaK?_?&tWsF{!8()O@w~&;q;=rk%)EUwyPMm+Oij$r4FJIY&h}F#yOhr63s%}& zFbnpYwUFy~O$P@Xw43&yg|DL5e=MEUA;k14#s=Z&`NjCT0w9J1glb$WR$FAw{!HaY zYtVu8L%0U=p7IoLsJN$1YN-bq<;?kNtPx+qewzq3S#y}8xyWb@WUS%bSM$oz;K_3m zQ{^TYb3H2`zU`H{|LWUtui_We@4Gx68jF=jLBUN-4J(WQeCf)lC!mEmNlC7(lEA6+ z!o<5ekDTlLpwe}Q1jjzWvHu|^Pth9^H3Kx~B~*$@@?D6>`aP+oXzbe&ib_Ly6IVN^ z>!Yv>U@YZQhQCKJS5PEoDlM2Zn7r7StbZ#$G{wv9!FN RvpoykylFYbbe%~9d;-Z~!=nHI literal 0 HcmV?d00001 diff --git a/models/acf/core/t_drive_h.phy b/models/acf/core/t_drive_h.phy new file mode 100644 index 0000000000000000000000000000000000000000..71c7530f1c698127dc39feb052389741749acb46 GIT binary patch literal 2331 zcmZuxYiv_x7=F(=ZP$CdwOudUq*QJK!ww+~@0SZWGbBm$$9oIk|hixL#V%mJ_e;ESENI?mkuVlt0>Z z`l)R<#@6u}-}q^291f%Knf;#I+PkG}Z6M2hq99-WoT&xjHBzYwr-HLC6pBOg45@h{ z3xNbZ5GpiUALAL^*O8T$ktNCg_k{&Wp+AN79P1a5jl#gw!j>dNZAJtuIUsF{6YdMi zNde$#VZY7#ns7*eJ2|QZxfi*s;4m$mh^N5MPJf9eAhQ20p(DJKYk^#JDD0bQ>{hq6P7+ z^d0KeVE>N@0J{)hrLTlWT_A~D&@(^u783_(Bc@UlRuczNWdPVF@ucw43z%O`Gyw-`6S}bh`g_8jR}i-o zxvRnhevT1^T4g>LCgLTh&Ug`Qs)F;m$_nH*9ct1EXB~J-1n8`YjB@;&q7C{WHY7U2 z{iy>_i4dI@v2%=1pnn?d?u)iE+t-1Q3OD^CMpTRtGqvJ%EkSNV|Du>ogO80A^sm7u zf}X7+^|qo%(We0JA=Il?8P6bB96ViQ=~eUyb_xB^v46U?hw+SIr7h5Ubz5G6{DHyz z+o+&75X#D0&M`VBS_eKtBrKsG|GHriXA3(6r$ zVC<{|d1^+B#2c_rA-UfH><{aFbR9YGiC{08?}1-+fI>ZtuOk0F>}L)0RCNz>w}Ous zvTz^i&9odlF>QG89wUCz9Y7jvyc9uiN!O@dcY}`?HnF6lyXZ^2XH9p~Vrr`r&N})# zAJwXQyTmgFCWAO`>Hu~?ufkTto;;Ey#Jwtz0rGKUUc8}ir7+^$6>*)A>$;&)2l{wQ z%j^T)S2QBCm0{t{$YjjJ2xh!e)&WD3hVbj)Ju$b-DW(AVLywdKk}!{{3}iW z?z!=iKV|0cVmSerz(estF-u6mI-JN26$I;R5iz7W_PwcxT<1dJw@1CoF?P*BoPQQ`9?1v1I6rtwJ@aG?UQ*9;liwKIvwSXw z{g`P#>n}0a&Gu{XU!FD$zQ1W)8X z=nj4Ihm3XN_=~AyFCU{~ZZJC#Kj2JchX*qI67fVb;YS0v>JVIf!g zUwL*oQz&KA9Q&d1-rV3G$)juasw8Jz-L*2|eA}5B$d>ZyLVBpkybHNp$>fU!rCcdJ VXwqCcCvksnxIev@i|XPK^dFYtIv)T4 literal 0 HcmV?d00001 diff --git a/models/acf/core/t_drive_h.sw.vtx b/models/acf/core/t_drive_h.sw.vtx new file mode 100644 index 0000000000000000000000000000000000000000..09e6e4e8033f0163da3f92409dcad06a0ecc1752 GIT binary patch literal 9859 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 P)$hCbR{DQL{P*KOG3-TE literal 0 HcmV?d00001 diff --git a/models/acf/core/t_drive_h.vvd b/models/acf/core/t_drive_h.vvd new file mode 100644 index 0000000000000000000000000000000000000000..e6fcda76f86e669a69f8be49ec7554fef29bcfb5 GIT binary patch literal 49344 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 literal 0 HcmV?d00001 diff --git a/models/acf/core/t_gyro.dx80.vtx b/models/acf/core/t_gyro.dx80.vtx new file mode 100644 index 0000000000000000000000000000000000000000..49685d6e6bc992507ef5f691e54990f9b449abce GIT binary patch literal 7395 zcmZA6d7RDl7sv5)u4Ncw%#5MPR1`uHvSbfoY^Aa_iBPg7S<1d9iLqo0AzQK~#x9KP z5gL*tM6yIC`~G`>Z@<^?kKa9y&-*;@xu5U%E@ruNMVQ%xS}~T@GN|vb-XfE$AIWDH z^vAV=p5^~~l&%Mt;I^y*a)->GQQwi#>{i^rH{{XvP%sEC!G_@C=D|T-bqD4l-w@0K z{JTv^W%4Z;1IB^TU=H{Sdk_%$^ENo&{wUyIY3?xk7N?O zVF=%86qBqV0tD|?!h5nY$qYi^0rq5J;^00vWnhvKWCFR_a~I?S#-2M&Zh&}j4_pUV z!7XqT+y*(pWuSLay6E@UHE;!70th2U$j1}p;0z!I<=ECnfGF~|T~ zfaYKUm=E3rZ-Lc(f2{#4K`HjEVzL4(1K)rYupE@+@TE+?28+NFuo(0LAAn+<=R+pX zgWtdppbVS$GT9IIfe!5H1lohOU^U3eTeT`o;+e#O7?2BO2hkuKhy<;8JbghDXbau~ zZ-R!P0cZ*OfaYKTNCYo}mp~&>AG8DQ!Q0>s&;@h_?}C>>W6%^d0k4AB!TX>mXaib< zQQ#Bs8t4xOffqn6Fcc(%7T^`o415emg2A8z=ma`~e&9XO9drYAKyA<))CKiGXYdZ_ z0h;m!`7(GNv;}QIZO{;ed+^I{0F(M)2>1}x1@C}&!F%9+&_n11&)k zcn(YilfZb;8}tQzK=>Ojc&5Xc3UDuXB3e3VI9CI^}P2-3g- za0L7W4uPM+Vekt$27V1g?+Jr{(~v$u%V?P_vobp)Ks~%&q7N?A}oLUj#j91U16>quJgN(P__JD4WRmSS0yF8ZH9#ZC0&u0nBXsrZg zf<3JBM=Kw(M=ifHK|P;Vf)xm>fUZ5JkN65&A!Q*eY)_~MS=fqLQS~5;STTE2J;-AA zlohuU_Oz8$FQrvd*Gec$>(jq7R#sU~y^ONFvb;TO6|~AL%UeaOWRQPs9YWunzpC0adYJ*%&(XAP7Mtf9SNFIppIBYVkSwpXmN zvavN$HMXY8rq)c=)S4@s+pDVPmZVIw*Q|xTZY`B9t(CoDt*wo+jkUEm?JaAkY-ew) z+F5&Ld+VTTZyl8#t&^&wbyjw^cT}CNi?WNotLkE1m0j&U>t@}phq8zDwD;`;>!s{v zy{(V+wSLNe*53x$KpUhSWP@#p)*xkH^`Xik%6{rY?L+mUHcb5^tzpVxHrzh85%!64 zr1~hWk;;*lY@^kKOtvvLRx4RKPW@BmSmjt7uhl=C6V&@?O;Ap-i8^YGO;S#>$@ZDn zB;^$KsW#0%*P3e6mD6p8&9pCUmU5QOwmCM}<|*gdmp0$NvIWWow$K*YVq2nIVqe=* z`^J_jm)UYlu@$ybE5%l+Qf#%Yv9-2Nxz5(xx3lVG&`V5vxBNM`^gU3&vsaO*nY7i_NyIL9<|@> zm>sthTF2~n)iFD1r|b_qtvqdi+8H}*=alE{y!~Yt?4t6b{cV>l-TqOf+htX{U9qcn z&8{o2+YP&Ex9qm^w%xJ2cF*ps^ar6n^}eSMzC)hDGb%HBCeQ2Si<9Yod&*urs1b^5c@kc$sGQSt_$NX_G zs4VD(ys$svMYIZgQB`3t=1=-lUR+t+OZd}X(n~2zd1-&f%XnF3Suf}1{aLS|tl$;( z)3>r$QC9J)Ud^BL>dG4GHN2*>ravFfD(Y3dRyZrG*Vd}6tn76>Q9Z~yUf1iX2U*wa zE9-j$Wdm>MFK9JTzNp?vvmhJ#Oa8K^^_BJg6>qHbBq|fVi8u9T-dy>rdNXB`GRa@_ z7FtQlB!AsodMkg!TPs_78)cw2-d5Gd-&D2nx4fOd?d`pTGEfKa=$*W?zoXU3yQn(( zyQ)s!)!*}O-d$N!y@pmz?-5oHUF+%Z`v=}j*~@!-AN3%6dtdLT9%Ntd?*r6>?C%48 zkPr4Ds=+=~In+N?4fSElVg8Y7m=9MD_m5S>eS~s^f1(=UBYl)7`)F0Nk5P{Cv8pjX zPC3p$RgLrU%JDuyHQpyGC;BASM4zmj?4PM7`xNCApQ@VT)0ETvbJaATuAHvNH%K|y zXZTG2LN(K8DQEd?)hwT*oa1v zTQX>8ZZizf*2e-{M=txlMhWZx81V_3ggH zcPe-KF8^L@r*fz7R_^va%02#rYLD+#?)81Dy}n<$-+xr?_cUdiA5f+FLFGaJNp;W< zDG&M2szZKQdDwqZ9rh#2BmS%Eh#yrR_22xMANLc=-_?&RPbyFPDXl-kd0PFn{~69R z>Sz3HIM1n{^>cn+dEWo>3tH!u=l!Dptsdk>zofk6>B@BfN0siEm6!dB>at%|UiE9L ztA1U1-EXL_`%UFdzookAx0Sd3j_S7GRo?Y`TKB_gq5JxgcVBOh^j{XCkTMiX)g)D~ ze1=fQP$sPmq0Fibp@>kHP}WeSGBT7+6&Z?BMuoDgqC(Ni=ui$-bSOp{6N**EgyNKO Wp`5C?P`ole^zYxi;rD?5jsE~1|7Di| literal 0 HcmV?d00001 diff --git a/models/acf/core/t_gyro.dx90.vtx b/models/acf/core/t_gyro.dx90.vtx new file mode 100644 index 0000000000000000000000000000000000000000..34cb7243ce122e4f03751ad4531b769ef345aebf GIT binary patch literal 7395 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 QGA{J*-@M`Xfd7sE07~LzyZ`_I literal 0 HcmV?d00001 diff --git a/models/acf/core/t_gyro.mdl b/models/acf/core/t_gyro.mdl new file mode 100644 index 0000000000000000000000000000000000000000..f8d4b158fd51f62ca4eca7c737b898464c7a3a51 GIT binary patch literal 1744 zcmeZt2@Ww}U|_iD6w8{JoEDRuUz8eC5}#gKl&_bYk^__>9$a9Dk1#$iS|6&82T8%KnFkMmFat1e%$a%60mybpuk&zVz>!{%w1Sy7 zfBye}49+JX96>P7JtOLLQ|IY>5Z3E4xpeO^0gTNIa z#+C0uZoC0f1Oy;92*aWqB!&*op7F5*VRUg^e30EB3Nxrv#1 aK=Gu~^zw|%l2nG={FKz3;ux?<3f^F8Mc&UgGk(Me*J8ssxlI$$A+h7&> z;)5@OB0i{Kg+4be1dFAGr0J`^w1QZ*V)4x@1TT%<($@1$XGw$(4F7+=bN=s~|NAqz z{TW=o+WlhmOa$0BvFCZPaFqMG4zVWY~GO8jbEr)mICv|upkD$V?GlD!ToP?{|sHuNzpNxBu1wzJd?p-Q*jdg*h18iyAJAn z#!;YOo;SXG-sHYaens;18{+vizTo{V^2>4$^?BxvV@?wITh>hg1K7lD7P}7OUcPRU zd=6hTv&ktbzRCT0$q<)9oZ-9+#Op&`zy?msrZZT-M(wxKk00g!d3~=BrH8LHfS+Z< znBuEaq&kI8Z2 zJ(qZ&Q}O`km*Q-T_(2Ms&$d8+mD;^x(l358dTy!r=wj~KZx$I9S+0t;uDHvyKB`!C zAzx9f^|hG#iel{(>brcmU%<0Z(C@vshAL+9^4VYaUkLP1ynbQv zsSB{Kihm3BTu0aP)OT@^@5$AE0oHS&KEU)F4gCV#?XP__zvfV0b&9)r)i>lT%G2k6 zSnm|H>{e?{-)oYox{Z3PUGqsyy3@^i zZLjT4-63VwYgFACz0k0>z<<=%YexV8 literal 0 HcmV?d00001 diff --git a/models/acf/core/t_gyro.sw.vtx b/models/acf/core/t_gyro.sw.vtx new file mode 100644 index 0000000000000000000000000000000000000000..a68ffa5ba1afab155aea6d84b4706a8f1c27d41b GIT binary patch literal 7387 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 literal 0 HcmV?d00001 diff --git a/models/acf/core/t_gyro.vvd b/models/acf/core/t_gyro.vvd new file mode 100644 index 0000000000000000000000000000000000000000..6b1b932b0399db7807c6c958c4b2cf6b8a010dca GIT binary patch literal 34240 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 z zc$il2cD`4h|CP(oT9^-(%cz6%6PfR&<^ARPV!6!YKbSKKKIg`Es>idI7w4bbFP_>i z`^)pqa=FY;JtLOR?9g+9dR)ev{*U>on$O$$s>vT{*LvLh?Mp--=OgjgZab!3__+V+ zUCy-oO}?pZ8nq1IKAG?KjHavks??YBtN6C@LpxcAvA1%3c|YdnZLA01*ZC>)$4;WO7SQgi*n&c{uDi4oss>`BJDRg&R-h>lNkW%jGh@TsHYa^r+{j znWKe=bvyI%Zm*A&@ocMX%3#Sau(KZDHsiM#&vRqk)Z=~beGf4r?OKn&J9R#Cp#S7@1SjmFNt@{?RkIl(2m!y`pO;{ zM^O)cI1Z9IbUnrWnuWMuv#0C_z76=hrHuOG2cYj!WAA}1qrP7__9oa5`;@)VAKwf6 zV860=+0;uP*aZ9UHTGQ!y}!osOAMa&4a5GGhVLsV->dnRf8o#c#oo%Fito=;FCF>~ z$A4SE-Ypz^tM{9V_I?KV&4JJFN6{O(KmL8MWgTw$voBn`a4G)3x%gwy+N%fMg8z3Y z<+1PFb3gEPDZerKfi{e9dHt6D;QSY#YO8DiV-BwGr<$^iQ;CuO%f2OL`CH-0Y4+(d z?o$arkC)?`eB#|Z`TbnEpH^4ZDXt11_Q`jmJumC~Wcp~0lYRWI9((o|^z*tp{iPYK zeq)o;im`xjDn7GM^XL1dtUigUvwr=<@3>XVC4Fi>Pax3-&-Rk>2>8_ZMngS@{?wh% zl>V`-7?57hifT;VOW}nn6KCxw^MatcMiZ3(H~ ME$DOjP(eNYFGxQU3IG5A literal 0 HcmV?d00001 diff --git a/models/acf/core/t_ring.mdl b/models/acf/core/t_ring.mdl index aac20e6002e0c655efce28e0688be97db6c419e5..3f01bbf94c606ca638d0aea0eb212df4f04c6eee 100644 GIT binary patch delta 55 zcmcb>dx3Yu3|5XCYP$q~gzplZsHige2&*o$dYjZFHj&8!Y%EZ0!m^}rD$C@Jj5?D` G*kS+~coB;L delta 55 zcmcb>dx3Yu3|5X0ty2XBwoetDsHige2&*o0dZN@MHj&8!Y%EZ0!lIIr!ZLXyqt4_K Gwio~gJrIom diff --git a/models/acf/core/t_ring.vvd b/models/acf/core/t_ring.vvd index b2a75330b9bf4d695ba9a217fad9c7867a409e1c..5507eb5e3cb887adea073700e3818683c6e66f2b 100644 GIT binary patch delta 2800 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 diff --git a/models/acf/core/t_trun.mdl b/models/acf/core/t_trun.mdl index 94f99f7f9093b45abbd159da616eb940d6d57052..460c98f483b76a6b9eb0b4ad2ce9047a2dec43df 100644 GIT binary patch delta 55 zcmcb>dx3Yu3|5W}H&+P;u&oxHsHige2&*o$dWF;^Hj&8!Y%EZ0!ctQ^gJtqYMxDte GY%u@;uMpP& delta 55 zcmcb>dx3Yu3|5W@x3UEr*mDFYDymFA!m7(0ZYed1O=PkF8w(Vhu