Add navmap beacon to armed nukes (#20394)
This commit is contained in:
@@ -2,6 +2,7 @@ using Content.Server.AlertLevel;
|
|||||||
using Content.Server.Audio;
|
using Content.Server.Audio;
|
||||||
using Content.Server.Chat.Systems;
|
using Content.Server.Chat.Systems;
|
||||||
using Content.Server.Explosion.EntitySystems;
|
using Content.Server.Explosion.EntitySystems;
|
||||||
|
using Content.Server.Pinpointer;
|
||||||
using Content.Server.Popups;
|
using Content.Server.Popups;
|
||||||
using Content.Server.Station.Systems;
|
using Content.Server.Station.Systems;
|
||||||
using Content.Shared.Audio;
|
using Content.Shared.Audio;
|
||||||
@@ -29,6 +30,7 @@ public sealed class NukeSystem : EntitySystem
|
|||||||
[Dependency] private readonly IRobustRandom _random = default!;
|
[Dependency] private readonly IRobustRandom _random = default!;
|
||||||
[Dependency] private readonly ITileDefinitionManager _tileDefManager = default!;
|
[Dependency] private readonly ITileDefinitionManager _tileDefManager = default!;
|
||||||
[Dependency] private readonly ItemSlotsSystem _itemSlots = default!;
|
[Dependency] private readonly ItemSlotsSystem _itemSlots = default!;
|
||||||
|
[Dependency] private readonly NavMapSystem _navMap = default!;
|
||||||
[Dependency] private readonly PointLightSystem _pointLight = default!;
|
[Dependency] private readonly PointLightSystem _pointLight = default!;
|
||||||
[Dependency] private readonly PopupSystem _popups = default!;
|
[Dependency] private readonly PopupSystem _popups = default!;
|
||||||
[Dependency] private readonly ServerGlobalSoundSystem _sound = default!;
|
[Dependency] private readonly ServerGlobalSoundSystem _sound = default!;
|
||||||
@@ -458,6 +460,8 @@ public sealed class NukeSystem : EntitySystem
|
|||||||
|
|
||||||
// turn on the spinny light
|
// turn on the spinny light
|
||||||
_pointLight.SetEnabled(uid, true);
|
_pointLight.SetEnabled(uid, true);
|
||||||
|
// enable the navmap beacon for people to find it
|
||||||
|
_navMap.SetBeaconEnabled(uid, true);
|
||||||
|
|
||||||
_itemSlots.SetLock(uid, component.DiskSlot, true);
|
_itemSlots.SetLock(uid, component.DiskSlot, true);
|
||||||
if (!nukeXform.Anchored)
|
if (!nukeXform.Anchored)
|
||||||
@@ -500,6 +504,8 @@ public sealed class NukeSystem : EntitySystem
|
|||||||
|
|
||||||
// turn off the spinny light
|
// turn off the spinny light
|
||||||
_pointLight.SetEnabled(uid, false);
|
_pointLight.SetEnabled(uid, false);
|
||||||
|
// disable the navmap beacon now that its disarmed
|
||||||
|
_navMap.SetBeaconEnabled(uid, false);
|
||||||
|
|
||||||
// start bomb cooldown
|
// start bomb cooldown
|
||||||
_itemSlots.SetLock(uid, component.DiskSlot, false);
|
_itemSlots.SetLock(uid, component.DiskSlot, false);
|
||||||
|
|||||||
@@ -130,7 +130,7 @@ public sealed class NavMapSystem : SharedNavMapSystem
|
|||||||
|
|
||||||
while (beaconQuery.MoveNext(out var beaconUid, out var beacon, out var xform))
|
while (beaconQuery.MoveNext(out var beaconUid, out var beacon, out var xform))
|
||||||
{
|
{
|
||||||
if (xform.GridUid != uid || !CanBeacon(beaconUid, xform))
|
if (!beacon.Enabled || xform.GridUid != uid || !CanBeacon(beaconUid, xform))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
// TODO: Make warp points use metadata name instead.
|
// TODO: Make warp points use metadata name instead.
|
||||||
@@ -236,4 +236,28 @@ public sealed class NavMapSystem : SharedNavMapSystem
|
|||||||
|
|
||||||
Dirty(component);
|
Dirty(component);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Sets the beacon's Enabled field and refreshes the grid.
|
||||||
|
/// </summary>
|
||||||
|
public void SetBeaconEnabled(EntityUid uid, bool enabled, NavMapBeaconComponent? comp = null)
|
||||||
|
{
|
||||||
|
if (!Resolve(uid, ref comp) || comp.Enabled == enabled)
|
||||||
|
return;
|
||||||
|
|
||||||
|
comp.Enabled = enabled;
|
||||||
|
|
||||||
|
RefreshNavGrid(uid);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Toggles the beacon's Enabled field and refreshes the grid.
|
||||||
|
/// </summary>
|
||||||
|
public void ToggleBeacon(EntityUid uid, NavMapBeaconComponent? comp = null)
|
||||||
|
{
|
||||||
|
if (!Resolve(uid, ref comp))
|
||||||
|
return;
|
||||||
|
|
||||||
|
SetBeaconEnabled(uid, !comp.Enabled, comp);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,15 +5,21 @@ namespace Content.Shared.Pinpointer;
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Will show a marker on a NavMap.
|
/// Will show a marker on a NavMap.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[RegisterComponent, NetworkedComponent, AutoGenerateComponentState]
|
[RegisterComponent, Access(typeof(SharedNavMapSystem))]
|
||||||
public sealed partial class NavMapBeaconComponent : Component
|
public sealed partial class NavMapBeaconComponent : Component
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Defaults to entity name if nothing found.
|
/// Defaults to entity name if nothing found.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[ViewVariables(VVAccess.ReadWrite), DataField("text"), AutoNetworkedField]
|
[ViewVariables(VVAccess.ReadWrite), DataField]
|
||||||
public string? Text;
|
public string? Text;
|
||||||
|
|
||||||
[ViewVariables(VVAccess.ReadWrite), DataField("color"), AutoNetworkedField]
|
[ViewVariables(VVAccess.ReadWrite), DataField]
|
||||||
public Color Color = Color.Orange;
|
public Color Color = Color.Orange;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Only enabled beacons can be seen on a station map.
|
||||||
|
/// </summary>
|
||||||
|
[ViewVariables(VVAccess.ReadWrite), DataField]
|
||||||
|
public bool Enabled = true;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -31,6 +31,10 @@
|
|||||||
mask: /Textures/Effects/LightMasks/double_cone.png
|
mask: /Textures/Effects/LightMasks/double_cone.png
|
||||||
- type: RotatingLight
|
- type: RotatingLight
|
||||||
speed: 120
|
speed: 120
|
||||||
|
- type: NavMapBeacon
|
||||||
|
color: "#ff0000"
|
||||||
|
text: nuclear fission explosive
|
||||||
|
enabled: false
|
||||||
- type: NukeLabel
|
- type: NukeLabel
|
||||||
- type: Nuke
|
- type: Nuke
|
||||||
explosionType: Default
|
explosionType: Default
|
||||||
|
|||||||
Reference in New Issue
Block a user