From 91ca6881877f03ae1135c586cfbef64e8f616ef8 Mon Sep 17 00:00:00 2001 From: thecraftianman <64441307+thecraftianman@users.noreply.github.com> Date: Fri, 17 Jan 2025 17:22:26 -0500 Subject: [PATCH] Remove a bunch of extra globals --- lua/acf/core/classes/racks/registration.lua | 13 +-- lua/acf/core/utilities/entity_tracking_sv.lua | 15 +-- lua/acf/entities/ammo_types/flare.lua | 9 +- lua/acf/entities/countermeasure/flare.lua | 8 +- .../entities/countermeasure/globals_sv.lua | 92 +++++++++---------- lua/acf/entities/guidance/antimissile.lua | 3 +- lua/acf/entities/guidance/dumb.lua | 6 +- lua/acf/entities/sensors/radars/missile.lua | 9 +- .../entities/sensors/receivers/receivers.lua | 5 +- lua/entities/acf_receiver/init.lua | 8 +- 10 files changed, 82 insertions(+), 86 deletions(-) diff --git a/lua/acf/core/classes/racks/registration.lua b/lua/acf/core/classes/racks/registration.lua index 50e63733..b637a41a 100644 --- a/lua/acf/core/classes/racks/registration.lua +++ b/lua/acf/core/classes/racks/registration.lua @@ -2,7 +2,6 @@ local Classes = ACF.Classes local Racks = Classes.Racks local Entries = {} - function Racks.Register(ID, Data) local Class = Classes.AddSimple(ID, Entries, Data) @@ -23,14 +22,4 @@ function Racks.Register(ID, Data) return Class end -Classes.AddSimpleFunctions(Racks, Entries) - -do -- Discontinued functions - function ACF_DefineRackClass(ID) - print("Attempted to register rack class " .. ID .. " with a discontinued function. Racks are no longer separated in classes.") - end - - function ACF_DefineRack(ID) - print("Attempted to register rack " .. ID .. " with a discontinued function. Use ACF.RegisterRack instead.") - end -end +Classes.AddSimpleFunctions(Racks, Entries) \ No newline at end of file diff --git a/lua/acf/core/utilities/entity_tracking_sv.lua b/lua/acf/core/utilities/entity_tracking_sv.lua index ee98933e..dcc74f9d 100644 --- a/lua/acf/core/utilities/entity_tracking_sv.lua +++ b/lua/acf/core/utilities/entity_tracking_sv.lua @@ -1,9 +1,10 @@ -local ACF = ACF -local Clock = ACF.Utilities.Clock -local Contraption = ACF.Contraption -local NextUpdate = 0 -local Entities = {} -local Ancestors = {} +local ACF = ACF +local Clock = ACF.Utilities.Clock +local Contraption = ACF.Contraption +local Countermeasures = ACF.Classes.Countermeasures +local NextUpdate = 0 +local Entities = {} +local Ancestors = {} local Whitelist = { -- Garry's Mod entities @@ -148,7 +149,7 @@ function ACF.GetEntitiesInCone(Position, Direction, Degrees) for Entity in pairs(GetAncestorEntities()) do if not IsValid(Entity) then continue end - if ACFM_ConeContainsPos(Position, Direction, Degrees, Entity:GetPos()) then + if Countermeasures.ConeContainsPos(Position, Direction, Degrees, Entity:GetPos()) then Result[Entity] = true end end diff --git a/lua/acf/entities/ammo_types/flare.lua b/lua/acf/entities/ammo_types/flare.lua index c63096eb..3b53fef0 100644 --- a/lua/acf/entities/ammo_types/flare.lua +++ b/lua/acf/entities/ammo_types/flare.lua @@ -75,16 +75,17 @@ function Ammo:VerifyData(ToolData) end if SERVER then - local IgniteConVar = GetConVar("ACFM_FlaresIgnite") - local Ballistics = ACF.Ballistics - local Clock = ACF.Utilities.Clock + local IgniteConVar = GetConVar("ACFM_FlaresIgnite") + local Ballistics = ACF.Ballistics + local Clock = ACF.Utilities.Clock + local Countermeasures = ACF.Classes.Countermeasures function Ammo:Create(_, BulletData) local Bullet = Ballistics.CreateBullet(BulletData) Bullet.CreateTime = Clock.CurTime - ACFM_RegisterFlare(Bullet) + Countermeasures.RegisterFlare(Bullet) end function Ammo:Network(Entity, BulletData) diff --git a/lua/acf/entities/countermeasure/flare.lua b/lua/acf/entities/countermeasure/flare.lua index ef3b3b7f..20b80474 100644 --- a/lua/acf/entities/countermeasure/flare.lua +++ b/lua/acf/entities/countermeasure/flare.lua @@ -70,7 +70,7 @@ if SERVER then local Position = Missile:GetPos() local Forward = Missile:GetForward() - return ACFM_ConeContainsPos(Position, Forward, SeekCone, self.Flare.Pos) and self:ApplyChance(Missile, Guidance, self.Flare) + return Countermeasures.ConeContainsPos(Position, Forward, SeekCone, self.Flare.Pos) and self:ApplyChance(Missile, Guidance, self.Flare) end -- counterpart to ApplyAll. this takes one Flare and applies it to all missiles. @@ -83,7 +83,7 @@ if SERVER then if not self.Active then return {} end local Result = {} - local Targets = ACFM_GetAllMissilesWhichCanSee(self.Flare.Pos) + local Targets = Countermeasures.GetAllMissilesWhichCanSee(self.Flare.Pos) for Missile in pairs(Targets) do local Guidance = Missile.GuidanceData @@ -97,7 +97,7 @@ if SERVER then end -- 'static' function to iterate over all flares in flight and return one which affects the guidance. - -- TODO: apply sub-1 chance to distract guidance in ACFM_GetAnyFlareInCone. + -- TODO: apply sub-1 chance to distract guidance in Countermeasures.GetAnyFlareInCone. function Countermeasure.ApplyAll(Missile, Guidance) local SeekCone = Guidance.SeekCone @@ -105,7 +105,7 @@ if SERVER then local Position = Missile:GetPos() local Forward = Missile:GetForward() - local Flares = ACFM_GetFlaresInCone(Position, Forward, SeekCone) + local Flares = Countermeasures.GetFlaresInCone(Position, Forward, SeekCone) for Flare in pairs(Flares) do local Result = Flare.FlareObj diff --git a/lua/acf/entities/countermeasure/globals_sv.lua b/lua/acf/entities/countermeasure/globals_sv.lua index 5fbe2a38..06202004 100644 --- a/lua/acf/entities/countermeasure/globals_sv.lua +++ b/lua/acf/entities/countermeasure/globals_sv.lua @@ -3,55 +3,55 @@ local Countermeasures = ACF.Classes.Countermeasures local Bullets = ACF.Ballistics.Bullets local Missiles = ACF.ActiveMissiles -ACFM_Flares = {} -ACFM_FlareUID = 0 +local Flares = {} +local FlareUID = 0 -function ACFM_RegisterFlare(BulletData) +local function OnFlareSpawn(BulletData) + local FlareObj = BulletData.FlareObj + local Affected = FlareObj:ApplyToAll() + + for Missile in pairs(Affected) do + Missile.GuidanceData.Override = FlareObj + end +end + +function Countermeasures.RegisterFlare(BulletData) local Flare = Countermeasures.Get("Flare") local FlareObj = Flare() - BulletData.FlareUID = ACFM_FlareUID + BulletData.FlareUID = FlareUID - ACFM_Flares[BulletData.Index] = ACFM_FlareUID - ACFM_FlareUID = ACFM_FlareUID + 1 + Flares[BulletData.Index] = FlareUID + FlareUID = FlareUID + 1 FlareObj:Configure(BulletData) BulletData.FlareObj = FlareObj - ACFM_OnFlareSpawn(BulletData) + OnFlareSpawn(BulletData) end -function ACFM_UnregisterFlare(BulletData) +function Countermeasures.UnregisterFlare(BulletData) local FlareObj = BulletData.FlareObj if FlareObj then FlareObj.Flare = nil end - ACFM_Flares[BulletData.Index] = nil + Flares[BulletData.Index] = nil end -function ACFM_OnFlareSpawn(BulletData) - local FlareObj = BulletData.FlareObj - local Affected = FlareObj:ApplyToAll() - - for Missile in pairs(Affected) do - Missile.GuidanceData.Override = FlareObj - end -end - -function ACFM_GetFlaresInCone(Position, Direction, Degrees) +function Countermeasures.GetFlaresInCone(Position, Direction, Degrees) local Result = {} - for Index, UID in pairs(ACFM_Flares) do + for Index, UID in pairs(Flares) do local Flare = Bullets[Index] if not (Flare and Flare.FlareUID and Flare.FlareUID == UID) then continue end - if ACFM_ConeContainsPos(Position, Direction, Degrees, Flare.Pos) then + if Countermeasures.ConeContainsPos(Position, Direction, Degrees, Flare.Pos) then Result[Flare] = true end end @@ -59,21 +59,21 @@ function ACFM_GetFlaresInCone(Position, Direction, Degrees) return Result end -function ACFM_GetAnyFlareInCone(Position, Direction, Degrees) - for Index, UID in pairs(ACFM_Flares) do +function Countermeasures.GetAnyFlareInCone(Position, Direction, Degrees) + for Index, UID in pairs(Flares) do local Flare = Bullets[Index] if not (Flare and Flare.FlareUID and Flare.FlareUID == UID) then continue end - if ACFM_ConeContainsPos(Position, Direction, Degrees, Flare.Pos) then + if Countermeasures.ConeContainsPos(Position, Direction, Degrees, Flare.Pos) then return Flare end end end -function ACFM_GetMissilesInCone(Position, Direction, Degrees) +function Countermeasures.GetMissilesInCone(Position, Direction, Degrees) local Result = {} for Missile in pairs(Missiles) do @@ -81,7 +81,7 @@ function ACFM_GetMissilesInCone(Position, Direction, Degrees) continue end - if ACFM_ConeContainsPos(Position, Direction, Degrees, Missile:GetPos()) then + if Countermeasures.ConeContainsPos(Position, Direction, Degrees, Missile:GetPos()) then Result[Missile] = true end @@ -90,7 +90,7 @@ function ACFM_GetMissilesInCone(Position, Direction, Degrees) return Result end -function ACFM_GetMissilesInSphere(Position, Radius) +function Countermeasures.GetMissilesInSphere(Position, Radius) local Result = {} local RadiusSqr = Radius * Radius @@ -109,7 +109,7 @@ end -- Tests flare distraction effect upon all undistracted missiles, but does not perform the effect itself. Returns a list of potentially affected missiles. -- argument is the bullet in the acf bullet table which represents the flare - not the cm_flare object! -function ACFM_GetAllMissilesWhichCanSee(Position) +function Countermeasures.GetAllMissilesWhichCanSee(Position) local Result = {} for Missile in pairs(Missiles) do @@ -119,7 +119,7 @@ function ACFM_GetAllMissilesWhichCanSee(Position) continue end - if ACFM_ConeContainsPos(Missile:GetPos(), Missile:GetForward(), Guidance.ViewCone, Position) then + if Countermeasures.ConeContainsPos(Missile:GetPos(), Missile:GetForward(), Guidance.ViewCone, Position) then Result[Missile] = true end end @@ -127,14 +127,25 @@ function ACFM_GetAllMissilesWhichCanSee(Position) return Result end -function ACFM_ConeContainsPos(ConePos, ConeDir, Degrees, Position) +function Countermeasures.ConeContainsPos(ConePos, ConeDir, Degrees, Position) local MinimumDot = math.cos(math.rad(Degrees)) local Direction = (Position - ConePos):GetNormalized() return ConeDir:Dot(Direction) >= MinimumDot end -function ACFM_ApplyCountermeasures(Missile, Guidance) +local function ApplyCountermeasure(Missile, Guidance, CounterMeasure) + if not CounterMeasure.AppliesTo[Guidance.Name] then return end + + local Override = CounterMeasure.ApplyAll(Missile, Guidance) + + if Override then + Guidance.Override = Override + return true + end +end + +function Countermeasures.ApplyCountermeasures(Missile, Guidance) if Guidance.Override then return end local List = Countermeasures.GetList() @@ -144,13 +155,13 @@ function ACFM_ApplyCountermeasures(Missile, Guidance) continue end - if ACFM_ApplyCountermeasure(Missile, Guidance, CounterMeasure) then + if ApplyCountermeasure(Missile, Guidance, CounterMeasure) then break end end end -function ACFM_ApplySpawnCountermeasures(Missile, Guidance) +function Countermeasures.ApplySpawnCountermeasures(Missile, Guidance) if Guidance.Override then return end local List = Countermeasures.GetList() @@ -160,19 +171,8 @@ function ACFM_ApplySpawnCountermeasures(Missile, Guidance) continue end - if ACFM_ApplyCountermeasure(Missile, Guidance, CounterMeasure) then + if ApplyCountermeasure(Missile, Guidance, CounterMeasure) then break end end -end - -function ACFM_ApplyCountermeasure(Missile, Guidance, CounterMeasure) - if not CounterMeasure.AppliesTo[Guidance.Name] then return end - - local Override = CounterMeasure.ApplyAll(Missile, Guidance) - - if Override then - Guidance.Override = Override - return true - end -end +end \ No newline at end of file diff --git a/lua/acf/entities/guidance/antimissile.lua b/lua/acf/entities/guidance/antimissile.lua index 4fc68401..8e685d0e 100644 --- a/lua/acf/entities/guidance/antimissile.lua +++ b/lua/acf/entities/guidance/antimissile.lua @@ -4,6 +4,7 @@ local Guidance = Guidances.Register("Anti-missile", "Anti-radiation") if CLIENT then Guidance.Description = "This guidance package uses a radar to detect missiles and guides the munition towards the most centered one it can find." else + local Countermeasures = ACF.Classes.Countermeasures Guidance.RadarType = "AM-Radar" function Guidance:GetRadar() @@ -20,7 +21,7 @@ else function Guidance:SeekTarget(Missile) local Position = Missile.Position - local Targets = ACFM_GetMissilesInCone(Position, Missile:GetForward(), self.SeekCone) + local Targets = Countermeasures.GetMissilesInCone(Position, Missile:GetForward(), self.SeekCone) local HighestDot = 0 local Target, TargetPos diff --git a/lua/acf/entities/guidance/dumb.lua b/lua/acf/entities/guidance/dumb.lua index 09709ac7..64bae849 100644 --- a/lua/acf/entities/guidance/dumb.lua +++ b/lua/acf/entities/guidance/dumb.lua @@ -14,16 +14,18 @@ end if CLIENT then Guidance.Description = "This guidance package is empty and provides no control." else + local Countermeasures = ACF.Classes.Countermeasures + function Guidance:OnLaunched() end function Guidance:PreGuidance(Missile) if not self.AppliedSpawnCountermeasures then - ACFM_ApplySpawnCountermeasures(Missile, self) + Countermeasures.ApplySpawnCountermeasures(Missile, self) self.AppliedSpawnCountermeasures = true end - ACFM_ApplyCountermeasures(Missile, self) + Countermeasures.ApplyCountermeasures(Missile, self) end function Guidance:ApplyOverride(Missile) diff --git a/lua/acf/entities/sensors/radars/missile.lua b/lua/acf/entities/sensors/radars/missile.lua index ccef5a27..dac163d7 100644 --- a/lua/acf/entities/sensors/radars/missile.lua +++ b/lua/acf/entities/sensors/radars/missile.lua @@ -1,5 +1,6 @@ -local ACF = ACF -local Sensors = ACF.Classes.Sensors +local ACF = ACF +local Sensors = ACF.Classes.Sensors +local Countermeasures = ACF.Classes.Countermeasures Sensors.Register("AM-Radar", { Name = "Missile Radar", @@ -14,7 +15,7 @@ Sensors.Register("AM-Radar", { do -- Directional radars local function DetectEntities(Radar) - return ACFM_GetMissilesInCone(Radar:LocalToWorld(Radar.Origin), Radar:GetForward(), Radar.ConeDegs) + return Countermeasures.GetMissilesInCone(Radar:LocalToWorld(Radar.Origin), Radar:GetForward(), Radar.ConeDegs) end Sensors.RegisterItem("SmallDIR-AM", "AM-Radar", { @@ -65,7 +66,7 @@ end do -- Spherical radars local function DetectEntities(Radar) - return ACFM_GetMissilesInSphere(Radar:LocalToWorld(Radar.Origin), Radar.Range) + return Countermeasures.GetMissilesInSphere(Radar:LocalToWorld(Radar.Origin), Radar.Range) end Sensors.RegisterItem("SmallOMNI-AM", "AM-Radar", { diff --git a/lua/acf/entities/sensors/receivers/receivers.lua b/lua/acf/entities/sensors/receivers/receivers.lua index aafc34d4..9aa79dcf 100644 --- a/lua/acf/entities/sensors/receivers/receivers.lua +++ b/lua/acf/entities/sensors/receivers/receivers.lua @@ -77,6 +77,7 @@ do -- Laser Receiver end do -- Radar Receiver + local Countermeasures = ACF.Classes.Countermeasures -- ACF.ActiveRadars for radars, need to check for direction and range for these local ValidMissileRadars = { @@ -95,7 +96,7 @@ do -- Radar Receiver if k.Range then -- Spherical if RadarOrigin:DistToSqr(ReceiverOrigin) <= (k.Range ^ 2) then RadarSource[k] = true end else -- Directional - if ACFM_ConeContainsPos(RadarOrigin, k:GetForward(), k.ConeDegs, ReceiverOrigin) then RadarSource[k] = true end + if Countermeasures.ConeContainsPos(RadarOrigin, k:GetForward(), k.ConeDegs, ReceiverOrigin) then RadarSource[k] = true end end end @@ -103,7 +104,7 @@ do -- Radar Receiver if not k.UseGuidance then continue end -- Don't waste time on missiles that don't have functional guidance if not ValidMissileRadars[k.Guidance] then continue end -- Further filter for anything without radar on the missile itself - if ACFM_ConeContainsPos(k.Position, k:GetForward(), k.ViewCone, ReceiverOrigin) then RadarSource[k] = true end + if Countermeasures.ConeContainsPos(k.Position, k:GetForward(), k.ViewCone, ReceiverOrigin) then RadarSource[k] = true end end return RadarSource diff --git a/lua/entities/acf_receiver/init.lua b/lua/entities/acf_receiver/init.lua index 856cdcdf..332cbf04 100644 --- a/lua/entities/acf_receiver/init.lua +++ b/lua/entities/acf_receiver/init.lua @@ -100,9 +100,9 @@ do -- Spawn and Update functions local Sensors = Classes.Sensors local Outputs = { - "Detected (Returns 1 if it)", - "Direction (The direction to a source) [VECTOR]", - "Angle (The direction to a source) [ANGLE]", + "Detected (Returns 1 if something is detected.)", + "Direction (The direction to a source.) [VECTOR]", + "Angle (The direction to a source.) [ANGLE]", "Entity (The receiver itself.) [ENTITY]" } @@ -315,7 +315,7 @@ function ENT:OnRemove() OldClass.OnLast(self, OldClass) end - hook.Run("ACF_OnEntityLast", "acf_Receiver", self, OldClass) + hook.Run("ACF_OnEntityLast", "acf_receiver", self, OldClass) TimerRemove(self.TimerID)