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.Hands.EntitySystems;
using Content.Shared.Interaction;
using Robust.Server.GameObjects;
using Robust.Shared.Audio;
using Robust.Shared.Audio.Systems;
using Robust.Shared.Containers;
@@ -17,6 +18,7 @@ namespace Content.Server.Nutrition.EntitySystems
[Dependency] private readonly SharedAudioSystem _audio = default!;
[Dependency] private readonly SharedContainerSystem _containerSystem = default!;
[Dependency] private readonly SharedHandsSystem _handsSystem = default!;
[Dependency] private readonly TransformSystem _xformSystem = default!;
public override void Initialize()
{
@@ -76,7 +78,7 @@ namespace Content.Server.Nutrition.EntitySystems
// If someone makes food proto with 1 slice...
if (component.Count < 1)
{
DeleteFood(uid, user);
DeleteFood(uid, user, food);
return true;
}
@@ -89,7 +91,7 @@ namespace Content.Server.Nutrition.EntitySystems
// Fill last slice with the rest of the solution
FillSlice(sliceUid, solution);
DeleteFood(uid, user);
DeleteFood(uid, user, food);
return true;
}
@@ -102,32 +104,54 @@ namespace Content.Server.Nutrition.EntitySystems
if (!Resolve(uid, ref comp, ref transform))
return EntityUid.Invalid;
var sliceUid = Spawn(comp.Slice, transform.Coordinates);
var inCont = _containerSystem.IsEntityInContainer(uid);
if (inCont)
var sliceUid = Spawn(comp.Slice, _xformSystem.GetMapCoordinates(uid));
// 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);
_containerSystem.AttachParentToContainerOrGrid((sliceUid, xform));
xform.LocalRotation = 0;
_xformSystem.AttachToGridOrMap(sliceUid);
_xformSystem.SetLocalRotation(sliceUid, 0);
}
return sliceUid;
}
private void DeleteFood(EntityUid uid, EntityUid user)
private void DeleteFood(EntityUid uid, EntityUid user, FoodComponent foodComp)
{
var ev = new BeforeFullySlicedEvent
{
User = user
};
RaiseLocalEvent(uid, ev);
if (ev.Cancelled)
return;
if (!ev.Cancelled)
Del(uid);
if (string.IsNullOrEmpty(foodComp.Trash))
{
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)

View File

@@ -20,6 +20,8 @@
Quantity: 11
- ReagentId: Vitamin
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
count: 4
- type: Tag
@@ -132,8 +134,6 @@
- sweet
- banana
- creamy
- type: Food
trash: FoodPlateTin
- type: Sprite
layers:
- state: tin

View File

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

View File

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

View File

@@ -19,21 +19,35 @@
result: DrinkMug
completetime: 0.8
materials:
Glass: 50
Glass: 100
- type: latheRecipe
id: DrinkMugMetal
result: DrinkMugMetal
completetime: 0.8
materials:
Steel: 50
Steel: 100
- type: latheRecipe
id: DrinkGlass
result: DrinkGlass
completetime: 0.8
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
id: FoodPlate
@@ -62,3 +76,24 @@
completetime: 0.4
materials:
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