* LOCKED THE FUCK IN * Forgot this little fella * Crying * All entity effects ported, needs cleanup still * Commit * HEHEHEHAW * Shelve for now * fixe * Big * First big chunk of changes * Big if true * Commit * IT BUILDS!!! * Fix LINTER fails * Cleanup * Scale working, cut down on some evil code * Delete old Entity Effects * Accidentally breaking shit by fixing bugs * Fix a bunch of effects not working * Fix reagent thresholds * Update damage * Wait don't change the gas metabolisms A * Cleanup * more fixes * Eh * Misc fixes and jank * Remove two things, add bullshit, change condition to inverted * Remove unused "Shared" system structure * Namespace fix * merge conflicts/cleanup * More fixes * Guidebook text begins * Shelve * Push * More shit to push * Fix * Fix merg conflicts * BLOOD FOR THE BLOOD GOD!!! * Mild cleanup and lists * Fix localization and comments * Shuffle localization around a bit. * All done? * Nearly everything * Is this the end? * Whoops forgot to remove that TODO * Get rid of some warnings for good measure... * It's done * Should make those virtual in case we want to override them tbqh... * Update Content.Shared/EntityEffects/Effects/Botany/PlantAttributes/PlantDestroySeeds.cs Co-authored-by: Pok <113675512+Pok27@users.noreply.github.com> * Fix test fails real * Add to codeowners * Documentation to everything * Forgot to push whoops * Standardize Condition names * Fix up metabolism a little as a treat * review * add IsServer checks --------- Co-authored-by: Princess Cheeseballs <66055347+Pronana@users.noreply.github.com> Co-authored-by: Pok <113675512+Pok27@users.noreply.github.com>
95 lines
3.3 KiB
C#
95 lines
3.3 KiB
C#
using Content.Shared.Atmos;
|
|
using Content.Shared.Atmos.Components;
|
|
using Content.Shared.Atmos.EntitySystems;
|
|
using Content.Shared.Body.Components;
|
|
using Content.Shared.Body.Prototypes;
|
|
using Content.Shared.Chemistry.Components;
|
|
using Content.Shared.Chemistry.EntitySystems;
|
|
using Content.Shared.Inventory.Events;
|
|
using Robust.Shared.Prototypes;
|
|
using BreathToolComponent = Content.Shared.Atmos.Components.BreathToolComponent;
|
|
using InternalsComponent = Content.Shared.Body.Components.InternalsComponent;
|
|
|
|
namespace Content.Shared.Body.Systems;
|
|
|
|
public sealed class LungSystem : EntitySystem
|
|
{
|
|
[Dependency] private readonly SharedAtmosphereSystem _atmos = default!;
|
|
[Dependency] private readonly SharedInternalsSystem _internals = default!;
|
|
[Dependency] private readonly SharedSolutionContainerSystem _solutionContainerSystem = default!;
|
|
|
|
public override void Initialize()
|
|
{
|
|
base.Initialize();
|
|
SubscribeLocalEvent<LungComponent, ComponentInit>(OnComponentInit);
|
|
SubscribeLocalEvent<BreathToolComponent, GotEquippedEvent>(OnGotEquipped);
|
|
SubscribeLocalEvent<BreathToolComponent, GotUnequippedEvent>(OnGotUnequipped);
|
|
}
|
|
|
|
private void OnGotUnequipped(Entity<BreathToolComponent> ent, ref GotUnequippedEvent args)
|
|
{
|
|
_atmos.DisconnectInternals(ent);
|
|
}
|
|
|
|
private void OnGotEquipped(Entity<BreathToolComponent> ent, ref GotEquippedEvent args)
|
|
{
|
|
if ((args.SlotFlags & ent.Comp.AllowedSlots) == 0)
|
|
{
|
|
return;
|
|
}
|
|
|
|
if (TryComp(args.Equipee, out InternalsComponent? internals))
|
|
{
|
|
ent.Comp.ConnectedInternalsEntity = args.Equipee;
|
|
_internals.ConnectBreathTool((args.Equipee, internals), ent);
|
|
}
|
|
}
|
|
|
|
private void OnComponentInit(Entity<LungComponent> entity, ref ComponentInit args)
|
|
{
|
|
if (_solutionContainerSystem.EnsureSolution(entity.Owner, entity.Comp.SolutionName, out var solution))
|
|
{
|
|
solution.MaxVolume = 100.0f;
|
|
solution.CanReact = false; // No dexalin lungs
|
|
}
|
|
}
|
|
|
|
// TODO: JUST METABOLIZE GASES DIRECTLY DON'T CONVERT TO REAGENTS!!! (Needs Metabolism refactor :B)
|
|
public void GasToReagent(EntityUid uid, LungComponent lung)
|
|
{
|
|
if (!_solutionContainerSystem.ResolveSolution(uid, lung.SolutionName, ref lung.Solution, out var solution))
|
|
return;
|
|
|
|
GasToReagent(lung.Air, solution);
|
|
_solutionContainerSystem.UpdateChemicals(lung.Solution.Value);
|
|
}
|
|
|
|
/* This should really be moved to somewhere in the atmos system and modernized,
|
|
so that other systems, like CondenserSystem, can use it.
|
|
*/
|
|
private void GasToReagent(GasMixture gas, Solution solution)
|
|
{
|
|
foreach (var gasId in Enum.GetValues<Gas>())
|
|
{
|
|
var i = (int) gasId;
|
|
var moles = gas[i];
|
|
if (moles <= 0)
|
|
continue;
|
|
|
|
var reagent = _atmos.GasReagents[i];
|
|
if (reagent is null)
|
|
continue;
|
|
|
|
var amount = moles * Atmospherics.BreathMolesToReagentMultiplier;
|
|
solution.AddReagent(reagent, amount);
|
|
}
|
|
}
|
|
|
|
public Solution GasToReagent(GasMixture gas)
|
|
{
|
|
var solution = new Solution();
|
|
GasToReagent(gas, solution);
|
|
return solution;
|
|
}
|
|
}
|