* multi-node xeno artifacts * refactor existing artifact effects * more tweaks to generation * more shit plus fix tests * more generation stuff plus threat levels * doink * now make it build * defer the artifact activation to not cause errors also pricing * some changes * all of the yaml + ui stuff for artifact analyzer * machine linking and starting to make the ui functional * artifact analyzer display * a shit ton of artifact analyzer stuff * more changes; making destroy work properly; progress bar tweaks * getting shit going! ALL RIGHT * small tweaks that didn't help much * Komm susser todd: the end of analysis * recipes and hints and ui, oh my! * add some in-game sources gotta prepare for day 1 launch * node data + ditch random seed in place of id * bunch of triggers * finish off the last few triggers * implement machine examine verb * knock, flicker, blink, throw * shatter, foam, shuffle, heat * fix all the shit i broke * *some* of these have to be good, no? 25 effects * callin' it there for effects * comments + reword some trigger hints * don't mind this little commit here * byref event * fix brokey node entry * fix low pressure trigger * mirror review plus fixing 0x40's bug also the throw artifact threw incorrectly * randomize the event message a teeny bit
52 lines
1.8 KiB
C#
52 lines
1.8 KiB
C#
using Content.Server.Atmos;
|
|
using Content.Server.Atmos.EntitySystems;
|
|
using Content.Server.Xenoarchaeology.XenoArtifacts.Effects.Components;
|
|
using Content.Server.Xenoarchaeology.XenoArtifacts.Events;
|
|
using Robust.Server.GameObjects;
|
|
|
|
namespace Content.Server.Xenoarchaeology.XenoArtifacts.Effects.Systems;
|
|
|
|
public sealed class TemperatureArtifactSystem : EntitySystem
|
|
{
|
|
[Dependency] private readonly AtmosphereSystem _atmosphereSystem = default!;
|
|
[Dependency] private readonly TransformSystem _transformSystem = default!;
|
|
|
|
public override void Initialize()
|
|
{
|
|
base.Initialize();
|
|
SubscribeLocalEvent<TemperatureArtifactComponent, ArtifactActivatedEvent>(OnActivate);
|
|
}
|
|
|
|
private void OnActivate(EntityUid uid, TemperatureArtifactComponent component, ArtifactActivatedEvent args)
|
|
{
|
|
var transform = Transform(uid);
|
|
|
|
var center = _atmosphereSystem.GetContainingMixture(uid, false, true);
|
|
if (center == null)
|
|
return;
|
|
UpdateTileTemperature(component, center);
|
|
|
|
if (component.AffectAdjacentTiles && transform.GridUid != null)
|
|
{
|
|
var adjacent = _atmosphereSystem.GetAdjacentTileMixtures(transform.GridUid.Value,
|
|
_transformSystem.GetGridOrMapTilePosition(uid, transform), excite: true);
|
|
|
|
foreach (var mixture in adjacent)
|
|
{
|
|
UpdateTileTemperature(component, mixture);
|
|
}
|
|
}
|
|
}
|
|
|
|
private void UpdateTileTemperature(TemperatureArtifactComponent component, GasMixture environment)
|
|
{
|
|
var dif = component.TargetTemperature - environment.Temperature;
|
|
var absDif = Math.Abs(dif);
|
|
if (absDif < component.MaxTemperatureDifference)
|
|
return;
|
|
|
|
var step = Math.Min(absDif, component.SpawnTemperature);
|
|
environment.Temperature += dif > 0 ? step : -step;
|
|
}
|
|
}
|