Pie tins returned from all pies in all situations, add lathe recipes for pie tin and some other basic kitchenwares (#23217)

* move pietin trash to FoodPieBase so all pies return their pie tin when eaten

* spawn trash from a SliceableFood if the Food has a trash

* add a limited selection of additional tablewares to the autolathe

* kitchenware material adjustments

* fix crash when slice pie in hand/inventory

* use system helpers + slices now go in parent container
This commit is contained in:
GreyMario
2024-01-12 00:42:15 -08:00
committed by GitHub
parent fa3da1ab82
commit 1c3c596bae
5 changed files with 86 additions and 19 deletions

View File

@@ -5,6 +5,7 @@ using Content.Shared.Examine;
using Content.Shared.FixedPoint; using Content.Shared.FixedPoint;
using Content.Shared.Hands.EntitySystems; using Content.Shared.Hands.EntitySystems;
using Content.Shared.Interaction; using Content.Shared.Interaction;
using Robust.Server.GameObjects;
using Robust.Shared.Audio; using Robust.Shared.Audio;
using Robust.Shared.Audio.Systems; using Robust.Shared.Audio.Systems;
using Robust.Shared.Containers; using Robust.Shared.Containers;
@@ -17,6 +18,7 @@ namespace Content.Server.Nutrition.EntitySystems
[Dependency] private readonly SharedAudioSystem _audio = default!; [Dependency] private readonly SharedAudioSystem _audio = default!;
[Dependency] private readonly SharedContainerSystem _containerSystem = default!; [Dependency] private readonly SharedContainerSystem _containerSystem = default!;
[Dependency] private readonly SharedHandsSystem _handsSystem = default!; [Dependency] private readonly SharedHandsSystem _handsSystem = default!;
[Dependency] private readonly TransformSystem _xformSystem = default!;
public override void Initialize() public override void Initialize()
{ {
@@ -76,7 +78,7 @@ namespace Content.Server.Nutrition.EntitySystems
// If someone makes food proto with 1 slice... // If someone makes food proto with 1 slice...
if (component.Count < 1) if (component.Count < 1)
{ {
DeleteFood(uid, user); DeleteFood(uid, user, food);
return true; return true;
} }
@@ -89,7 +91,7 @@ namespace Content.Server.Nutrition.EntitySystems
// Fill last slice with the rest of the solution // Fill last slice with the rest of the solution
FillSlice(sliceUid, solution); FillSlice(sliceUid, solution);
DeleteFood(uid, user); DeleteFood(uid, user, food);
return true; return true;
} }
@@ -102,32 +104,54 @@ namespace Content.Server.Nutrition.EntitySystems
if (!Resolve(uid, ref comp, ref transform)) if (!Resolve(uid, ref comp, ref transform))
return EntityUid.Invalid; return EntityUid.Invalid;
var sliceUid = Spawn(comp.Slice, transform.Coordinates); var sliceUid = Spawn(comp.Slice, _xformSystem.GetMapCoordinates(uid));
var inCont = _containerSystem.IsEntityInContainer(uid);
if (inCont) // try putting the slice into the container if the food being sliced is in a container!
// this lets you do things like slice a pizza up inside of a hot food cart without making a food-everywhere mess
if (_containerSystem.TryGetContainingContainer(uid, out var container) && _containerSystem.CanInsert(sliceUid, container))
{ {
_handsSystem.PickupOrDrop(user, sliceUid); _containerSystem.Insert(sliceUid, container);
} }
else else // puts it down "right-side up"
{ {
var xform = Transform(sliceUid); _xformSystem.AttachToGridOrMap(sliceUid);
_containerSystem.AttachParentToContainerOrGrid((sliceUid, xform)); _xformSystem.SetLocalRotation(sliceUid, 0);
xform.LocalRotation = 0;
} }
return sliceUid; return sliceUid;
} }
private void DeleteFood(EntityUid uid, EntityUid user) private void DeleteFood(EntityUid uid, EntityUid user, FoodComponent foodComp)
{ {
var ev = new BeforeFullySlicedEvent var ev = new BeforeFullySlicedEvent
{ {
User = user User = user
}; };
RaiseLocalEvent(uid, ev); RaiseLocalEvent(uid, ev);
if (ev.Cancelled)
return;
if (!ev.Cancelled) if (string.IsNullOrEmpty(foodComp.Trash))
Del(uid); {
QueueDel(uid);
return;
}
// Locate the sliced food and spawn its trash
var trashUid = Spawn(foodComp.Trash, _xformSystem.GetMapCoordinates(uid));
// try putting the trash in the food's container too, to be consistent with slice spawning?
if (_containerSystem.TryGetContainingContainer(uid, out var container) && _containerSystem.CanInsert(trashUid, container))
{
_containerSystem.Insert(trashUid, container);
}
else // puts it down "right-side up"
{
_xformSystem.AttachToGridOrMap(trashUid);
_xformSystem.SetLocalRotation(trashUid, 0);
}
QueueDel(uid);
} }
private void FillSlice(EntityUid sliceUid, Solution solution) private void FillSlice(EntityUid sliceUid, Solution solution)

View File

@@ -20,6 +20,8 @@
Quantity: 11 Quantity: 11
- ReagentId: Vitamin - ReagentId: Vitamin
Quantity: 5 Quantity: 5
- type: Food #All pies here made with a pie tin; unless you're some kind of savage, you're probably not destroying this when you eat or slice the pie!
trash: FoodPlateTin
- type: SliceableFood - type: SliceableFood
count: 4 count: 4
- type: Tag - type: Tag
@@ -132,8 +134,6 @@
- sweet - sweet
- banana - banana
- creamy - creamy
- type: Food
trash: FoodPlateTin
- type: Sprite - type: Sprite
layers: layers:
- state: tin - state: tin

View File

@@ -151,5 +151,5 @@
- Trash - Trash
- type: PhysicalComposition - type: PhysicalComposition
materialComposition: materialComposition:
Steel: 100 Steel: 60
- type: SpaceGarbage - type: SpaceGarbage

View File

@@ -111,10 +111,18 @@
- ExteriorLightTube - ExteriorLightTube
- LightBulb - LightBulb
- Bucket - Bucket
- DrinkMug
- DrinkMugMetal
- DrinkGlass
- DrinkShotGlass
- DrinkGlassCoupeShaped
- FoodPlate - FoodPlate
- FoodPlateSmall - FoodPlateSmall
- FoodPlatePlastic - FoodPlatePlastic
- FoodPlateSmallPlastic - FoodPlateSmallPlastic
- FoodBowlBig
- FoodPlateTin
- FoodKebabSkewer
- SprayBottle - SprayBottle
- MopItem - MopItem
- Holoprojector - Holoprojector

View File

@@ -19,21 +19,35 @@
result: DrinkMug result: DrinkMug
completetime: 0.8 completetime: 0.8
materials: materials:
Glass: 50 Glass: 100
- type: latheRecipe - type: latheRecipe
id: DrinkMugMetal id: DrinkMugMetal
result: DrinkMugMetal result: DrinkMugMetal
completetime: 0.8 completetime: 0.8
materials: materials:
Steel: 50 Steel: 100
- type: latheRecipe - type: latheRecipe
id: DrinkGlass id: DrinkGlass
result: DrinkGlass result: DrinkGlass
completetime: 0.8 completetime: 0.8
materials: materials:
Glass: 50 Glass: 100
- type: latheRecipe
id: DrinkShotGlass
result: DrinkShotGlass
completetime: 0.4
materials:
Glass: 100
- type: latheRecipe
id: DrinkGlassCoupeShaped
result: DrinkGlassCoupeShaped
completetime: 0.8
materials:
Glass: 100
- type: latheRecipe - type: latheRecipe
id: FoodPlate id: FoodPlate
@@ -62,3 +76,24 @@
completetime: 0.4 completetime: 0.4
materials: materials:
Plastic: 50 Plastic: 50
- type: latheRecipe
id: FoodBowlBig
result: FoodBowlBig
completetime: 0.8
materials:
Glass: 100
- type: latheRecipe
id: FoodPlateTin
result: FoodPlateTin
completetime: 0.4
materials:
Steel: 100
- type: latheRecipe
id: FoodKebabSkewer
result: FoodKebabSkewer
completetime: 0.4
materials:
Steel: 100