]> git.smokeofanarchy.ru Git - space-station-14.git/commitdiff
Uranium is now edible! (#15952)
authorTunguso4ka <71643624+Tunguso4ka@users.noreply.github.com>
Sat, 6 May 2023 07:23:05 +0000 (10:23 +0300)
committerGitHub <noreply@github.com>
Sat, 6 May 2023 07:23:05 +0000 (17:23 +1000)
Content.Server/Chemistry/EntitySystems/ChemistrySystem.Injector.cs
Content.Server/Chemistry/EntitySystems/SolutionContainerSystem.cs
Content.Server/Chemistry/EntitySystems/SolutionInjectOnCollideSystem.cs
Content.Server/Nutrition/EntitySystems/FoodSystem.cs
Resources/Prototypes/Entities/Objects/Materials/Sheets/other.yml

index e05d7602a6763baacae069b4e1a32bfe6c452476..6ac7f7f0d624cc20f2b50135a7a4ddee2165abd2 100644 (file)
@@ -13,6 +13,7 @@ using Robust.Shared.GameStates;
 using Content.Shared.DoAfter;
 using Content.Shared.Mobs.Components;
 using Content.Shared.Verbs;
+using Content.Shared.Stacks;
 using Robust.Server.GameObjects;
 using Content.Shared.Popups;
 
@@ -297,9 +298,7 @@ public sealed partial class ChemistrySystem
     {
         if (!_solutions.TryGetSolution(injector, InjectorComponent.SolutionName, out var solution)
             || solution.Volume == 0)
-        {
             return;
-        }
 
         // Get transfer amount. May be smaller than _transferAmount if not enough room
         var realTransferAmount = FixedPoint2.Min(component.TransferAmount, targetSolution.AvailableVolume);
@@ -312,18 +311,18 @@ public sealed partial class ChemistrySystem
         }
 
         // Move units from attackSolution to targetSolution
-        var removedSolution = _solutions.SplitSolution(injector, solution, realTransferAmount);
+        Solution removedSolution;
+        if (TryComp<StackComponent>(targetEntity, out var stack)) 
+            removedSolution = _solutions.SplitStackSolution(injector, solution, realTransferAmount, stack.Count);
+        else
+          removedSolution = _solutions.SplitSolution(injector, solution, realTransferAmount);
 
         _reactiveSystem.DoEntityReaction(targetEntity, removedSolution, ReactionMethod.Injection);
 
         if (!asRefill)
-        {
             _solutions.Inject(targetEntity, targetSolution, removedSolution);
-        }
         else
-        {
             _solutions.Refill(targetEntity, targetSolution, removedSolution);
-        }
 
         _popup.PopupEntity(Loc.GetString("injector-component-transfer-success-message",
                 ("amount", removedSolution.Volume),
index e84271981e36256c0573b3dd767bdef9b782fb7a..782a1e7ec35e95fab3da7c29f101d5bd276cb3b1 100644 (file)
@@ -128,6 +128,14 @@ public sealed partial class SolutionContainerSystem : EntitySystem
         return splitSol;
     }
 
+    public Solution SplitStackSolution(EntityUid targetUid, Solution solutionHolder, FixedPoint2 quantity, int stackCount) 
+    {
+        var splitSol = solutionHolder.SplitSolution(quantity / stackCount);
+        Solution attackSolutionHolder = solutionHolder.SplitSolution(quantity - splitSol.Volume);
+        UpdateChemicals(targetUid, solutionHolder);
+        return splitSol;
+    }
+
     /// <summary>
     /// Splits a solution without the specified reagent(s).
     /// </summary>
index d5a5825ce8bf8b4bc9b75a73f600130801ff9915..ef0d757b4a07d5646ecbbcc3f5319a5f4fa99f36 100644 (file)
@@ -53,7 +53,7 @@ namespace Content.Server.Chemistry.EntitySystems
 
             var solRemoved = solution.SplitSolution(component.TransferAmount);
             var solRemovedVol = solRemoved.Volume;
-
+            
             var solToInject = solRemoved.SplitSolution(solRemovedVol * component.TransferEfficiency);
 
             _bloodstreamSystem.TryAddToChemicals(target, solToInject, bloodstream);
index 41e2e61f28b54cab388d381dff60346dadf1be16..566b557b7ee249e7a194d6972a91ed05e775c38b 100644 (file)
@@ -4,6 +4,7 @@ using Content.Server.Body.Systems;
 using Content.Server.Chemistry.EntitySystems;
 using Content.Server.Nutrition.Components;
 using Content.Server.Popups;
+using Content.Server.Stack;
 using Content.Shared.Administration.Logs;
 using Content.Shared.Body.Components;
 using Content.Shared.Body.Organ;
@@ -22,6 +23,7 @@ using Content.Shared.Mobs.Components;
 using Content.Shared.Mobs.Systems;
 using Content.Shared.Nutrition;
 using Content.Shared.Verbs;
+using Content.Shared.Stacks;
 using Robust.Shared.Audio;
 using Robust.Shared.Player;
 using Robust.Shared.Utility;
@@ -47,6 +49,7 @@ namespace Content.Server.Nutrition.EntitySystems
         [Dependency] private readonly SharedHandsSystem _handsSystem = default!;
         [Dependency] private readonly ReactiveSystem _reaction = default!;
         [Dependency] private readonly SharedAudioSystem _audio = default!;
+        [Dependency] private readonly StackSystem _stack = default!;
 
         public override void Initialize()
         {
@@ -260,7 +263,19 @@ namespace Content.Server.Nutrition.EntitySystems
                 _utensilSystem.TryBreak(utensil, args.User);
             }
 
-            if (component.UsesRemaining > 0)
+            args.Repeat = !forceFeed;
+            if (TryComp<StackComponent>(uid, out var stack))
+            {
+                //Not deleting whole stack piece will make troubles with grinding object
+                if (stack.Count > 1) 
+                {
+                    _stack.SetCount(uid, stack.Count - 1);
+                    _solutionContainerSystem.TryAddSolution(uid, solution, split);
+                    return;
+                }
+            }
+            else if (component.UsesRemaining > 0)
             {
                 return;
             }
index 0eed0ac32f94f37fd3688c7a7ea45cc0ce421821..d55c143656a7f2fb0b6c184a3b86772da16437dc 100644 (file)
     count: 1
 
 - type: entity
-  parent: SheetOtherBase
+  parent: [SheetOtherBase, FoodBase]
   id: SheetUranium
   name: uranium
   suffix: Full
   components:
   - type: Material
+  - type: Food
+    transferAmount: 10
   - type: PhysicalComposition
     materialComposition:
       Uranium: 100
   - type: Item
     heldPrefix: uranium
   - type: Extractable
-    grindableSolutionName: uranium
+    grindableSolutionName: food
   - type: SolutionContainerManager
     solutions:
-      uranium:
+      food:
         reagents:
         - ReagentId: Uranium
           Quantity: 10