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 EntityUid SourceUid; /// /// World coordinates of radiation source. /// public Vector2 Source; /// /// Uid of entity with radiation receiver component. /// public EntityUid 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, EntityUid sourceUid, Vector2 source, EntityUid destinationUid, Vector2 destination, float rads) { MapId = mapId; SourceUid = sourceUid; Source = source; DestinationUid = destinationUid; Destination = destination; Rads = rads; } }