2024-02-18 17:28:18 +09:00
|
|
|
using Content.Server.Temperature.Components;
|
|
|
|
|
using Content.Server.Temperature.Systems;
|
|
|
|
|
using Robust.Shared.Physics.Events;
|
|
|
|
|
|
|
|
|
|
namespace Content.Server._White.ChangeTemperatureOnCollide;
|
|
|
|
|
|
|
|
|
|
public sealed class ChangeTemperatureOnCollideSystem : EntitySystem
|
|
|
|
|
{
|
|
|
|
|
[Dependency] private readonly TemperatureSystem _temperature = default!;
|
|
|
|
|
|
|
|
|
|
public override void Initialize()
|
|
|
|
|
{
|
|
|
|
|
base.Initialize();
|
|
|
|
|
|
|
|
|
|
SubscribeLocalEvent<ChangeTemperatureOnCollideComponent, StartCollideEvent>(OnCollide);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void OnCollide(EntityUid uid, ChangeTemperatureOnCollideComponent component, ref StartCollideEvent args)
|
|
|
|
|
{
|
|
|
|
|
if (args.OurFixtureId != component.FixtureID)
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
if (!TryComp(args.OtherEntity, out TemperatureComponent? temperature))
|
|
|
|
|
return;
|
|
|
|
|
|
2024-02-21 16:52:25 +09:00
|
|
|
var curTemp = temperature.CurrentTemperature;
|
|
|
|
|
var newTemp = curTemp + component.Temperature;
|
|
|
|
|
|
|
|
|
|
if (curTemp < component.MinTemperature)
|
|
|
|
|
newTemp = MathF.Max(curTemp, newTemp);
|
|
|
|
|
else if (curTemp > component.MaxTemperature)
|
|
|
|
|
newTemp = MathF.Min(curTemp, newTemp);
|
|
|
|
|
else
|
|
|
|
|
newTemp = Math.Clamp(newTemp, component.MinTemperature, component.MaxTemperature);
|
|
|
|
|
|
|
|
|
|
_temperature.ForceChangeTemperature(args.OtherEntity, newTemp, temperature);
|
2024-02-18 17:28:18 +09:00
|
|
|
}
|
|
|
|
|
}
|