* Rename SolutionContainerCaps -> Capability * Move IExamine event to Chemistry System. * ECS the ISolutionChange into SolutionChangeEvent * Unify SolutionContainer into a single shared component * Replace ISolutionInteraction with SolutionContainerComponent * Move all methods from SolutionContainer to ChemistrySystem * Refactor EntitySystem calls to Dependencies * Refactor SolutionContainer to SolutionManager * Fix yamls * Fix test fails * Fix post merge issues * Fix various issues with SolutionManager * More fixes * Fix more components * Fix events not being directed * Fixes for Hypospray * Separate removal and iteration on Metabolism * Fix creampie problems * Address some of sloth's issues * Refactors for Systems * Refactored solution location * Fix tests * Address more sloth issues * Fix dependency * Fix merge conflicts * Add xmldocs for Capabilities components * Remove HasSolution/TryGetDefaultSolution and Add/Remove Drainable/Refillable * Replace Grindable/Juiceable with Extractable * Refactor field names * Fix Drainable * Fix some issues with spillable and injector * Fix issues with Grinder * Fix Beaker having duplicate solutions * Fix foaming * Address some MGS issues * Fix Uid issues * Fix errors in solution Tranfer * Fixed some extra values constant values * Cola is drinkable now
71 lines
2.2 KiB
C#
71 lines
2.2 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using Content.Server.Tools.Components;
|
|
using Content.Shared.Chemistry.EntitySystems;
|
|
using Content.Shared.Examine;
|
|
using Robust.Shared.GameObjects;
|
|
using Robust.Shared.Localization;
|
|
|
|
namespace Content.Server.Tools
|
|
{
|
|
/// <summary>
|
|
/// Despite the name, it's only really used for the welder logic in tools. Go figure.
|
|
/// </summary>
|
|
public class WelderSystem : EntitySystem
|
|
{
|
|
private readonly HashSet<WelderComponent> _activeWelders = new();
|
|
|
|
public override void Initialize()
|
|
{
|
|
base.Initialize();
|
|
|
|
SubscribeLocalEvent<WelderComponent, SolutionChangedEvent>(OnSolutionChange);
|
|
SubscribeLocalEvent<WelderComponent, ExaminedEvent>(OnExamine);
|
|
}
|
|
|
|
private void OnExamine(EntityUid uid, WelderComponent component, ExaminedEvent args)
|
|
{
|
|
if (component.WelderLit)
|
|
{
|
|
args.Message.AddMarkup(Loc.GetString("welder-component-on-examine-welder-lit-message") + "\n");
|
|
}
|
|
else
|
|
{
|
|
args.Message.AddText(Loc.GetString("welder-component-on-examine-welder-not-lit-message") + "\n");
|
|
}
|
|
|
|
if (args.IsInDetailsRange)
|
|
{
|
|
args.Message.AddMarkup(Loc.GetString("welder-component-on-examine-detailed-message",
|
|
("colorName", component.Fuel < component.FuelCapacity / 4f ? "darkorange" : "orange"),
|
|
("fuelLeft", Math.Round(component.Fuel)),
|
|
("fuelCapacity", component.FuelCapacity)));
|
|
}
|
|
}
|
|
|
|
private void OnSolutionChange(EntityUid uid, WelderComponent component, SolutionChangedEvent args)
|
|
{
|
|
component.Dirty();
|
|
}
|
|
|
|
public bool Subscribe(WelderComponent welder)
|
|
{
|
|
return _activeWelders.Add(welder);
|
|
}
|
|
|
|
public bool Unsubscribe(WelderComponent welder)
|
|
{
|
|
return _activeWelders.Remove(welder);
|
|
}
|
|
|
|
public override void Update(float frameTime)
|
|
{
|
|
foreach (var tool in _activeWelders.ToArray())
|
|
{
|
|
tool.OnUpdate(frameTime);
|
|
}
|
|
}
|
|
}
|
|
}
|