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