]> git.smokeofanarchy.ru Git - space-station-14.git/commitdiff
clipping and extracting put seeds in the users hands (#14343)
authordeltanedas <39013340+deltanedas@users.noreply.github.com>
Mon, 6 Mar 2023 02:37:57 +0000 (02:37 +0000)
committerGitHub <noreply@github.com>
Mon, 6 Mar 2023 02:37:57 +0000 (22:37 -0400)
Content.Server/Botany/Systems/BotanySystem.Seed.cs
Content.Server/Botany/Systems/PlantHolderSystem.cs
Content.Server/Botany/Systems/SeedExtractorSystem.cs

index dc3deae20884a6f36c502ea7d266e19674c6f721..2cbe17aff19581f905b11f0bb4b03ae4d056e9fd 100644 (file)
@@ -6,6 +6,7 @@ using Content.Server.Kitchen.Components;
 using Content.Server.Popups;
 using Content.Shared.Botany;
 using Content.Shared.Examine;
+using Content.Shared.Hands.EntitySystems;
 using Content.Shared.Popups;
 using Content.Shared.Random.Helpers;
 using Content.Shared.Slippery;
@@ -22,6 +23,7 @@ namespace Content.Server.Botany.Systems;
 public sealed partial class BotanySystem : EntitySystem
 {
     [Dependency] private readonly AppearanceSystem _appearance = default!;
+    [Dependency] private readonly SharedHandsSystem _hands = default!;
     [Dependency] private readonly IPrototypeManager _prototypeManager = default!;
     [Dependency] private readonly PopupSystem _popupSystem = default!;
     [Dependency] private readonly IRobustRandom _robustRandom = default!;
@@ -88,9 +90,12 @@ public sealed partial class BotanySystem : EntitySystem
 
     #region SeedPrototype prototype stuff
 
-    public EntityUid SpawnSeedPacket(SeedData proto, EntityCoordinates transformCoordinates)
+    /// <summary>
+    /// Spawns a new seed packet on the floor at a position, then tries to put it in the user's hands if possible.
+    /// </summary>
+    public EntityUid SpawnSeedPacket(SeedData proto, EntityCoordinates coords, EntityUid user)
     {
-        var seed = Spawn(proto.PacketPrototype, transformCoordinates);
+        var seed = Spawn(proto.PacketPrototype, coords);
         var seedComp = EnsureComp<SeedComponent>(seed);
         seedComp.Seed = proto;
 
@@ -106,6 +111,8 @@ public sealed partial class BotanySystem : EntitySystem
         var val = Loc.GetString("botany-seed-packet-name", ("seedName", name), ("seedNoun", noun));
         MetaData(seed).EntityName = val;
 
+        // try to automatically place in user's other hand
+        _hands.TryPickupAnyHand(user, seed);
         return seed;
     }
 
index 5a5c0fbba2e743eecf1e9e585b56027874d93e28..da634bba8a4bb0d76c3fd39e36916da7c4eb8ec4 100644 (file)
@@ -251,7 +251,7 @@ namespace Content.Server.Botany.Systems
                 }
 
                 component.Seed.Unique = false;
-                var seed = _botanySystem.SpawnSeedPacket(component.Seed, Transform(args.User).Coordinates);
+                var seed = _botanySystem.SpawnSeedPacket(component.Seed, Transform(args.User).Coordinates, args.User);
                 seed.RandomOffset(0.25f);
                 var displayName = Loc.GetString(component.Seed.DisplayName);
                 _popupSystem.PopupCursor(Loc.GetString("plant-holder-component-take-sample-message",
@@ -572,7 +572,8 @@ namespace Content.Server.Botany.Systems
             }
             else if (component.Age < 0) // Revert back to seed packet!
             {
-                _botanySystem.SpawnSeedPacket(component.Seed, Transform(uid).Coordinates);
+                // will put it in the trays hands if it has any, please do not try doing this
+                _botanySystem.SpawnSeedPacket(component.Seed, Transform(uid).Coordinates, uid);
                 RemovePlant(uid, component);
                 component.ForceUpdate = true;
                 Update(uid, component);
index d7047fdce63f9b996c2d124cdf8b87bceb221748..4c547b96f09bc5e4b55a0bead3cf02b86f279056 100644 (file)
@@ -50,7 +50,7 @@ public sealed class SeedExtractorSystem : EntitySystem
 
         for (var i = 0; i < amount; i++)
         {
-            _botanySystem.SpawnSeedPacket(seed, coords);
+            _botanySystem.SpawnSeedPacket(seed, coords, args.User);
         }
     }