Remove obsolete code from Food, Drink and Respirator systems. (#30560)

* Remove obsolete code from Food, Drink and Respirator systems

* remove obsolete comment
This commit is contained in:
Mervill 2024-08-02 00:30:45 -07:00 committed by deltanedas
parent 29d949a693
commit a366604df9
4 changed files with 34 additions and 63 deletions

View File

@ -287,10 +287,10 @@ public sealed class RespiratorSystem : EntitySystem
if (ent.Comp.SuffocationCycles >= ent.Comp.SuffocationCycleThreshold)
{
// TODO: This is not going work with multiple different lungs, if that ever becomes a possibility
var organs = _bodySystem.GetBodyOrganComponents<LungComponent>(ent);
foreach (var (comp, _) in organs)
var organs = _bodySystem.GetBodyOrganEntityComps<LungComponent>((ent, null));
foreach (var entity in organs)
{
_alertsSystem.ShowAlert(ent, comp.Alert);
_alertsSystem.ShowAlert(entity.Owner, entity.Comp1.Alert);
}
}
@ -303,10 +303,10 @@ public sealed class RespiratorSystem : EntitySystem
_adminLogger.Add(LogType.Asphyxiation, $"{ToPrettyString(ent):entity} stopped suffocating");
// TODO: This is not going work with multiple different lungs, if that ever becomes a possibility
var organs = _bodySystem.GetBodyOrganComponents<LungComponent>(ent);
foreach (var (comp, _) in organs)
var organs = _bodySystem.GetBodyOrganEntityComps<LungComponent>((ent, null));
foreach (var entity in organs)
{
_alertsSystem.ClearAlert(ent, comp.Alert);
_alertsSystem.ClearAlert(entity.Owner, entity.Comp1.Alert);
}
_damageableSys.TryChangeDamage(ent, ent.Comp.DamageRecovery);

View File

@ -258,7 +258,7 @@ public sealed class DrinkSystem : SharedDrinkSystem
if (transferAmount <= 0)
return;
if (!_body.TryGetBodyOrganComponents<StomachComponent>(args.Target.Value, out var stomachs, body))
if (!_body.TryGetBodyOrganEntityComps<StomachComponent>((args.Target.Value, body), out var stomachs))
{
_popup.PopupEntity(Loc.GetString(forceDrink ? "drink-component-try-use-drink-cannot-drink-other" : "drink-component-try-use-drink-had-enough"), args.Target.Value, args.User);
@ -272,7 +272,7 @@ public sealed class DrinkSystem : SharedDrinkSystem
return;
}
var firstStomach = stomachs.FirstOrNull(stomach => _stomach.CanTransferSolution(stomach.Comp.Owner, drained, stomach.Comp));
var firstStomach = stomachs.FirstOrNull(stomach => _stomach.CanTransferSolution(stomach.Owner, drained, stomach.Comp1));
//All stomachs are full or can't handle whatever solution we have.
if (firstStomach == null)
@ -321,8 +321,7 @@ public sealed class DrinkSystem : SharedDrinkSystem
_audio.PlayPvs(entity.Comp.UseSound, args.Target.Value, AudioParams.Default.WithVolume(-2f));
_reaction.DoEntityReaction(args.Target.Value, solution, ReactionMethod.Ingestion);
//TODO: Grab the stomach UIDs somehow without using Owner
_stomach.TryTransferSolution(firstStomach.Value.Comp.Owner, drained, firstStomach.Value.Comp);
_stomach.TryTransferSolution(firstStomach.Value.Owner, drained, firstStomach.Value.Comp1);
_forensics.TransferDna(entity, args.Target.Value);
@ -336,7 +335,7 @@ public sealed class DrinkSystem : SharedDrinkSystem
!ev.CanInteract ||
!ev.CanAccess ||
!TryComp<BodyComponent>(ev.User, out var body) ||
!_body.TryGetBodyOrganComponents<StomachComponent>(ev.User, out var stomachs, body))
!_body.TryGetBodyOrganEntityComps<StomachComponent>((ev.User, body), out var stomachs))
return;
// Make sure the solution exists

View File

@ -1,6 +1,6 @@
using Content.Server.Body.Components;
using Content.Server.Body.Systems;
using Content.Server.Chemistry.Containers.EntitySystems;
using Content.Shared.Chemistry.EntitySystems;
using Content.Server.Inventory;
using Content.Server.Nutrition.Components;
using Content.Shared.Nutrition.Components;
@ -53,7 +53,7 @@ public sealed class FoodSystem : EntitySystem
[Dependency] private readonly SharedDoAfterSystem _doAfter = default!;
[Dependency] private readonly SharedHandsSystem _hands = default!;
[Dependency] private readonly SharedInteractionSystem _interaction = default!;
[Dependency] private readonly SolutionContainerSystem _solutionContainer = default!;
[Dependency] private readonly SharedSolutionContainerSystem _solutionContainer = default!;
[Dependency] private readonly TransformSystem _transform = default!;
[Dependency] private readonly StackSystem _stack = default!;
[Dependency] private readonly StomachSystem _stomach = default!;
@ -121,7 +121,7 @@ public sealed class FoodSystem : EntitySystem
if (!_solutionContainer.TryGetSolution(food, foodComp.Solution, out _, out var foodSolution))
return (false, false);
if (!_body.TryGetBodyOrganComponents<StomachComponent>(target, out var stomachs, body))
if (!_body.TryGetBodyOrganEntityComps<StomachComponent>((target, body), out var stomachs))
return (false, false);
// Check for special digestibles
@ -182,12 +182,12 @@ public sealed class FoodSystem : EntitySystem
user, target);
// logging
_adminLogger.Add(LogType.ForceFeed, LogImpact.Medium, $"{ToPrettyString(user):user} is forcing {ToPrettyString(target):target} to eat {ToPrettyString(food):food} {SolutionContainerSystem.ToPrettyString(foodSolution)}");
_adminLogger.Add(LogType.ForceFeed, LogImpact.Medium, $"{ToPrettyString(user):user} is forcing {ToPrettyString(target):target} to eat {ToPrettyString(food):food} {SharedSolutionContainerSystem.ToPrettyString(foodSolution)}");
}
else
{
// log voluntary eating
_adminLogger.Add(LogType.Ingestion, LogImpact.Low, $"{ToPrettyString(target):target} is eating {ToPrettyString(food):food} {SolutionContainerSystem.ToPrettyString(foodSolution)}");
_adminLogger.Add(LogType.Ingestion, LogImpact.Low, $"{ToPrettyString(target):target} is eating {ToPrettyString(food):food} {SharedSolutionContainerSystem.ToPrettyString(foodSolution)}");
}
var doAfterArgs = new DoAfterArgs(EntityManager,
@ -220,7 +220,7 @@ public sealed class FoodSystem : EntitySystem
if (!TryComp<BodyComponent>(args.Target.Value, out var body))
return;
if (!_body.TryGetBodyOrganComponents<StomachComponent>(args.Target.Value, out var stomachs, body))
if (!_body.TryGetBodyOrganEntityComps<StomachComponent>((args.Target.Value, body), out var stomachs))
return;
if (args.Used is null || !_solutionContainer.TryGetSolution(args.Used.Value, args.Solution, out var soln, out var solution))
@ -244,23 +244,22 @@ public sealed class FoodSystem : EntitySystem
var split = _solutionContainer.SplitSolution(soln.Value, transferAmount);
//TODO: Get the stomach UID somehow without nabbing owner
// Get the stomach with the highest available solution volume
var highestAvailable = FixedPoint2.Zero;
StomachComponent? stomachToUse = null;
foreach (var (stomach, _) in stomachs)
Entity<StomachComponent>? stomachToUse = null;
foreach (var ent in stomachs)
{
var owner = stomach.Owner;
if (!_stomach.CanTransferSolution(owner, split, stomach))
var owner = ent.Owner;
if (!_stomach.CanTransferSolution(owner, split, ent.Comp1))
continue;
if (!_solutionContainer.ResolveSolution(owner, StomachSystem.DefaultSolutionName, ref stomach.Solution, out var stomachSol))
if (!_solutionContainer.ResolveSolution(owner, StomachSystem.DefaultSolutionName, ref ent.Comp1.Solution, out var stomachSol))
continue;
if (stomachSol.AvailableVolume <= highestAvailable)
continue;
stomachToUse = stomach;
stomachToUse = ent;
highestAvailable = stomachSol.AvailableVolume;
}
@ -273,7 +272,7 @@ public sealed class FoodSystem : EntitySystem
}
_reaction.DoEntityReaction(args.Target.Value, solution, ReactionMethod.Ingestion);
_stomach.TryTransferSolution(stomachToUse.Owner, split, stomachToUse);
_stomach.TryTransferSolution(stomachToUse!.Value.Owner, split, stomachToUse);
var flavors = args.FlavorMessage;
@ -365,7 +364,7 @@ public sealed class FoodSystem : EntitySystem
!ev.CanInteract ||
!ev.CanAccess ||
!TryComp<BodyComponent>(ev.User, out var body) ||
!_body.TryGetBodyOrganComponents<StomachComponent>(ev.User, out var stomachs, body))
!_body.TryGetBodyOrganEntityComps<StomachComponent>((ev.User, body), out var stomachs))
return;
// have to kill mouse before eating it
@ -399,7 +398,7 @@ public sealed class FoodSystem : EntitySystem
if (!Resolve(food, ref foodComp, false))
return false;
if (!_body.TryGetBodyOrganComponents<StomachComponent>(uid, out var stomachs))
if (!_body.TryGetBodyOrganEntityComps<StomachComponent>(uid, out var stomachs))
return false;
return IsDigestibleBy(food, foodComp, stomachs);
@ -409,7 +408,7 @@ public sealed class FoodSystem : EntitySystem
/// Returns true if <paramref name="stomachs"/> has a <see cref="StomachComponent.SpecialDigestible"/> that whitelists
/// this <paramref name="food"/> (or if they even have enough stomachs in the first place).
/// </summary>
private bool IsDigestibleBy(EntityUid food, FoodComponent component, List<(StomachComponent, OrganComponent)> stomachs)
private bool IsDigestibleBy(EntityUid food, FoodComponent component, List<Entity<StomachComponent, OrganComponent>> stomachs)
{
var digestible = true;
@ -418,13 +417,13 @@ public sealed class FoodSystem : EntitySystem
return false;
// Run through the mobs' stomachs
foreach (var (comp, _) in stomachs)
foreach (var ent in stomachs)
{
// Find a stomach with a SpecialDigestible
if (comp.SpecialDigestible == null)
if (ent.Comp1.SpecialDigestible == null)
continue;
// Check if the food is in the whitelist
if (_whitelistSystem.IsWhitelistPass(comp.SpecialDigestible, food))
if (_whitelistSystem.IsWhitelistPass(ent.Comp1.SpecialDigestible, food))
return true;
// They can only eat whitelist food and the food isn't in the whitelist. It's not edible.
return false;

View File

@ -157,32 +157,6 @@ public partial class SharedBodySystem
return false;
}
/// <summary>
/// Returns a list of ValueTuples of <see cref="T"/> and OrganComponent on each organ
/// in the given body.
/// </summary>
/// <param name="uid">The body entity id to check on.</param>
/// <param name="body">The body to check for organs on.</param>
/// <typeparam name="T">The component to check for.</typeparam>
public List<(T Comp, OrganComponent Organ)> GetBodyOrganComponents<T>(
EntityUid uid,
BodyComponent? body = null)
where T : IComponent
{
if (!Resolve(uid, ref body))
return new List<(T Comp, OrganComponent Organ)>();
var query = GetEntityQuery<T>();
var list = new List<(T Comp, OrganComponent Organ)>(3);
foreach (var organ in GetBodyOrgans(uid, body))
{
if (query.TryGetComponent(organ.Id, out var comp))
list.Add((comp, organ.Component));
}
return list;
}
/// <summary>
/// Returns a list of Entity<<see cref="T"/>, <see cref="OrganComponent"/>>
/// for each organ of the body
@ -216,19 +190,18 @@ public partial class SharedBodySystem
/// <param name="body">The body to check for organs on.</param>
/// <typeparam name="T">The component to check for.</typeparam>
/// <returns>Whether any were found.</returns>
public bool TryGetBodyOrganComponents<T>(
EntityUid uid,
[NotNullWhen(true)] out List<(T Comp, OrganComponent Organ)>? comps,
BodyComponent? body = null)
public bool TryGetBodyOrganEntityComps<T>(
Entity<BodyComponent?> entity,
[NotNullWhen(true)] out List<Entity<T, OrganComponent>>? comps)
where T : IComponent
{
if (!Resolve(uid, ref body))
if (!Resolve(entity.Owner, ref entity.Comp))
{
comps = null;
return false;
}
comps = GetBodyOrganComponents<T>(uid, body);
comps = GetBodyOrganEntityComps<T>(entity);
if (comps.Count != 0)
return true;