using Content.Shared.Teleportation.Systems;
using Robust.Shared.GameStates;
using Robust.Shared.Prototypes;
using Robust.Shared.Serialization;
namespace Content.Shared.Teleportation.Components;
// TODO: In the future assimilate ghost UI to use this.
///
/// Used where you want an entity to display a list of player-safe teleport locations
/// They teleport to the location clicked
/// Looks for non Ghost-Only WarpPointComponents
///
[RegisterComponent, NetworkedComponent, Access(typeof(SharedTeleportLocationsSystem)), AutoGenerateComponentState]
public sealed partial class TeleportLocationsComponent : Component
{
///
/// List of available warp points
///
[DataField, AutoNetworkedField]
public HashSet AvailableWarps = new();
///
/// What should spawn as an effect when the user teleports?
///
[DataField]
public EntProtoId? TeleportEffect;
///
/// Should this close the BUI after teleport?
///
[DataField]
public bool CloseAfterTeleport;
///
/// Name of the Teleport Location menu
///
[DataField]
public LocId Name;
///
/// Should the user have some speech if they teleport?
/// If enabled it will be prepended to the location name.
/// So something like "I am going to" would become "I am going to (Bridge)"
///
[DataField]
public LocId? Speech;
}
///
/// A teleport point, which has a location (the destination) and the entity that it represents.
///
[Serializable, NetSerializable, DataDefinition]
public partial record struct TeleportPoint
{
[DataField]
public string Location;
[DataField]
public NetEntity TelePoint;
public TeleportPoint(string Location, NetEntity TelePoint)
{
this.Location = Location;
this.TelePoint = TelePoint;
}
}