Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add Multiple Tracking Options to the Pinpointer #418

Closed
wants to merge 8 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 1 addition & 3 deletions Content.Server/Nuke/NukeCodePaperSystem.cs
Original file line number Diff line number Diff line change
Expand Up @@ -114,9 +114,7 @@ private bool TryGetRelativeNukeCode(
foreach (var (nukeUid, nuke) in nukes)
{
if (!onlyCurrentStation &&
(owningStation == null &&
nuke.OriginMapGrid != (transform.MapID, transform.GridUid) ||
nuke.OriginStation != owningStation))
nuke.OriginStation != owningStation)
{
continue;
}
Expand Down
4 changes: 2 additions & 2 deletions Content.Server/Pinpointer/PinpointerSystem.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,10 @@
using System.Numerics;
using Robust.Shared.Utility;
using Content.Server.Shuttles.Events;
using Content.Shared.IdentityManagement;

namespace Content.Server.Pinpointer;

public sealed class PinpointerSystem : SharedPinpointerSystem
public sealed partial class PinpointerSystem : SharedPinpointerSystem
{
[Dependency] private readonly SharedTransformSystem _transform = default!;
[Dependency] private readonly SharedAppearanceSystem _appearance = default!;
Expand All @@ -18,6 +17,7 @@ public sealed class PinpointerSystem : SharedPinpointerSystem
public override void Initialize()
{
base.Initialize();
InitializeMultiplePinpointer();
_xformQuery = GetEntityQuery<TransformComponent>();

SubscribeLocalEvent<PinpointerComponent, ActivateInWorldEvent>(OnActivate);
Expand Down
75 changes: 75 additions & 0 deletions Content.Server/Pinpointer/PinpointerSystem.multiple.cs
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The public methods here should have XML docs.

Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
using Content.Shared.Interaction;
using Content.Shared.Pinpointer;
using Robust.Shared.Utility;

namespace Content.Server.Pinpointer;

public sealed partial class PinpointerSystem
{
public void InitializeMultiplePinpointer()
{
SubscribeLocalEvent<MultiplePinpointerComponent, ComponentStartup>(OnMultiplePinpointerStartup);
SubscribeLocalEvent<MultiplePinpointerComponent, ActivateInWorldEvent>(OnMultiplePinpointerActivated);
SubscribeLocalEvent<MultiplePinpointerComponent, AfterAutoHandleStateEvent>(OnMultiplePinpointerHandleState);
}

private void OnMultiplePinpointerHandleState(EntityUid uid, MultiplePinpointerComponent component, ref AfterAutoHandleStateEvent args)
{
SetMultiplePinpointer(uid, component);
}

private void OnMultiplePinpointerStartup(EntityUid uid, MultiplePinpointerComponent multiple, ComponentStartup args)
{
var pinpointer = EntityManager.EnsureComponent<PinpointerComponent>(uid);

SetMultiplePinpointer(uid, multiple, pinpointer);
}

private void OnMultiplePinpointerActivated(EntityUid uid, MultiplePinpointerComponent multiple, ActivateInWorldEvent args)
{
if (args.Handled)
return;

args.Handled = CycleMultiplePinpointer(uid, multiple, args.User);
}

private bool CycleMultiplePinpointer(EntityUid uid, MultiplePinpointerComponent? multiple = null, EntityUid? user = null)
{
if (!Resolve(uid, ref multiple))
return false;

if (multiple.Modes.Length == 0)
return false;

multiple.CurrentEntry = (uint)((multiple.CurrentEntry + 1) % multiple.Modes.Length);
SetMultiplePinpointer(uid, multiple, user: user);

return true;
}

private void SetMultiplePinpointer(EntityUid uid,
MultiplePinpointerComponent? multiple = null,
PinpointerComponent? pin = null,
EntityUid? user = null)
{
if (!Resolve(uid, ref multiple, ref pin))
return;

if (multiple.Modes.Length <= multiple.CurrentEntry)
return;

var current = multiple.Modes[multiple.CurrentEntry];
SetDistance(uid, Distance.Unknown, pin);
if (current == "Off")
{
SetActive(uid, true, pin);
pin.Component = null;
}
else
{
SetActive(uid, false, pin);
pin.Component = current;
}
LocateTarget(uid, pin);
}
}
12 changes: 12 additions & 0 deletions Content.Shared/Nuke/NuclearBombSyndicateComponent.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
using Robust.Shared.GameStates;

namespace Content.Shared.Nuke;

/// <summary>
/// Used for tracking the nuke bomb - isn't a tag for pinpointer purposes.
/// </summary>
[RegisterComponent, NetworkedComponent]
public sealed partial class NuclearBombSyndicateComponent : Component
{

}
13 changes: 13 additions & 0 deletions Content.Shared/Pinpointer/MultiplePinpointerComponent.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
using Robust.Shared.GameStates;

namespace Content.Shared.Pinpointer;

[RegisterComponent, NetworkedComponent, AutoGenerateComponentState]
public sealed partial class MultiplePinpointerComponent : Component
{
[DataField(required: true)]
public string[] Modes = Array.Empty<string>();

[ViewVariables, AutoNetworkedField]
public uint CurrentEntry = 0;
}
44 changes: 22 additions & 22 deletions Resources/Maps/Shuttles/infiltrator.yml

Large diffs are not rendered by default.

37 changes: 19 additions & 18 deletions Resources/Maps/Shuttles/striker.yml

Large diffs are not rendered by default.

12 changes: 12 additions & 0 deletions Resources/Prototypes/Catalog/Fills/Backpacks/duffelbag.yml
Original file line number Diff line number Diff line change
Expand Up @@ -332,6 +332,18 @@
- id: PinpointerSyndicateNuclear
- id: DeathAcidifierImplanter

- type: entity
parent: ClothingBackpackDuffelSyndicateBundle
id: ClothingBackpackDuffelSyndicateLonelyOperative
name: operative duffelbag
components:
- type: StorageFill
contents:
- id: BoxSurvivalSyndicate
- id: WeaponPistolViper
- id: PinpointerStationNuclear
- id: DeathAcidifierImplanter


- type: entity
parent: ClothingBackpackDuffelSyndicateMedicalBundle
Expand Down
2 changes: 1 addition & 1 deletion Resources/Prototypes/Entities/Mobs/Player/human.yml
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@
randomizeName: false
- type: NukeOperative
- type: Loadout
prototypes: [SyndicateOperativeGearFull]
prototypes: [SyndicateLonelyOperativeGearFull]
- type: RandomMetadata
nameSegments:
- SyndicateNamesPrefix
Expand Down
9 changes: 9 additions & 0 deletions Resources/Prototypes/Entities/Objects/Devices/nuke.yml
Original file line number Diff line number Diff line change
Expand Up @@ -114,6 +114,15 @@
- type: Physics
bodyType: Dynamic

- type: entity
parent: NuclearBombUnanchored
id: NuclearBombSyndicate
suffix: syndicate
components:
- type: NukeLabel
prefix: nuke-label-syndicate
- type: NuclearBombSyndicate

- type: entity
parent: StorageTank
id: NuclearBombKeg
Expand Down
21 changes: 19 additions & 2 deletions Resources/Prototypes/Entities/Objects/Devices/pinpointer.yml
Original file line number Diff line number Diff line change
Expand Up @@ -60,8 +60,25 @@
- type: Icon
state: pinpointer-syndicate
- type: Pinpointer
component: NukeDisk
targetName: nuclear authentication disk
updateTargetName: true
- type: MultiplePinpointer
modes:
- Off
- NukeDisk
- NuclearBombSyndicate
- NukeOpsShuttle

- type: entity
parent: PinpointerSyndicateNuclear
id: PinpointerStationNuclear
suffix: Station bomb
components:
- type: MultiplePinpointer
modes:
- Off
- NukeDisk
- Nuke
- NukeOpsShuttle

- type: entity
name: universal pinpointer
Expand Down
1 change: 1 addition & 0 deletions Resources/Prototypes/Entities/Objects/Misc/paper.yml
Original file line number Diff line number Diff line change
Expand Up @@ -254,6 +254,7 @@
suffix: Station Only
components:
- type: NukeCodePaper
allNukesAvailable: false

- type: entity
parent: Paper
Expand Down
21 changes: 21 additions & 0 deletions Resources/Prototypes/Roles/Jobs/Fun/misc_startinggear.yml
Original file line number Diff line number Diff line change
Expand Up @@ -114,6 +114,27 @@
satchel: ClothingBackpackDuffelSyndicateOperative
duffelbag: ClothingBackpackDuffelSyndicateOperative

#Syndicate Lonely Operative Outfit - include a special pinpointer
- type: startingGear
id: SyndicateLonelyOperativeGearFull
equipment:
jumpsuit: ClothingUniformJumpsuitOperative
back: ClothingBackpackDuffelSyndicateLonelyOperative
mask: ClothingMaskGasSyndicate
eyes: ClothingEyesHudSyndicate
ears: ClothingHeadsetAltSyndicate
gloves: ClothingHandsGlovesCombat
outerClothing: ClothingOuterHardsuitSyndie
shoes: ClothingShoesBootsCombatFilled
id: SyndiPDA
pocket1: DoubleEmergencyOxygenTankFilled
pocket2: BaseUplinkRadio40TC
belt: ClothingBeltMilitaryWebbing
innerClothingSkirt: ClothingUniformJumpskirtOperative
satchel: ClothingBackpackDuffelSyndicateLonelyOperative
duffelbag: ClothingBackpackDuffelSyndicateLonelyOperative


#Nuclear Operative Commander Gear
- type: startingGear
id: SyndicateCommanderGearFull
Expand Down
Loading