Fix ChemMaster labelling behavior (#11290)
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
using System.Diagnostics.CodeAnalysis;
|
||||
using System.Linq;
|
||||
using Content.Server.Chemistry.Components;
|
||||
using Content.Server.Labels;
|
||||
using Content.Server.Labels.Components;
|
||||
using Content.Server.Popups;
|
||||
using Content.Server.Storage.Components;
|
||||
@@ -33,6 +34,7 @@ namespace Content.Server.Chemistry.EntitySystems
|
||||
[Dependency] private readonly ItemSlotsSystem _itemSlotsSystem = default!;
|
||||
[Dependency] private readonly UserInterfaceSystem _userInterfaceSystem = default!;
|
||||
[Dependency] private readonly StorageSystem _storageSystem = default!;
|
||||
[Dependency] private readonly LabelSystem _labelSystem = default!;
|
||||
|
||||
private const string PillPrototypeId = "Pill";
|
||||
|
||||
@@ -191,13 +193,13 @@ namespace Content.Server.Chemistry.EntitySystems
|
||||
if (!WithdrawFromBuffer(chemMaster, needed, user, out var withdrawal))
|
||||
return;
|
||||
|
||||
Label(container, message.Label);
|
||||
_labelSystem.Label(container, message.Label);
|
||||
|
||||
for (var i = 0; i < message.Number; i++)
|
||||
{
|
||||
var item = Spawn(PillPrototypeId, Transform(container).Coordinates);
|
||||
_storageSystem.Insert(container, item, storage);
|
||||
Label(item, message.Label);
|
||||
_labelSystem.Label(item, message.Label);
|
||||
|
||||
var itemSolution = _solutionContainerSystem.EnsureSolution(item, SharedChemMaster.PillSolutionName);
|
||||
|
||||
@@ -231,7 +233,7 @@ namespace Content.Server.Chemistry.EntitySystems
|
||||
if (!WithdrawFromBuffer(chemMaster, message.Dosage, user, out var withdrawal))
|
||||
return;
|
||||
|
||||
Label(container, message.Label);
|
||||
_labelSystem.Label(container, message.Label);
|
||||
_solutionContainerSystem.TryAddSolution(
|
||||
container, solution, withdrawal);
|
||||
|
||||
@@ -270,18 +272,6 @@ namespace Content.Server.Chemistry.EntitySystems
|
||||
return true;
|
||||
}
|
||||
|
||||
private void Label(EntityUid ent, string label)
|
||||
{
|
||||
if (string.IsNullOrEmpty(label))
|
||||
return;
|
||||
var labelComponent = EnsureComp<LabelComponent>(ent);
|
||||
|
||||
labelComponent.OriginalName = Name(ent);
|
||||
var val = Name(ent) + $" ({label})";
|
||||
MetaData(ent).EntityName = val;
|
||||
labelComponent.CurrentLabel = label;
|
||||
}
|
||||
|
||||
private void ClickSound(ChemMasterComponent chemMaster)
|
||||
{
|
||||
_audioSystem.Play(chemMaster.ClickSound, Filter.Pvs(chemMaster.Owner), chemMaster.Owner, AudioParams.Default.WithVolume(-2f));
|
||||
|
||||
@@ -15,6 +15,7 @@ namespace Content.Server.Labels
|
||||
public sealed class HandLabelerSystem : EntitySystem
|
||||
{
|
||||
[Dependency] private readonly UserInterfaceSystem _userInterfaceSystem = default!;
|
||||
[Dependency] private readonly LabelSystem _labelSystem = default!;
|
||||
|
||||
public override void Initialize()
|
||||
{
|
||||
@@ -44,23 +45,14 @@ namespace Content.Server.Labels
|
||||
return;
|
||||
}
|
||||
|
||||
LabelComponent label = target.EnsureComponent<LabelComponent>();
|
||||
|
||||
if (label.OriginalName != null)
|
||||
EntityManager.GetComponent<MetaDataComponent>(target).EntityName = label.OriginalName;
|
||||
label.OriginalName = null;
|
||||
|
||||
if (handLabeler.AssignedLabel == string.Empty)
|
||||
{
|
||||
label.CurrentLabel = null;
|
||||
_labelSystem.Label(target, null);
|
||||
result = Loc.GetString("hand-labeler-successfully-removed");
|
||||
return;
|
||||
}
|
||||
|
||||
label.OriginalName = EntityManager.GetComponent<MetaDataComponent>(target).EntityName;
|
||||
string val = EntityManager.GetComponent<MetaDataComponent>(target).EntityName + $" ({handLabeler.AssignedLabel})";
|
||||
EntityManager.GetComponent<MetaDataComponent>(target).EntityName = val;
|
||||
label.CurrentLabel = handLabeler.AssignedLabel;
|
||||
_labelSystem.Label(target, handLabeler.AssignedLabel);
|
||||
result = Loc.GetString("hand-labeler-successfully-applied");
|
||||
}
|
||||
|
||||
|
||||
@@ -31,6 +31,39 @@ namespace Content.Server.Labels
|
||||
SubscribeLocalEvent<PaperLabelComponent, ExaminedEvent>(OnExamined);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Apply or remove a label on an entity.
|
||||
/// </summary>
|
||||
/// <param name="uid">EntityUid to change label on</param>
|
||||
/// <param name="text">intended label text (null to remove)</param>
|
||||
/// <param name="label">label component for resolve</param>
|
||||
/// <param name="metadata">metadata component for resolve</param>
|
||||
public void Label(EntityUid uid, string? text, MetaDataComponent? metadata = null, LabelComponent? label = null)
|
||||
{
|
||||
if (!Resolve(uid, ref metadata))
|
||||
return;
|
||||
if (!Resolve(uid, ref label, false))
|
||||
label = EnsureComp<LabelComponent>(uid);
|
||||
|
||||
if (string.IsNullOrEmpty(text))
|
||||
{
|
||||
if (label.OriginalName is null)
|
||||
return;
|
||||
|
||||
// Remove label
|
||||
metadata.EntityName = label.OriginalName;
|
||||
label.CurrentLabel = null;
|
||||
label.OriginalName = null;
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
// Update label
|
||||
label.OriginalName ??= metadata.EntityName;
|
||||
label.CurrentLabel = text;
|
||||
metadata.EntityName = $"{label.OriginalName} ({text})";
|
||||
}
|
||||
|
||||
private void OnComponentInit(EntityUid uid, PaperLabelComponent component, ComponentInit args)
|
||||
{
|
||||
_itemSlotsSystem.AddItemSlot(uid, ContainerName, component.LabelSlot);
|
||||
|
||||
Reference in New Issue
Block a user