using Content.Shared.Alert; using Content.Shared.Whitelist; using Robust.Shared.GameStates; using Robust.Shared.Prototypes; 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 { /// /// Goob edit: pinpointer now works on EntityWhitelist (actually only on components but nvm) /// [DataField] public EntityWhitelist? Whitelist; [DataField] public EntityWhitelist? Blacklist; [DataField("mediumDistance"), ViewVariables(VVAccess.ReadWrite)] public float MediumDistance = 16f; [DataField("closeDistance"), ViewVariables(VVAccess.ReadWrite)] public float CloseDistance = 8f; [DataField("reachedDistance"), ViewVariables(VVAccess.ReadWrite)] public float ReachedDistance = 1f; /// /// Pinpointer arrow precision in radians. /// [DataField("precision"), ViewVariables(VVAccess.ReadWrite)] public double Precision = 0.09; /// /// Name to display of the target being tracked. /// [DataField("targetName"), ViewVariables(VVAccess.ReadWrite)] public string? TargetName; /// /// Whether or not the target name should be updated when the target is updated. /// [DataField("updateTargetName"), ViewVariables(VVAccess.ReadWrite)] public bool UpdateTargetName; /// /// Goob edit: pinpointer can retarget only whitelisted entities if specified. /// [DataField] public EntityWhitelist? RetargetingWhitelist; [DataField] public EntityWhitelist? RetargetingBlacklist; /// /// Whether or not the target can be reassigned. /// [DataField("canRetarget"), ViewVariables(VVAccess.ReadWrite)] public bool CanRetarget; /// /// Goob edit: if true, this pinpointer will automatically track ANY nearest entity of a specified type. /// Doesn't work with retargeting, it will always left only one entity in target list. /// [DataField] public bool CanTargetMultiple = true; /// /// Goob edit: many targets instead of just one /// [ViewVariables] public List Targets = new(); // WD EDIT START [DataField] public ProtoId? Alert; [DataField] public bool CanToggle = true; [DataField] public bool CanEmag = true; [DataField] public bool CanExamine = true; // WD EDIT END [DataField, AutoNetworkedField] // WD EDIT: ViewVariables -> DataField 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 }