]> git.smokeofanarchy.ru Git - space-station-14.git/commitdiff
Move mining roid and magnet pulls closer (#31296)
authorNemanja <98561806+EmoGarbage404@users.noreply.github.com>
Thu, 22 Aug 2024 19:29:56 +0000 (15:29 -0400)
committerGitHub <noreply@github.com>
Thu, 22 Aug 2024 19:29:56 +0000 (13:29 -0600)
move mining roid and magnet pulls closer

Content.Server/Salvage/Magnet/SalvageMagnetComponent.cs
Content.Server/Salvage/SalvageSystem.Magnet.cs
Resources/Prototypes/Entities/Stations/base.yml

index 6c1abf365463525bbeb16e99c84e4e0cdad6531d..5dd5f1ca80392b5413d1139fb482c9b4fa3d697d 100644 (file)
@@ -3,5 +3,16 @@ namespace Content.Server.Salvage.Magnet;
 [RegisterComponent]
 public sealed partial class SalvageMagnetComponent : Component
 {
+    /// <summary>
+    /// The max distance at which the magnet will pull in wrecks.
+    /// Scales from 50% to 100%.
+    /// </summary>
+    [DataField]
+    public float MagnetSpawnDistance = 128f;
 
+    /// <summary>
+    /// How far offset to either side will the magnet wreck spawn.
+    /// </summary>
+    [DataField]
+    public float LateralOffset = 32f;
 }
index 5e85fdb573ab19f0cdb2e4985d7bf489f7a5af5b..57a57d3c6337ba0f4670c6aa05eb3093eefe1d3c 100644 (file)
@@ -338,7 +338,7 @@ public sealed partial class SalvageSystem
             worldAngle = _random.NextAngle();
         }
 
-        if (!TryGetSalvagePlacementLocation(mapId, attachedBounds, bounds!.Value, worldAngle, out var spawnLocation, out var spawnAngle))
+        if (!TryGetSalvagePlacementLocation(magnet, mapId, attachedBounds, bounds!.Value, worldAngle, out var spawnLocation, out var spawnAngle))
         {
             Report(magnet.Owner, MagnetChannel, "salvage-system-announcement-spawn-no-debris-available");
             _mapManager.DeleteMap(salvMapXform.MapID);
@@ -390,22 +390,19 @@ public sealed partial class SalvageSystem
         RaiseLocalEvent(ref active);
     }
 
-    private bool TryGetSalvagePlacementLocation(MapId mapId, Box2Rotated attachedBounds, Box2 bounds, Angle worldAngle, out MapCoordinates coords, out Angle angle)
+    private bool TryGetSalvagePlacementLocation(Entity<SalvageMagnetComponent> magnet, MapId mapId, Box2Rotated attachedBounds, Box2 bounds, Angle worldAngle, out MapCoordinates coords, out Angle angle)
     {
-        // Grid intersection only does AABB atm.
         var attachedAABB = attachedBounds.CalcBoundingBox();
-
-        var minDistance = (attachedAABB.Height < attachedAABB.Width ? attachedAABB.Width : attachedAABB.Height) / 2f;
-        var minActualDistance = bounds.Height < bounds.Width ? minDistance + bounds.Width / 2f : minDistance + bounds.Height / 2f;
-
-        var attachedCenter = attachedAABB.Center;
-        var fraction = 0.25f;
+        var magnetPos = _transform.GetWorldPosition(magnet) + worldAngle.ToVec() * bounds.MaxDimension;
+        var origin = attachedAABB.ClosestPoint(magnetPos);
+        var fraction = 0.50f;
 
         // Thanks 20kdc
         for (var i = 0; i < 20; i++)
         {
-            var randomPos = attachedCenter +
-                            worldAngle.ToVec() * (minActualDistance * fraction);
+            var randomPos = origin +
+                            worldAngle.ToVec() * (magnet.Comp.MagnetSpawnDistance * fraction) +
+                            (worldAngle + Math.PI / 2).ToVec() * _random.NextFloat(-magnet.Comp.LateralOffset, magnet.Comp.LateralOffset);
             var finalCoords = new MapCoordinates(randomPos, mapId);
 
             angle = _random.NextAngle();
@@ -417,7 +414,7 @@ public sealed partial class SalvageSystem
             if (_mapManager.FindGridsIntersecting(finalCoords.MapId, box2Rot).Any())
             {
                 // Bump it further and further just in case.
-                fraction += 0.25f;
+                fraction += 0.1f;
                 continue;
             }
 
index de191277aef71a2d10d3ec89e4402ea4f7d78b03..1910cf4085289bc26159cff85feb9b1f728a749d 100644 (file)
@@ -73,8 +73,8 @@
           - /Maps/Ruins/whiteship_ancient.yml
           - /Maps/Ruins/whiteship_bluespacejumper.yml
         vgroid: !type:DungeonSpawnGroup
-          minimumDistance: 400
-          maximumDistance: 450
+          minimumDistance: 300
+          maximumDistance: 350
           nameDataset: names_borer
           stationGrid: false
           addComponents: