Convert NameIdentifier to use NameModifierSystem (#36736)
Convert NameIdentifier to use NameModifierSystem
This commit is contained in:
@@ -1,6 +1,7 @@
|
|||||||
using Content.Client.Stylesheets;
|
using Content.Client.Stylesheets;
|
||||||
using Content.Client.UserInterface.Controls;
|
using Content.Client.UserInterface.Controls;
|
||||||
using Content.Shared.NameIdentifier;
|
using Content.Shared.NameIdentifier;
|
||||||
|
using Content.Shared.NameModifier.EntitySystems;
|
||||||
using Content.Shared.Preferences;
|
using Content.Shared.Preferences;
|
||||||
using Content.Shared.Silicons.Borgs;
|
using Content.Shared.Silicons.Borgs;
|
||||||
using Content.Shared.Silicons.Borgs.Components;
|
using Content.Shared.Silicons.Borgs.Components;
|
||||||
@@ -15,6 +16,7 @@ namespace Content.Client.Silicons.Borgs;
|
|||||||
public sealed partial class BorgMenu : FancyWindow
|
public sealed partial class BorgMenu : FancyWindow
|
||||||
{
|
{
|
||||||
[Dependency] private readonly IEntityManager _entity = default!;
|
[Dependency] private readonly IEntityManager _entity = default!;
|
||||||
|
private readonly NameModifierSystem _nameModifier;
|
||||||
|
|
||||||
public Action? BrainButtonPressed;
|
public Action? BrainButtonPressed;
|
||||||
public Action? EjectBatteryButtonPressed;
|
public Action? EjectBatteryButtonPressed;
|
||||||
@@ -32,6 +34,8 @@ public sealed partial class BorgMenu : FancyWindow
|
|||||||
RobustXamlLoader.Load(this);
|
RobustXamlLoader.Load(this);
|
||||||
IoCManager.InjectDependencies(this);
|
IoCManager.InjectDependencies(this);
|
||||||
|
|
||||||
|
_nameModifier = _entity.System<NameModifierSystem>();
|
||||||
|
|
||||||
_lastValidName = NameLineEdit.Text;
|
_lastValidName = NameLineEdit.Text;
|
||||||
|
|
||||||
EjectBatteryButton.OnPressed += _ => EjectBatteryButtonPressed?.Invoke();
|
EjectBatteryButton.OnPressed += _ => EjectBatteryButtonPressed?.Invoke();
|
||||||
@@ -54,9 +58,7 @@ public sealed partial class BorgMenu : FancyWindow
|
|||||||
NameIdentifierLabel.Visible = true;
|
NameIdentifierLabel.Visible = true;
|
||||||
NameIdentifierLabel.Text = nameIdentifierComponent.FullIdentifier;
|
NameIdentifierLabel.Text = nameIdentifierComponent.FullIdentifier;
|
||||||
|
|
||||||
var fullName = _entity.GetComponent<MetaDataComponent>(Entity).EntityName;
|
NameLineEdit.Text = _nameModifier.GetBaseName(entity);
|
||||||
var name = fullName.Substring(0, fullName.Length - nameIdentifierComponent.FullIdentifier.Length - 1);
|
|
||||||
NameLineEdit.Text = name;
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
using Content.Shared.GameTicking;
|
using Content.Shared.GameTicking;
|
||||||
using Content.Shared.NameIdentifier;
|
using Content.Shared.NameIdentifier;
|
||||||
|
using Content.Shared.NameModifier.EntitySystems;
|
||||||
using Robust.Shared.Collections;
|
using Robust.Shared.Collections;
|
||||||
using Robust.Shared.Prototypes;
|
using Robust.Shared.Prototypes;
|
||||||
using Robust.Shared.Random;
|
using Robust.Shared.Random;
|
||||||
@@ -13,7 +14,7 @@ public sealed class NameIdentifierSystem : EntitySystem
|
|||||||
{
|
{
|
||||||
[Dependency] private readonly IPrototypeManager _prototypeManager = default!;
|
[Dependency] private readonly IPrototypeManager _prototypeManager = default!;
|
||||||
[Dependency] private readonly IRobustRandom _robustRandom = default!;
|
[Dependency] private readonly IRobustRandom _robustRandom = default!;
|
||||||
[Dependency] private readonly MetaDataSystem _metaData = default!;
|
[Dependency] private readonly NameModifierSystem _nameModifier = default!;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Free IDs available per <see cref="NameIdentifierGroupPrototype"/>.
|
/// Free IDs available per <see cref="NameIdentifierGroupPrototype"/>.
|
||||||
@@ -27,6 +28,7 @@ public sealed class NameIdentifierSystem : EntitySystem
|
|||||||
|
|
||||||
SubscribeLocalEvent<NameIdentifierComponent, MapInitEvent>(OnMapInit);
|
SubscribeLocalEvent<NameIdentifierComponent, MapInitEvent>(OnMapInit);
|
||||||
SubscribeLocalEvent<NameIdentifierComponent, ComponentShutdown>(OnComponentShutdown);
|
SubscribeLocalEvent<NameIdentifierComponent, ComponentShutdown>(OnComponentShutdown);
|
||||||
|
SubscribeLocalEvent<NameIdentifierComponent, RefreshNameModifiersEvent>(OnRefreshNameModifiers);
|
||||||
SubscribeLocalEvent<RoundRestartCleanupEvent>(CleanupIds);
|
SubscribeLocalEvent<RoundRestartCleanupEvent>(CleanupIds);
|
||||||
SubscribeLocalEvent<PrototypesReloadedEventArgs>(OnReloadPrototypes);
|
SubscribeLocalEvent<PrototypesReloadedEventArgs>(OnReloadPrototypes);
|
||||||
|
|
||||||
@@ -44,6 +46,7 @@ public sealed class NameIdentifierSystem : EntitySystem
|
|||||||
ids[randomIndex] = component.Identifier;
|
ids[randomIndex] = component.Identifier;
|
||||||
ids.Add(random);
|
ids.Add(random);
|
||||||
}
|
}
|
||||||
|
_nameModifier.RefreshNameModifiers(uid);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -108,12 +111,22 @@ public sealed class NameIdentifierSystem : EntitySystem
|
|||||||
? uniqueName
|
? uniqueName
|
||||||
: $"({uniqueName})";
|
: $"({uniqueName})";
|
||||||
|
|
||||||
var meta = MetaData(uid);
|
|
||||||
// "DR-1234" as opposed to "drone (DR-1234)"
|
|
||||||
_metaData.SetEntityName(uid, group.FullName
|
|
||||||
? uniqueName
|
|
||||||
: $"{meta.EntityName} ({uniqueName})", meta);
|
|
||||||
Dirty(uid, component);
|
Dirty(uid, component);
|
||||||
|
_nameModifier.RefreshNameModifiers(uid);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OnRefreshNameModifiers(Entity<NameIdentifierComponent> ent, ref RefreshNameModifiersEvent args)
|
||||||
|
{
|
||||||
|
// Don't apply the modifier if the component is being removed
|
||||||
|
if (ent.Comp.LifeStage > ComponentLifeStage.Running)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (!_prototypeManager.TryIndex<NameIdentifierGroupPrototype>(ent.Comp.Group, out var group))
|
||||||
|
return;
|
||||||
|
var format = group.FullName ? "name-identifier-format-full" : "name-identifier-format-append";
|
||||||
|
// We apply the modifier with a low priority to keep it near the base name
|
||||||
|
// "Beep (Si-4562) the zombie" instead of "Beep the zombie (Si-4562)"
|
||||||
|
args.AddModifier(format, -10, ("identifier", ent.Comp.FullIdentifier));
|
||||||
}
|
}
|
||||||
|
|
||||||
private void InitialSetupPrototypes()
|
private void InitialSetupPrototypes()
|
||||||
|
|||||||
@@ -62,8 +62,6 @@ public sealed partial class BorgSystem
|
|||||||
}
|
}
|
||||||
|
|
||||||
var name = args.Name.Trim();
|
var name = args.Name.Trim();
|
||||||
if (TryComp<NameIdentifierComponent>(uid, out var identifier))
|
|
||||||
name = $"{name} {identifier.FullIdentifier}";
|
|
||||||
|
|
||||||
var metaData = MetaData(uid);
|
var metaData = MetaData(uid);
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,2 @@
|
|||||||
|
name-identifier-format-append = {$baseName} {$identifier}
|
||||||
|
name-identifier-format-full = {$identifier}
|
||||||
Reference in New Issue
Block a user