Files
tbd-station-14/Content.Server/Radiation/RadiationPulseSystem.cs
DrSmugleaf 716bee0746 Remove IClientSingularityInstance, move visual effects to SingularityDistortionComponent (#4194)
* Remove IClientSingularityInstance

* In and out 5 minute refactor

* Component states for singularity distortion

* Fix distortion states

* Address reviews
2021-06-24 12:48:11 +10:00

66 lines
2.0 KiB
C#

using System.Linq;
using Content.Shared.Radiation;
using JetBrains.Annotations;
using Robust.Shared.GameObjects;
using Robust.Shared.IoC;
using Robust.Shared.Map;
namespace Content.Server.Radiation
{
[UsedImplicitly]
public sealed class RadiationPulseSystem : EntitySystem
{
private const string RadiationPrototype = "RadiationPulse";
public IEntity RadiationPulse(
EntityCoordinates coordinates,
float range,
int dps,
bool decay = true,
float minPulseLifespan = 0.8f,
float maxPulseLifespan = 2.5f,
string? sound = null)
{
var radiationEntity = EntityManager.SpawnEntity(RadiationPrototype, coordinates);
var radiation = radiationEntity.GetComponent<RadiationPulseComponent>();
radiation.Range = range;
radiation.RadsPerSecond = dps;
radiation.Draw = false;
radiation.Decay = decay;
radiation.MinPulseLifespan = minPulseLifespan;
radiation.MaxPulseLifespan = maxPulseLifespan;
radiation.Sound = sound;
radiation.DoPulse();
return radiationEntity;
}
public override void Update(float frameTime)
{
base.Update(frameTime);
var lookupSystem = IoCManager.Resolve<IEntityLookup>();
foreach (var comp in ComponentManager.EntityQuery<RadiationPulseComponent>(true))
{
comp.Update(frameTime);
var ent = comp.Owner;
if (ent.Deleted) continue;
foreach (var entity in lookupSystem.GetEntitiesInRange(ent.Transform.Coordinates, comp.Range, true))
{
if (entity.Deleted) continue;
foreach (var radiation in entity.GetAllComponents<IRadiationAct>().ToArray())
{
radiation.RadiationAct(frameTime, comp);
}
}
}
}
}
}