Files
nukkuminen 7e39f78df5 Soup bugfix and price change (#1630)
* adjust prices for food contracts

* fix unsellable soups

* move thing outside the cycle
2025-08-07 09:56:14 +03:00

120 lines
3.6 KiB
C#

/*
* This file is sublicensed under MIT License
* https://github.com/space-wizards/space-station-14/blob/master/LICENSE.TXT
*/
using System.Linq;
using Content.Shared._CP14.Cooking;
using Content.Shared._CP14.Cooking.Components;
using Content.Shared._CP14.Cooking.Prototypes;
using Content.Shared.Chemistry.EntitySystems;
using Content.Shared.FixedPoint;
using Content.Shared.Nutrition.Components;
using Robust.Shared.Prototypes;
using Robust.Shared.Utility;
namespace Content.Shared._CP14.Workbench.Requirements;
public sealed partial class FoodResource : CP14WorkbenchCraftRequirement
{
[DataField(required: true)]
public ProtoId<CP14CookingRecipePrototype> Recipe;
[DataField]
public FixedPoint2 Count = 1;
public override bool CheckRequirement(IEntityManager entManager,
IPrototypeManager protoManager,
HashSet<EntityUid> placedEntities)
{
var solutionSys = entManager.System<SharedSolutionContainerSystem>();
foreach (var ent in placedEntities)
{
if (!entManager.TryGetComponent<CP14FoodHolderComponent>(ent, out var foodHolder))
continue;
if (!entManager.HasComponent<FoodComponent>(ent))
continue;
if (foodHolder.FoodData?.CurrentRecipe != Recipe)
continue;
if (!solutionSys.TryGetSolution(ent, foodHolder.SolutionId, out _, out var solution))
continue;
if (solution.Volume < Count)
continue;
return true;
}
return false;
}
public override void PostCraft(IEntityManager entManager,
IPrototypeManager protoManager,
HashSet<EntityUid> placedEntities)
{
var solutionSys = entManager.System<SharedSolutionContainerSystem>();
foreach (var ent in placedEntities)
{
if (!entManager.TryGetComponent<CP14FoodHolderComponent>(ent, out var foodHolder))
continue;
if (!entManager.HasComponent<FoodComponent>(ent))
continue;
if (foodHolder.FoodData?.CurrentRecipe != Recipe)
continue;
if (!solutionSys.TryGetSolution(ent, foodHolder.SolutionId, out _, out var solution))
continue;
if (solution.Volume < Count)
continue;
entManager.DeleteEntity(ent);
return;
}
}
public override double GetPrice(IEntityManager entManager,
IPrototypeManager protoManager)
{
if (!protoManager.TryIndex(Recipe, out var indexedRecipe))
return 0;
var complexity = indexedRecipe.Requirements.Sum(req => req.GetComplexity());
return complexity * 6;
}
public override string GetRequirementTitle(IPrototypeManager protoManager)
{
if (!protoManager.TryIndex(Recipe, out var indexedRecipe))
return "Unknown Recipe";
return $"{Loc.GetString(indexedRecipe.FoodData.Name ?? "Unknown Food")} ({Count}u)";
}
public override SpriteSpecifier? GetRequirementTexture(IPrototypeManager protoManager)
{
if (!protoManager.TryIndex(Recipe, out var indexedRecipe))
return null;
var firstLayer = indexedRecipe.FoodData.Visuals.First();
return new SpriteSpecifier.Rsi(new(firstLayer.RsiPath ?? ""), firstLayer.State ?? "");
}
public override Color GetRequirementColor(IPrototypeManager protoManager)
{
if (!protoManager.TryIndex(Recipe, out var indexedRecipe))
return Color.White;
var firstLayer = indexedRecipe.FoodData.Visuals.First();
return firstLayer.Color ?? Color.White;
}
}