]> git.smokeofanarchy.ru Git - space-station-14.git/commitdiff
small food slicing cleanup (#22291)
authordeltanedas <39013340+deltanedas@users.noreply.github.com>
Sun, 10 Dec 2023 21:13:48 +0000 (21:13 +0000)
committerGitHub <noreply@github.com>
Sun, 10 Dec 2023 21:13:48 +0000 (16:13 -0500)
* component cleanup

* slice system cleanup

* thank you entprotoid

* webedit 1

* webedit 2

* bruh this shitcode has sliceable food with no slice

* ok no persistence

---------

Co-authored-by: deltanedas <@deltanedas:kde.org>
Content.Server/Nutrition/Components/SliceableFoodComponent.cs
Content.Server/Nutrition/EntitySystems/SliceableFoodSystem.cs
Resources/Prototypes/Entities/Objects/Consumable/Food/meat.yml

index 7173e2ecd2384a5faa699a8dd37364302930ccf3..2b74d0c67ec645e3c37a4e775ddd8c55bc6b90f1 100644 (file)
@@ -1,24 +1,31 @@
 using Content.Server.Nutrition.EntitySystems;
 using Robust.Shared.Audio;
+using Robust.Shared.Prototypes;
 
-namespace Content.Server.Nutrition.Components
+namespace Content.Server.Nutrition.Components;
+
+[RegisterComponent, Access(typeof(SliceableFoodSystem))]
+public sealed partial class SliceableFoodComponent : Component
 {
-    [RegisterComponent, Access(typeof(SliceableFoodSystem))]
-    internal sealed partial class SliceableFoodComponent : Component
-    {
-        [DataField("slice")]
-        [ViewVariables(VVAccess.ReadWrite)]
-        public string Slice = string.Empty;
+    /// <summary>
+    /// Prototype to spawn after slicing.
+    /// If null then it can't be sliced.
+    /// </summary>
+    [DataField, ViewVariables(VVAccess.ReadWrite)]
+    public EntProtoId? Slice;
 
-        [DataField("sound")]
-        [ViewVariables(VVAccess.ReadWrite)]
-        public SoundSpecifier Sound = new SoundPathSpecifier("/Audio/Items/Culinary/chop.ogg");
+    [DataField, ViewVariables(VVAccess.ReadWrite)]
+    public SoundSpecifier Sound = new SoundPathSpecifier("/Audio/Items/Culinary/chop.ogg");
 
-        [DataField("count")]
-        [ViewVariables(VVAccess.ReadWrite)]
-        public ushort TotalCount = 5;
+    /// <summary>
+    /// Number of slices the food starts with.
+    /// </summary>
+    [DataField("count"), ViewVariables(VVAccess.ReadWrite)]
+    public ushort TotalCount = 5;
 
-        [ViewVariables(VVAccess.ReadWrite)]
-        public ushort Count;
-    }
+    /// <summary>
+    /// Number of slices left.
+    /// </summary>
+    [ViewVariables(VVAccess.ReadWrite)]
+    public ushort Count;
 }
index 9d255e013cd59e34d36a221ef012e5c04f762f04..56f5d9adeb24be379228b842c769ede02240171b 100644 (file)
@@ -57,7 +57,7 @@ namespace Content.Server.Nutrition.EntitySystems
                 return false;
             }
 
-            var sliceUid = Spawn(component.Slice, transform.Coordinates);
+            var sliceUid = Slice(uid, user, component, transform);
 
             var lostSolution = _solutionContainerSystem.SplitSolution(uid, solution,
                 solution.Volume / FixedPoint2.New(component.Count));
@@ -65,18 +65,6 @@ namespace Content.Server.Nutrition.EntitySystems
             // Fill new slice
             FillSlice(sliceUid, lostSolution);
 
-            var inCont = _containerSystem.IsEntityInContainer(component.Owner);
-            if (inCont)
-            {
-                _handsSystem.PickupOrDrop(user, sliceUid);
-            }
-            else
-            {
-                var xform = Transform(sliceUid);
-                _containerSystem.AttachParentToContainerOrGrid((sliceUid, xform));
-                xform.LocalRotation = 0;
-            }
-
             _audio.PlayPvs(component.Sound, transform.Coordinates, AudioParams.Default.WithVolume(-2));
 
             // Decrease size of item based on count - Could implement in the future
@@ -99,11 +87,26 @@ namespace Content.Server.Nutrition.EntitySystems
             if (component.Count > 1)
                 return true;
 
-            sliceUid = Spawn(component.Slice, transform.Coordinates);
+            sliceUid = Slice(uid, user, component, transform);
 
             // Fill last slice with the rest of the solution
             FillSlice(sliceUid, solution);
 
+            DeleteFood(uid, user);
+            return true;
+        }
+
+        /// <summary>
+        /// Create a new slice in the world and returns its entity.
+        /// The solutions must be set afterwards.
+        /// </summary>
+        public EntityUid Slice(EntityUid uid, EntityUid user, SliceableFoodComponent? comp = null, TransformComponent? transform = null)
+        {
+            if (!Resolve(uid, ref comp, ref transform))
+                return EntityUid.Invalid;
+
+            var sliceUid = Spawn(comp.Slice, transform.Coordinates);
+            var inCont = _containerSystem.IsEntityInContainer(uid);
             if (inCont)
             {
                 _handsSystem.PickupOrDrop(user, sliceUid);
@@ -115,8 +118,7 @@ namespace Content.Server.Nutrition.EntitySystems
                 xform.LocalRotation = 0;
             }
 
-            DeleteFood(uid, user);
-            return true;
+            return sliceUid;
         }
 
         private void DeleteFood(EntityUid uid, EntityUid user)
index c807263f84236eca605b37bca9487a41dca737da..6017616ed95fa8df765ca2270e145886e8ae23ca 100644 (file)
           Quantity: 9
   - type: SliceableFood
     count: 3
-    slice: FoodMeatPenguinCutletSlice
+    slice: FoodMeatPenguinCutlet
   - type: Construction
     graph: PenguinSteak
     node: start