6
2025-08-13 15:03:01 +03:00

65 lines
2.1 KiB
C#

using Content.Shared.Actions;
using Content.Shared._Horizon.ERTJuggernaut;
using Content.Shared.Chemistry.EntitySystems;
using Content.Shared.Chemistry.Components.SolutionManager;
namespace Content.Server._Horizon.ERTJuggernaut;
public sealed class JuggernautServerSystem : EntitySystem
{
[Dependency] private readonly SharedActionsSystem _actionSystem = default!;
[Dependency] private readonly SharedSolutionContainerSystem _solutionSystem = default!;
public override void Initialize()
{
base.Initialize();
SubscribeLocalEvent<JuggernautComponent, ComponentStartup>(AddAction);
SubscribeLocalEvent<JuggernautComponent, ComponentShutdown>(RemoveAction);
SubscribeNetworkEvent<JuggernautChemMasterInjectEvent>(OnInject);
}
private void AddAction(EntityUid uid, JuggernautComponent component, ComponentStartup args)
{
_actionSystem.AddAction(uid, ref component.JuggernautEntity, component.JuggernautAction);
}
private void RemoveAction(EntityUid uid, JuggernautComponent component, ComponentShutdown args)
{
_actionSystem.RemoveAction(uid, component.JuggernautEntity);
}
private void OnInject(JuggernautChemMasterInjectEvent ev)
{
var uid = GetEntity(ev.Target);
if (!TryComp<JuggernautComponent>(uid, out var component))
return;
foreach (var (reagent, amount) in ev.ReagentsToInject)
{
if (amount <= 0)
continue;
if (!component.AvailableReagents.TryGetValue(reagent, out var available))
continue;
var toTransfer = Math.Min(amount, available);
if (toTransfer <= 0)
continue;
component.AvailableReagents[reagent] -= toTransfer;
if (!TryComp(uid, out SolutionContainerManagerComponent? solutionContainerManager))
return;
if (!_solutionSystem.TryGetSolution((uid, solutionContainerManager), "chemicals", out var solution))
return;
_solutionSystem.TryAddReagent(solution.Value, reagent, toTransfer, out _);
}
Dirty(uid, component);
}
}