Anomaly Synchronizer + Signallers tweaks (#24461)
* content * nerf * fix rsi
This commit is contained in:
@@ -25,8 +25,6 @@ public sealed partial class AnomalySynchronizerSystem : EntitySystem
|
|||||||
[Dependency] private readonly SharedPopupSystem _popup = default!;
|
[Dependency] private readonly SharedPopupSystem _popup = default!;
|
||||||
[Dependency] private readonly PowerReceiverSystem _power = default!;
|
[Dependency] private readonly PowerReceiverSystem _power = default!;
|
||||||
|
|
||||||
private const float AttachRange = 0.15f; // The radius of one tile. It must not be set higher, otherwise the anomaly can be moved from tile to tile.
|
|
||||||
|
|
||||||
public override void Initialize()
|
public override void Initialize()
|
||||||
{
|
{
|
||||||
base.Initialize();
|
base.Initialize();
|
||||||
@@ -55,9 +53,9 @@ public sealed partial class AnomalySynchronizerSystem : EntitySystem
|
|||||||
}
|
}
|
||||||
|
|
||||||
var coords = _transform.GetMapCoordinates(ent);
|
var coords = _transform.GetMapCoordinates(ent);
|
||||||
var anomaly = _entityLookup.GetEntitiesInRange<AnomalyComponent>(coords, AttachRange).FirstOrDefault();
|
var anomaly = _entityLookup.GetEntitiesInRange<AnomalyComponent>(coords, ent.Comp.AttachRange).FirstOrDefault();
|
||||||
|
|
||||||
if (anomaly.Owner is {Valid: false}) // no anomaly in range
|
if (anomaly.Owner is { Valid: false }) // no anomaly in range
|
||||||
{
|
{
|
||||||
if (user is not null)
|
if (user is not null)
|
||||||
_popup.PopupEntity(Loc.GetString("anomaly-sync-no-anomaly"), ent, user.Value);
|
_popup.PopupEntity(Loc.GetString("anomaly-sync-no-anomaly"), ent, user.Value);
|
||||||
@@ -77,7 +75,6 @@ public sealed partial class AnomalySynchronizerSystem : EntitySystem
|
|||||||
if (!TryComp<AnomalyComponent>(ent.Comp.ConnectedAnomaly, out var anomaly))
|
if (!TryComp<AnomalyComponent>(ent.Comp.ConnectedAnomaly, out var anomaly))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
_anomaly.DoAnomalyPulse(ent.Comp.ConnectedAnomaly.Value, anomaly);
|
|
||||||
DisconneсtFromAnomaly(ent, anomaly);
|
DisconneсtFromAnomaly(ent, anomaly);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -92,7 +89,8 @@ public sealed partial class AnomalySynchronizerSystem : EntitySystem
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
var user = args.User;
|
var user = args.User;
|
||||||
args.Verbs.Add(new() {
|
args.Verbs.Add(new()
|
||||||
|
{
|
||||||
Act = () =>
|
Act = () =>
|
||||||
{
|
{
|
||||||
TryAttachNearbyAnomaly(ent, user);
|
TryAttachNearbyAnomaly(ent, user);
|
||||||
@@ -117,7 +115,9 @@ public sealed partial class AnomalySynchronizerSystem : EntitySystem
|
|||||||
var targetXform = _transform.GetWorldPosition(ent);
|
var targetXform = _transform.GetWorldPosition(ent);
|
||||||
_transform.SetWorldPosition(anomaly, targetXform);
|
_transform.SetWorldPosition(anomaly, targetXform);
|
||||||
|
|
||||||
_anomaly.DoAnomalyPulse(anomaly, anomaly);
|
if (ent.Comp.PulseOnConnect)
|
||||||
|
_anomaly.DoAnomalyPulse(anomaly, anomaly);
|
||||||
|
|
||||||
_popup.PopupEntity(Loc.GetString("anomaly-sync-connected"), ent, PopupType.Medium);
|
_popup.PopupEntity(Loc.GetString("anomaly-sync-connected"), ent, PopupType.Medium);
|
||||||
_audio.PlayPvs(ent.Comp.ConnectedSound, ent);
|
_audio.PlayPvs(ent.Comp.ConnectedSound, ent);
|
||||||
}
|
}
|
||||||
@@ -129,7 +129,9 @@ public sealed partial class AnomalySynchronizerSystem : EntitySystem
|
|||||||
if (ent.Comp.ConnectedAnomaly == null)
|
if (ent.Comp.ConnectedAnomaly == null)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
_anomaly.DoAnomalyPulse(ent.Comp.ConnectedAnomaly.Value, anomaly);
|
if (ent.Comp.PulseOnDisconnect)
|
||||||
|
_anomaly.DoAnomalyPulse(ent.Comp.ConnectedAnomaly.Value, anomaly);
|
||||||
|
|
||||||
_popup.PopupEntity(Loc.GetString("anomaly-sync-disconnected"), ent, PopupType.Large);
|
_popup.PopupEntity(Loc.GetString("anomaly-sync-disconnected"), ent, PopupType.Large);
|
||||||
_audio.PlayPvs(ent.Comp.ConnectedSound, ent);
|
_audio.PlayPvs(ent.Comp.ConnectedSound, ent);
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,3 @@
|
|||||||
using Content.Shared.Anomaly;
|
|
||||||
using Content.Shared.Anomaly.Components;
|
|
||||||
using Content.Shared.DeviceLinking;
|
using Content.Shared.DeviceLinking;
|
||||||
using Robust.Shared.Audio;
|
using Robust.Shared.Audio;
|
||||||
using Robust.Shared.Prototypes;
|
using Robust.Shared.Prototypes;
|
||||||
@@ -18,6 +16,23 @@ public sealed partial class AnomalySynchronizerComponent : Component
|
|||||||
[DataField, ViewVariables(VVAccess.ReadWrite)]
|
[DataField, ViewVariables(VVAccess.ReadWrite)]
|
||||||
public EntityUid? ConnectedAnomaly;
|
public EntityUid? ConnectedAnomaly;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Should the anomaly pulse when connected to the synchronizer?
|
||||||
|
/// </summary>
|
||||||
|
[DataField]
|
||||||
|
public bool PulseOnConnect = true;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Should the anomaly pulse when disconnected from synchronizer?
|
||||||
|
/// </summary>
|
||||||
|
[DataField]
|
||||||
|
public bool PulseOnDisconnect = false;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// minimum distance from the synchronizer to the anomaly to be attached
|
||||||
|
/// </summary>
|
||||||
|
[DataField]
|
||||||
|
public float AttachRange = 0.4f;
|
||||||
|
|
||||||
[DataField]
|
[DataField]
|
||||||
public ProtoId<SourcePortPrototype> DecayingPort = "Decaying";
|
public ProtoId<SourcePortPrototype> DecayingPort = "Decaying";
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
parent: BaseItem
|
parent: BaseItem
|
||||||
id: RemoteSignaller
|
id: RemoteSignaller
|
||||||
name: remote signaller
|
name: remote signaller
|
||||||
description: A handheld device used for remotely sending signals to objects.
|
description: A handheld device used for remotely sending signals to objects within a small radius of about 15 meters.
|
||||||
components:
|
components:
|
||||||
- type: Sprite
|
- type: Sprite
|
||||||
sprite: Objects/Devices/signaller.rsi
|
sprite: Objects/Devices/signaller.rsi
|
||||||
@@ -19,3 +19,21 @@
|
|||||||
- type: Tag
|
- type: Tag
|
||||||
tags:
|
tags:
|
||||||
- Payload
|
- Payload
|
||||||
|
- type: DeviceNetwork
|
||||||
|
deviceNetId: Wireless
|
||||||
|
receiveFrequencyId: BasicDevice
|
||||||
|
- type: WirelessNetworkConnection
|
||||||
|
range: 15
|
||||||
|
|
||||||
|
- type: entity
|
||||||
|
parent: RemoteSignaller
|
||||||
|
id: RemoteSignallerAdvanced
|
||||||
|
name: advanced remote signaller
|
||||||
|
description: A handheld device used for remotely sending signals to objects within a small radius of about 50 meters.
|
||||||
|
components:
|
||||||
|
- type: Sprite
|
||||||
|
state: signaller2
|
||||||
|
- type: WirelessNetworkConnection
|
||||||
|
range: 50
|
||||||
|
- type: StaticPrice
|
||||||
|
price: 30
|
||||||
@@ -10,7 +10,7 @@
|
|||||||
- type: DeviceNetwork
|
- type: DeviceNetwork
|
||||||
deviceNetId: Wireless
|
deviceNetId: Wireless
|
||||||
- type: WirelessNetworkConnection
|
- type: WirelessNetworkConnection
|
||||||
range: 300
|
range: 100
|
||||||
- type: DeviceNetworkRequiresPower
|
- type: DeviceNetworkRequiresPower
|
||||||
- type: DeviceLinkSource
|
- type: DeviceLinkSource
|
||||||
ports:
|
ports:
|
||||||
@@ -39,19 +39,15 @@
|
|||||||
shape:
|
shape:
|
||||||
!type:PhysShapeAabb
|
!type:PhysShapeAabb
|
||||||
bounds: "-0.35,-0.35,0.35,0.35"
|
bounds: "-0.35,-0.35,0.35,0.35"
|
||||||
density: 190
|
density: 100
|
||||||
mask:
|
mask:
|
||||||
- MachineMask
|
- ItemMask
|
||||||
layer:
|
hard: True
|
||||||
- Impassable
|
|
||||||
- MidImpassable
|
|
||||||
- LowImpassable
|
|
||||||
hard: False
|
|
||||||
- type: Transform
|
- type: Transform
|
||||||
anchored: true
|
anchored: true
|
||||||
noRot: false
|
noRot: false
|
||||||
- type: ApcPowerReceiver
|
- type: ApcPowerReceiver
|
||||||
powerLoad: 15000
|
powerLoad: 2500
|
||||||
needsPower: true
|
needsPower: true
|
||||||
- type: ItemPlacer
|
- type: ItemPlacer
|
||||||
whitelist:
|
whitelist:
|
||||||
|
|||||||
@@ -286,6 +286,7 @@
|
|||||||
- ChemicalPayload
|
- ChemicalPayload
|
||||||
- FlashPayload
|
- FlashPayload
|
||||||
- Signaller
|
- Signaller
|
||||||
|
- SignallerAdvanced
|
||||||
- SignalTrigger
|
- SignalTrigger
|
||||||
- VoiceTrigger
|
- VoiceTrigger
|
||||||
- Igniter
|
- Igniter
|
||||||
|
|||||||
@@ -76,6 +76,16 @@
|
|||||||
Steel: 100
|
Steel: 100
|
||||||
Plastic: 200
|
Plastic: 200
|
||||||
Glass: 100
|
Glass: 100
|
||||||
|
|
||||||
|
- type: latheRecipe
|
||||||
|
id: SignallerAdvanced
|
||||||
|
result: RemoteSignallerAdvanced
|
||||||
|
category: Parts
|
||||||
|
completetime: 2
|
||||||
|
materials:
|
||||||
|
Steel: 100
|
||||||
|
Plastic: 200
|
||||||
|
Plasma: 100
|
||||||
|
|
||||||
- type: latheRecipe
|
- type: latheRecipe
|
||||||
id: AnomalyLocator
|
id: AnomalyLocator
|
||||||
|
|||||||
@@ -44,7 +44,8 @@
|
|||||||
tier: 1
|
tier: 1
|
||||||
cost: 7500
|
cost: 7500
|
||||||
recipeUnlocks:
|
recipeUnlocks:
|
||||||
- Signaller
|
- Signaller
|
||||||
|
- SignallerAdvanced
|
||||||
- SignalTrigger
|
- SignalTrigger
|
||||||
- VoiceTrigger
|
- VoiceTrigger
|
||||||
- TimerTrigger
|
- TimerTrigger
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
"version": 1,
|
"version": 1,
|
||||||
|
|
||||||
"license": "CC-BY-SA-3.0",
|
"license": "CC-BY-SA-3.0",
|
||||||
"copyright": "Taken from Goonstation at commit https://github.com/goonstation/goonstation/commit/354d9635460c296dc7dce23ab39481dc4de6dc00",
|
"copyright": "Taken from Goonstation at commit https://github.com/goonstation/goonstation/commit/354d9635460c296dc7dce23ab39481dc4de6dc00, signaller2 created by TheShuEd",
|
||||||
|
|
||||||
"size": {
|
"size": {
|
||||||
"x": 32,
|
"x": 32,
|
||||||
@@ -12,6 +12,10 @@
|
|||||||
{
|
{
|
||||||
"name": "signaller",
|
"name": "signaller",
|
||||||
"directions": 1
|
"directions": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "signaller2",
|
||||||
|
"directions": 1
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
BIN
Resources/Textures/Objects/Devices/signaller.rsi/signaller2.png
Normal file
BIN
Resources/Textures/Objects/Devices/signaller.rsi/signaller2.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 461 B |
Reference in New Issue
Block a user