using Robust.Shared.GameStates; using Robust.Shared.Serialization; namespace Content.Shared.Pinpointer; /// /// Displays a sprite on the item that points towards the target component. /// [RegisterComponent, NetworkedComponent] [AutoGenerateComponentState] [Access(typeof(SharedPinpointerSystem))] public sealed partial class PinpointerComponent : Component { // TODO: Type serializer oh god [DataField] public string? Component; [DataField] public float MediumDistance = 16f; [DataField] public float CloseDistance = 8f; [DataField] public float ReachedDistance = 1f; /// /// Pinpointer arrow precision in radians. /// [DataField] public double Precision = 0.09; /// /// Name to display of the target being tracked. /// [DataField] public string? TargetName; /// /// Whether or not the target name should be updated when the target is updated. /// [DataField] public bool UpdateTargetName; /// /// Whether or not the target can be reassigned. /// [DataField] public bool CanRetarget; [ViewVariables] public EntityUid? Target = null; [ViewVariables, AutoNetworkedField] public bool IsActive = false; [ViewVariables, AutoNetworkedField] public Angle ArrowAngle; [ViewVariables, AutoNetworkedField] public Distance DistanceToTarget = Distance.Unknown; [ViewVariables] public bool HasTarget => DistanceToTarget != Distance.Unknown; } [Serializable, NetSerializable] public enum Distance : byte { Unknown, Reached, Close, Medium, Far }