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:
@@ -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)
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -151,5 +151,5 @@
|
|||||||
- Trash
|
- Trash
|
||||||
- type: PhysicalComposition
|
- type: PhysicalComposition
|
||||||
materialComposition:
|
materialComposition:
|
||||||
Steel: 100
|
Steel: 60
|
||||||
- type: SpaceGarbage
|
- type: SpaceGarbage
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user