using Robust.Shared.Audio; using Robust.Shared.GameStates; namespace Content.Shared.Teleportation.Components; /// /// Marks an entity as being a 'portal' which teleports entities sent through it to linked entities. /// Relies on being set up. /// [RegisterComponent, NetworkedComponent, AutoGenerateComponentState] public sealed partial class PortalComponent : Component { /// /// Sound played on arriving to this portal, centered on the destination. /// The arrival sound of the entered portal will play if the destination is not a portal. /// [DataField("arrivalSound")] public SoundSpecifier ArrivalSound = new SoundPathSpecifier("/Audio/Effects/teleport_arrival.ogg"); /// /// Sound played on departing from this portal, centered on the original portal. /// [DataField("departureSound")] public SoundSpecifier DepartureSound = new SoundPathSpecifier("/Audio/Effects/teleport_departure.ogg"); /// /// If no portals are linked, the subject will be teleported a random distance at maximum this far away. /// [DataField("maxRandomRadius"), ViewVariables(VVAccess.ReadWrite)] public float MaxRandomRadius = 7.0f; /// /// If false, this portal will fail to teleport and fizzle out if attempting to send an entity to a different map /// /// /// Shouldn't be able to teleport people to centcomm or the eshuttle from the station /// [DataField("canTeleportToOtherMaps"), ViewVariables(VVAccess.ReadWrite)] public bool CanTeleportToOtherMaps = false; /// /// Maximum distance that portals can teleport to, in all cases. Mostly this matters for linked portals. /// Null means no restriction on distance. /// /// /// Obviously this should strictly be larger than (or null) /// [DataField("maxTeleportRadius"), ViewVariables(VVAccess.ReadWrite)] public float? MaxTeleportRadius; /// /// Should we teleport randomly if nothing is linked. /// [DataField, AutoNetworkedField, ViewVariables(VVAccess.ReadWrite)] public bool RandomTeleport = true; }