diff --git a/Content.Server/Nutrition/Components/SliceableFoodComponent.cs b/Content.Server/Nutrition/Components/SliceableFoodComponent.cs
index 7173e2ecd2..2b74d0c67e 100644
--- a/Content.Server/Nutrition/Components/SliceableFoodComponent.cs
+++ b/Content.Server/Nutrition/Components/SliceableFoodComponent.cs
@@ -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;
+ ///
+ /// Prototype to spawn after slicing.
+ /// If null then it can't be sliced.
+ ///
+ [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;
+ ///
+ /// Number of slices the food starts with.
+ ///
+ [DataField("count"), ViewVariables(VVAccess.ReadWrite)]
+ public ushort TotalCount = 5;
- [ViewVariables(VVAccess.ReadWrite)]
- public ushort Count;
- }
+ ///
+ /// Number of slices left.
+ ///
+ [ViewVariables(VVAccess.ReadWrite)]
+ public ushort Count;
}
diff --git a/Content.Server/Nutrition/EntitySystems/SliceableFoodSystem.cs b/Content.Server/Nutrition/EntitySystems/SliceableFoodSystem.cs
index 9d255e013c..56f5d9adeb 100644
--- a/Content.Server/Nutrition/EntitySystems/SliceableFoodSystem.cs
+++ b/Content.Server/Nutrition/EntitySystems/SliceableFoodSystem.cs
@@ -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;
+ }
+
+ ///
+ /// Create a new slice in the world and returns its entity.
+ /// The solutions must be set afterwards.
+ ///
+ 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)
diff --git a/Resources/Prototypes/Entities/Objects/Consumable/Food/meat.yml b/Resources/Prototypes/Entities/Objects/Consumable/Food/meat.yml
index c807263f84..6017616ed9 100644
--- a/Resources/Prototypes/Entities/Objects/Consumable/Food/meat.yml
+++ b/Resources/Prototypes/Entities/Objects/Consumable/Food/meat.yml
@@ -229,7 +229,7 @@
Quantity: 9
- type: SliceableFood
count: 3
- slice: FoodMeatPenguinCutletSlice
+ slice: FoodMeatPenguinCutlet
- type: Construction
graph: PenguinSteak
node: start