]> git.smokeofanarchy.ru Git - space-station-14.git/commitdiff
CVarify meteor behavior (#29030)
authorTsjipTsjip <19798667+TsjipTsjip@users.noreply.github.com>
Sat, 15 Jun 2024 14:03:20 +0000 (16:03 +0200)
committerGitHub <noreply@github.com>
Sat, 15 Jun 2024 14:03:20 +0000 (10:03 -0400)
* CVarify meteor behavior

* Cache value to reduce CVar calls, hook into OnValueChanged

* _cfg is still null at construction time, fixed by just making it set up on Started instead

* Invoke immediately! Learning more every step of the way.

* Move cached value initialisation to Initialize call

* Add explicit supercall

Content.Server/StationEvents/Components/MeteorSchedulerComponent.cs
Content.Server/StationEvents/MeteorSchedulerSystem.cs
Content.Shared/CCVar/CCVars.cs

index e71a284a893bb160105c83fdd162775491c3540b..23337f9261edbc366ebd1ae39041c05b90b24cd6 100644 (file)
@@ -21,15 +21,4 @@ public sealed partial class MeteorSchedulerComponent : Component
     [DataField, AutoPausedField]
     public TimeSpan NextSwarmTime = TimeSpan.Zero;
 
-    /// <summary>
-    /// The minimum time between swarms
-    /// </summary>
-    [DataField]
-    public TimeSpan MinSwarmDelay = TimeSpan.FromMinutes(7.5f);
-
-    /// <summary>
-    /// The maximum time between swarms
-    /// </summary>
-    [DataField]
-    public TimeSpan MaxSwarmDelay = TimeSpan.FromMinutes(12.5f);
 }
index 3ad88a7d8911964572896cf3478580ee16a62a17..c5162293603a08edf82e1e5b26bb7c5ad5cf7b0b 100644 (file)
@@ -1,7 +1,9 @@
 using Content.Server.GameTicking.Rules;
 using Content.Server.StationEvents.Components;
+using Content.Shared.CCVar;
 using Content.Shared.GameTicking.Components;
 using Content.Shared.Random.Helpers;
+using Robust.Shared.Configuration;
 using Robust.Shared.Prototypes;
 
 namespace Content.Server.StationEvents;
@@ -13,12 +15,24 @@ namespace Content.Server.StationEvents;
 public sealed class MeteorSchedulerSystem : GameRuleSystem<MeteorSchedulerComponent>
 {
     [Dependency] private readonly IPrototypeManager _prototypeManager = default!;
+    [Dependency] private readonly IConfigurationManager _cfg = default!;
+
+    private TimeSpan _meteorMinDelay;
+    private TimeSpan _meteorMaxDelay;
+
+    public override void Initialize()
+    {
+        base.Initialize();
+
+        _cfg.OnValueChanged(CCVars.MeteorSwarmMinTime, f => { _meteorMinDelay = TimeSpan.FromMinutes(f); }, true);
+        _cfg.OnValueChanged(CCVars.MeteorSwarmMaxTime, f => { _meteorMaxDelay = TimeSpan.FromMinutes(f); }, true);
+    }
 
     protected override void Started(EntityUid uid, MeteorSchedulerComponent component, GameRuleComponent gameRule, GameRuleStartedEvent args)
     {
         base.Started(uid, component, gameRule, args);
 
-        component.NextSwarmTime = Timing.CurTime + RobustRandom.Next(component.MinSwarmDelay, component.MaxSwarmDelay);
+        component.NextSwarmTime = Timing.CurTime + RobustRandom.Next(_meteorMinDelay, _meteorMaxDelay);
     }
 
     protected override void ActiveTick(EntityUid uid, MeteorSchedulerComponent component, GameRuleComponent gameRule, float frameTime)
@@ -28,7 +42,8 @@ public sealed class MeteorSchedulerSystem : GameRuleSystem<MeteorSchedulerCompon
         if (Timing.CurTime < component.NextSwarmTime)
             return;
         RunSwarm((uid, component));
-        component.NextSwarmTime += RobustRandom.Next(component.MinSwarmDelay, component.MaxSwarmDelay);
+
+        component.NextSwarmTime += RobustRandom.Next(_meteorMinDelay, _meteorMaxDelay);
     }
 
     private void RunSwarm(Entity<MeteorSchedulerComponent> ent)
index a9cc2d11dab0a8e85b56ee0f93ece8db32640551..886ace654dbab6f71b89cc3ab667c34e4bd58ede 100644 (file)
@@ -124,6 +124,18 @@ namespace Content.Shared.CCVar
         public static readonly CVarDef<float>
             EventsRampingAverageChaos = CVarDef.Create("events.ramping_average_chaos", 6f, CVar.ARCHIVE | CVar.SERVERONLY);
 
+        /// <summary>
+        ///     Minimum time between meteor swarms in minutes.
+        /// </summary>
+        public static readonly CVarDef<float>
+            MeteorSwarmMinTime = CVarDef.Create("events.meteor_swarm_min_time", 7.5f, CVar.ARCHIVE | CVar.SERVERONLY);
+
+        /// <summary>
+        ///     Maximum time between meteor swarms in minutes.
+        /// </summary>
+        public static readonly CVarDef<float>
+            MeteorSwarmMaxTime = CVarDef.Create("events.meteor_swarm_max_time", 12.5f, CVar.ARCHIVE | CVar.SERVERONLY);
+
         /*
          * Game
          */