using System.Numerics;
using Content.Shared.Radiation.Components;
using Robust.Shared.Map;
using Robust.Shared.Serialization;
namespace Content.Shared.Radiation.Systems;
///
/// Ray emitted by radiation source towards radiation receiver.
/// Contains all information about encountered radiation blockers.
///
[Serializable, NetSerializable]
public sealed class RadiationRay
{
///
/// Map on which source and receiver are placed.
///
public MapId MapId;
///
/// Uid of entity with .
///
public NetEntity SourceUid;
///
/// World coordinates of radiation source.
///
public Vector2 Source;
///
/// Uid of entity with radiation receiver component.
///
public NetEntity DestinationUid;
///
/// World coordinates of radiation receiver.
///
public Vector2 Destination;
///
/// How many rads intensity reached radiation receiver.
///
public float Rads;
///
/// Has rad ray reached destination or lost all intensity after blockers?
///
public bool ReachedDestination => Rads > 0;
///
/// All blockers visited by gridcast. Key is uid of grid. Values are pairs
/// of tile indices and floats with updated radiation value.
///
///
/// Last tile may have negative value if ray has lost all intensity.
/// Grid traversal order isn't guaranteed.
///
public Dictionary> Blockers = new();
public RadiationRay(MapId mapId, NetEntity sourceUid, Vector2 source,
NetEntity destinationUid, Vector2 destination, float rads)
{
MapId = mapId;
SourceUid = sourceUid;
Source = source;
DestinationUid = destinationUid;
Destination = destination;
Rads = rads;
}
}