feat: смена значков в консоли ID карт
This commit is contained in:
@@ -42,7 +42,9 @@ namespace Content.Client.Access.UI
|
|||||||
};
|
};
|
||||||
|
|
||||||
_window.CrewManifestButton.OnPressed += _ => SendMessage(new CrewManifestOpenUiMessage());
|
_window.CrewManifestButton.OnPressed += _ => SendMessage(new CrewManifestOpenUiMessage());
|
||||||
_window.PrivilegedIdButton.OnPressed += _ => SendMessage(new ItemSlotButtonPressedEvent(PrivilegedIdCardSlotId));
|
_window.PrivilegedIdButton.OnPressed +=
|
||||||
|
_ => SendMessage(new ItemSlotButtonPressedEvent(PrivilegedIdCardSlotId));
|
||||||
|
|
||||||
_window.TargetIdButton.OnPressed += _ => SendMessage(new ItemSlotButtonPressedEvent(TargetIdCardSlotId));
|
_window.TargetIdButton.OnPressed += _ => SendMessage(new ItemSlotButtonPressedEvent(TargetIdCardSlotId));
|
||||||
|
|
||||||
_window.OnClose += Close;
|
_window.OnClose += Close;
|
||||||
@@ -65,7 +67,12 @@ namespace Content.Client.Access.UI
|
|||||||
_window?.UpdateState(castState);
|
_window?.UpdateState(castState);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void SubmitData(string newFullName, string newJobTitle, List<string> newAccessList, string newJobPrototype)
|
public void SubmitData(
|
||||||
|
string newFullName,
|
||||||
|
string newJobTitle,
|
||||||
|
List<string> newAccessList,
|
||||||
|
string newJobPrototype,
|
||||||
|
string? newJobIcon)
|
||||||
{
|
{
|
||||||
if (newFullName.Length > MaxFullNameLength)
|
if (newFullName.Length > MaxFullNameLength)
|
||||||
newFullName = newFullName[..MaxFullNameLength];
|
newFullName = newFullName[..MaxFullNameLength];
|
||||||
@@ -77,7 +84,8 @@ namespace Content.Client.Access.UI
|
|||||||
newFullName,
|
newFullName,
|
||||||
newJobTitle,
|
newJobTitle,
|
||||||
newAccessList,
|
newAccessList,
|
||||||
newJobPrototype));
|
newJobPrototype,
|
||||||
|
newJobIcon));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,14 +1,14 @@
|
|||||||
<DefaultWindow xmlns="https://spacestation14.io"
|
<DefaultWindow xmlns="https://spacestation14.io"
|
||||||
MinSize="650 290">
|
MinSize="650 290">
|
||||||
<BoxContainer Orientation="Vertical">
|
<BoxContainer Orientation="Vertical">
|
||||||
<GridContainer Columns="2">
|
<GridContainer Columns="2">
|
||||||
<GridContainer Columns="3" HorizontalExpand="True">
|
<GridContainer Columns="3" HorizontalExpand="True">
|
||||||
<Label Text="{Loc 'id-card-console-window-privileged-id'}" />
|
<Label Text="{Loc 'id-card-console-window-privileged-id'}" />
|
||||||
<Button Name="PrivilegedIdButton" Access="Public"/>
|
<Button Name="PrivilegedIdButton" Access="Public" />
|
||||||
<Label Name="PrivilegedIdLabel" />
|
<Label Name="PrivilegedIdLabel" />
|
||||||
|
|
||||||
<Label Text="{Loc 'id-card-console-window-target-id'}" />
|
<Label Text="{Loc 'id-card-console-window-target-id'}" />
|
||||||
<Button Name="TargetIdButton" Access="Public"/>
|
<Button Name="TargetIdButton" Access="Public" />
|
||||||
<Label Name="TargetIdLabel" />
|
<Label Name="TargetIdLabel" />
|
||||||
</GridContainer>
|
</GridContainer>
|
||||||
<BoxContainer Orientation="Vertical">
|
<BoxContainer Orientation="Vertical">
|
||||||
@@ -35,5 +35,13 @@
|
|||||||
<!-- Access level buttons are added here by the C# code -->
|
<!-- Access level buttons are added here by the C# code -->
|
||||||
|
|
||||||
</GridContainer>
|
</GridContainer>
|
||||||
|
<!-- WD EDIT -->
|
||||||
|
<GridContainer Name="CurrentJobIcon" Columns="2">
|
||||||
|
<Label Text="Текущая выбранная иконка для роли: " />
|
||||||
|
</GridContainer>
|
||||||
|
<GridContainer Name="JobIconsGrid" Columns="10" HorizontalAlignment="Center">
|
||||||
|
<!-- Job icon buttons are generated in the code -->
|
||||||
|
</GridContainer>
|
||||||
|
<!-- WD EDIT END -->
|
||||||
</BoxContainer>
|
</BoxContainer>
|
||||||
</DefaultWindow>
|
</DefaultWindow>
|
||||||
|
|||||||
@@ -1,12 +1,16 @@
|
|||||||
using System.Linq;
|
using System.Linq;
|
||||||
|
using System.Numerics;
|
||||||
using Content.Shared.Access;
|
using Content.Shared.Access;
|
||||||
|
using Content.Shared.Access.Components;
|
||||||
using Content.Shared.Access.Systems;
|
using Content.Shared.Access.Systems;
|
||||||
using Content.Shared.Roles;
|
using Content.Shared.Roles;
|
||||||
using Robust.Client.AutoGenerated;
|
using Robust.Client.AutoGenerated;
|
||||||
|
using Robust.Client.ResourceManagement;
|
||||||
using Robust.Client.UserInterface.Controls;
|
using Robust.Client.UserInterface.Controls;
|
||||||
using Robust.Client.UserInterface.CustomControls;
|
using Robust.Client.UserInterface.CustomControls;
|
||||||
using Robust.Client.UserInterface.XAML;
|
using Robust.Client.UserInterface.XAML;
|
||||||
using Robust.Shared.Prototypes;
|
using Robust.Shared.Prototypes;
|
||||||
|
using Robust.Shared.Utility;
|
||||||
using static Content.Shared.Access.Components.IdCardConsoleComponent;
|
using static Content.Shared.Access.Components.IdCardConsoleComponent;
|
||||||
|
|
||||||
namespace Content.Client.Access.UI
|
namespace Content.Client.Access.UI
|
||||||
@@ -16,18 +20,24 @@ namespace Content.Client.Access.UI
|
|||||||
{
|
{
|
||||||
[Dependency] private readonly IPrototypeManager _prototypeManager = default!;
|
[Dependency] private readonly IPrototypeManager _prototypeManager = default!;
|
||||||
[Dependency] private readonly ILogManager _logManager = default!;
|
[Dependency] private readonly ILogManager _logManager = default!;
|
||||||
|
[Dependency] private readonly IResourceCache _resource = default!; //WD-EDIT
|
||||||
|
[Dependency] private readonly IEntityManager _entityManager = default!; //WD-EDIT
|
||||||
private readonly ISawmill _logMill = default!;
|
private readonly ISawmill _logMill = default!;
|
||||||
|
|
||||||
private readonly IdCardConsoleBoundUserInterface _owner;
|
private readonly IdCardConsoleBoundUserInterface _owner;
|
||||||
|
|
||||||
private readonly Dictionary<string, Button> _accessButtons = new();
|
private readonly Dictionary<string, Button> _accessButtons = new();
|
||||||
|
private readonly Dictionary<string, TextureButton> _jobIconButtons = new(); //WD-EDIT
|
||||||
private readonly List<string> _jobPrototypeIds = new();
|
private readonly List<string> _jobPrototypeIds = new();
|
||||||
|
|
||||||
private string? _lastFullName;
|
private string? _lastFullName;
|
||||||
private string? _lastJobTitle;
|
private string? _lastJobTitle;
|
||||||
private string? _lastJobProto;
|
private string? _lastJobProto;
|
||||||
|
private string? _lastJobIcon; //WD-EDIT
|
||||||
|
|
||||||
public IdCardConsoleWindow(IdCardConsoleBoundUserInterface owner, IPrototypeManager prototypeManager,
|
public IdCardConsoleWindow(
|
||||||
|
IdCardConsoleBoundUserInterface owner,
|
||||||
|
IPrototypeManager prototypeManager,
|
||||||
List<ProtoId<AccessLevelPrototype>> accessLevels)
|
List<ProtoId<AccessLevelPrototype>> accessLevels)
|
||||||
{
|
{
|
||||||
RobustXamlLoader.Load(this);
|
RobustXamlLoader.Load(this);
|
||||||
@@ -41,6 +51,7 @@ namespace Content.Client.Access.UI
|
|||||||
{
|
{
|
||||||
FullNameSaveButton.Disabled = FullNameSaveButton.Text == _lastFullName;
|
FullNameSaveButton.Disabled = FullNameSaveButton.Text == _lastFullName;
|
||||||
};
|
};
|
||||||
|
|
||||||
FullNameSaveButton.OnPressed += _ => SubmitData();
|
FullNameSaveButton.OnPressed += _ => SubmitData();
|
||||||
|
|
||||||
JobTitleLineEdit.OnTextEntered += _ => SubmitData();
|
JobTitleLineEdit.OnTextEntered += _ => SubmitData();
|
||||||
@@ -48,6 +59,7 @@ namespace Content.Client.Access.UI
|
|||||||
{
|
{
|
||||||
JobTitleSaveButton.Disabled = JobTitleLineEdit.Text == _lastJobTitle;
|
JobTitleSaveButton.Disabled = JobTitleLineEdit.Text == _lastJobTitle;
|
||||||
};
|
};
|
||||||
|
|
||||||
JobTitleSaveButton.OnPressed += _ => SubmitData();
|
JobTitleSaveButton.OnPressed += _ => SubmitData();
|
||||||
|
|
||||||
var jobs = _prototypeManager.EnumeratePrototypes<JobPrototype>().ToList();
|
var jobs = _prototypeManager.EnumeratePrototypes<JobPrototype>().ToList();
|
||||||
@@ -69,7 +81,7 @@ namespace Content.Client.Access.UI
|
|||||||
|
|
||||||
foreach (var access in accessLevels)
|
foreach (var access in accessLevels)
|
||||||
{
|
{
|
||||||
if (!prototypeManager.TryIndex<AccessLevelPrototype>(access, out var accessLevel))
|
if (!prototypeManager.TryIndex(access, out var accessLevel))
|
||||||
{
|
{
|
||||||
_logMill.Error($"Unable to find accesslevel for {access}");
|
_logMill.Error($"Unable to find accesslevel for {access}");
|
||||||
continue;
|
continue;
|
||||||
@@ -78,19 +90,50 @@ namespace Content.Client.Access.UI
|
|||||||
var newButton = new Button
|
var newButton = new Button
|
||||||
{
|
{
|
||||||
Text = GetAccessLevelName(accessLevel),
|
Text = GetAccessLevelName(accessLevel),
|
||||||
ToggleMode = true,
|
ToggleMode = true
|
||||||
};
|
};
|
||||||
|
|
||||||
_accessButtons.Add(accessLevel.ID, newButton);
|
_accessButtons.Add(accessLevel.ID, newButton);
|
||||||
newButton.OnPressed += _ => SubmitData();
|
newButton.OnPressed += _ => SubmitData();
|
||||||
buttonsToAdd.Add(newButton);
|
buttonsToAdd.Add(newButton);
|
||||||
}
|
}
|
||||||
|
|
||||||
buttonsToAdd.Sort((x,y) => string.Compare(x.Text, y.Text, StringComparison.Ordinal));
|
buttonsToAdd.Sort((x, y) => string.Compare(x.Text, y.Text, StringComparison.Ordinal));
|
||||||
|
|
||||||
foreach (var button in buttonsToAdd)
|
foreach (var button in buttonsToAdd)
|
||||||
{
|
{
|
||||||
AccessLevelGrid.AddChild(button);
|
AccessLevelGrid.AddChild(button);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//WD-EDIT
|
||||||
|
if (!_entityManager.TryGetComponent<IdCardConsoleComponent>(owner.Owner, out var idConsoleComponent))
|
||||||
|
return;
|
||||||
|
|
||||||
|
var path = new ResPath("/Textures/Interface/Misc/job_icons.rsi");
|
||||||
|
_resource.TryGetResource(path, out RSIResource? rsi);
|
||||||
|
if (rsi == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
foreach (var jobIcon in idConsoleComponent.JobIcons)
|
||||||
|
{
|
||||||
|
var newButton = new TextureButton
|
||||||
|
{
|
||||||
|
TextureNormal = rsi.RSI.TryGetState(jobIcon, out var state) ? state.Frame0
|
||||||
|
: rsi.RSI.TryGetState("CustomId", out var customState) ? customState.Frame0
|
||||||
|
: null,
|
||||||
|
Scale = new Vector2(5, 5)
|
||||||
|
};
|
||||||
|
|
||||||
|
_jobIconButtons.Add(jobIcon, newButton);
|
||||||
|
newButton.OnPressed += _ =>
|
||||||
|
{
|
||||||
|
_lastJobIcon = jobIcon;
|
||||||
|
SubmitData();
|
||||||
|
};
|
||||||
|
|
||||||
|
JobIconsGrid.AddChild(newButton);
|
||||||
|
}
|
||||||
|
//WD-EDIT
|
||||||
}
|
}
|
||||||
|
|
||||||
private static string GetAccessLevelName(AccessLevelPrototype prototype)
|
private static string GetAccessLevelName(AccessLevelPrototype prototype)
|
||||||
@@ -149,6 +192,7 @@ namespace Content.Client.Access.UI
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_lastJobIcon = job.Icon;
|
||||||
SubmitData();
|
SubmitData();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -195,11 +239,11 @@ namespace Content.Client.Access.UI
|
|||||||
foreach (var (accessName, button) in _accessButtons)
|
foreach (var (accessName, button) in _accessButtons)
|
||||||
{
|
{
|
||||||
button.Disabled = !interfaceEnabled;
|
button.Disabled = !interfaceEnabled;
|
||||||
if (interfaceEnabled)
|
if (!interfaceEnabled)
|
||||||
{
|
continue;
|
||||||
button.Pressed = state.TargetIdAccessList?.Contains(accessName) ?? false;
|
|
||||||
button.Disabled = (!state.AllowedModifyAccessList?.Contains(accessName)) ?? true;
|
button.Pressed = state.TargetIdAccessList?.Contains(accessName) ?? false;
|
||||||
}
|
button.Disabled = !state.AllowedModifyAccessList?.Contains(accessName) ?? true;
|
||||||
}
|
}
|
||||||
|
|
||||||
var jobIndex = _jobPrototypeIds.IndexOf(state.TargetIdJobPrototype);
|
var jobIndex = _jobPrototypeIds.IndexOf(state.TargetIdJobPrototype);
|
||||||
@@ -208,6 +252,37 @@ namespace Content.Client.Access.UI
|
|||||||
JobPresetOptionButton.SelectId(jobIndex);
|
JobPresetOptionButton.SelectId(jobIndex);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//WD-EDIT
|
||||||
|
if (_resource.TryGetResource(new ResPath("/Textures/Interface/Misc/job_icons.rsi"), out RSIResource? rsi))
|
||||||
|
{
|
||||||
|
CurrentJobIcon.RemoveAllChildren();
|
||||||
|
var newLabel = new Label
|
||||||
|
{
|
||||||
|
Text = "Текущая выбранная иконка для роли: "
|
||||||
|
};
|
||||||
|
|
||||||
|
CurrentJobIcon.AddChild(newLabel);
|
||||||
|
var newIcon = new TextureRect
|
||||||
|
{
|
||||||
|
Texture = rsi.RSI.TryGetState(state.TargetIdJobIcon?.Replace("JobIcon", ""), out var iconState)
|
||||||
|
? iconState.Frame0
|
||||||
|
: rsi.RSI.TryGetState("CustomId", out var customState)
|
||||||
|
? customState.Frame0
|
||||||
|
: null,
|
||||||
|
|
||||||
|
TextureScale = new Vector2(4, 4)
|
||||||
|
};
|
||||||
|
|
||||||
|
CurrentJobIcon.AddChild(newIcon);
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach (var (jobIcon, button) in _jobIconButtons)
|
||||||
|
{
|
||||||
|
button.Disabled = !interfaceEnabled;
|
||||||
|
button.Pressed = state.TargetIdJobIcon == jobIcon;
|
||||||
|
}
|
||||||
|
//WD-EDIT
|
||||||
|
|
||||||
_lastFullName = state.TargetIdFullName;
|
_lastFullName = state.TargetIdFullName;
|
||||||
_lastJobTitle = state.TargetIdJobTitle;
|
_lastJobTitle = state.TargetIdJobTitle;
|
||||||
_lastJobProto = state.TargetIdJobPrototype;
|
_lastJobProto = state.TargetIdJobPrototype;
|
||||||
@@ -217,14 +292,15 @@ namespace Content.Client.Access.UI
|
|||||||
{
|
{
|
||||||
// Don't send this if it isn't dirty.
|
// Don't send this if it isn't dirty.
|
||||||
var jobProtoDirty = _lastJobProto != null &&
|
var jobProtoDirty = _lastJobProto != null &&
|
||||||
_jobPrototypeIds[JobPresetOptionButton.SelectedId] != _lastJobProto;
|
_jobPrototypeIds[JobPresetOptionButton.SelectedId] != _lastJobProto;
|
||||||
|
|
||||||
_owner.SubmitData(
|
_owner.SubmitData(
|
||||||
FullNameLineEdit.Text,
|
FullNameLineEdit.Text,
|
||||||
JobTitleLineEdit.Text,
|
JobTitleLineEdit.Text,
|
||||||
// Iterate over the buttons dictionary, filter by `Pressed`, only get key from the key/value pair
|
// Iterate over the buttons dictionary, filter by `Pressed`, only get key from the key/value pair
|
||||||
_accessButtons.Where(x => x.Value.Pressed).Select(x => x.Key).ToList(),
|
_accessButtons.Where(x => x.Value.Pressed).Select(x => x.Key).ToList(),
|
||||||
jobProtoDirty ? _jobPrototypeIds[JobPresetOptionButton.SelectedId] : string.Empty);
|
jobProtoDirty ? _jobPrototypeIds[JobPresetOptionButton.SelectedId] : string.Empty,
|
||||||
|
_lastJobIcon);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -45,7 +45,8 @@ public sealed class IdCardConsoleSystem : SharedIdCardConsoleSystem
|
|||||||
if (args.Session.AttachedEntity is not { Valid: true } player)
|
if (args.Session.AttachedEntity is not { Valid: true } player)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
TryWriteToTargetId(uid, args.FullName, args.JobTitle, args.AccessList, args.JobPrototype, player, component);
|
TryWriteToTargetId(uid, args.FullName, args.JobTitle, args.AccessList, args.JobPrototype, args.SelectedIcon,
|
||||||
|
player, component);
|
||||||
|
|
||||||
UpdateUserInterface(uid, component, args);
|
UpdateUserInterface(uid, component, args);
|
||||||
}
|
}
|
||||||
@@ -77,7 +78,8 @@ public sealed class IdCardConsoleSystem : SharedIdCardConsoleSystem
|
|||||||
possibleAccess,
|
possibleAccess,
|
||||||
string.Empty,
|
string.Empty,
|
||||||
privilegedIdName,
|
privilegedIdName,
|
||||||
string.Empty);
|
string.Empty,
|
||||||
|
"JobIconNoId"); // WD EDIt
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -85,12 +87,16 @@ public sealed class IdCardConsoleSystem : SharedIdCardConsoleSystem
|
|||||||
var targetAccessComponent = EntityManager.GetComponent<AccessComponent>(targetId);
|
var targetAccessComponent = EntityManager.GetComponent<AccessComponent>(targetId);
|
||||||
|
|
||||||
var jobProto = string.Empty;
|
var jobProto = string.Empty;
|
||||||
|
var jobIcon = string.Empty; //WD-EDIT
|
||||||
|
|
||||||
if (_station.GetOwningStation(uid) is { } station
|
if (_station.GetOwningStation(uid) is { } station
|
||||||
&& EntityManager.TryGetComponent<StationRecordKeyStorageComponent>(targetId, out var keyStorage)
|
&& EntityManager.TryGetComponent<StationRecordKeyStorageComponent>(targetId, out var keyStorage)
|
||||||
&& keyStorage.Key != null
|
&& keyStorage.Key != null
|
||||||
&& _record.TryGetRecord<GeneralStationRecord>(station, keyStorage.Key.Value, out var record))
|
&& _record.TryGetRecord<GeneralStationRecord>(station, keyStorage.Key.Value, out var record))
|
||||||
{
|
{
|
||||||
jobProto = record.JobPrototype;
|
jobProto = record.JobPrototype;
|
||||||
|
jobIcon = record.JobIcon;
|
||||||
|
Dirty(targetId, targetIdComponent);
|
||||||
}
|
}
|
||||||
|
|
||||||
newState = new IdCardConsoleBoundUserInterfaceState(
|
newState = new IdCardConsoleBoundUserInterfaceState(
|
||||||
@@ -103,7 +109,9 @@ public sealed class IdCardConsoleSystem : SharedIdCardConsoleSystem
|
|||||||
possibleAccess,
|
possibleAccess,
|
||||||
jobProto,
|
jobProto,
|
||||||
privilegedIdName,
|
privilegedIdName,
|
||||||
EntityManager.GetComponent<MetaDataComponent>(targetId).EntityName);
|
EntityManager.GetComponent<MetaDataComponent>(targetId).EntityName,
|
||||||
|
jobIcon
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
_userInterface.TrySetUiState(uid, IdCardConsoleUiKey.Key, newState);
|
_userInterface.TrySetUiState(uid, IdCardConsoleUiKey.Key, newState);
|
||||||
@@ -113,11 +121,14 @@ public sealed class IdCardConsoleSystem : SharedIdCardConsoleSystem
|
|||||||
/// Called whenever an access button is pressed, adding or removing that access from the target ID card.
|
/// Called whenever an access button is pressed, adding or removing that access from the target ID card.
|
||||||
/// Writes data passed from the UI into the ID stored in <see cref="IdCardConsoleComponent.TargetIdSlot"/>, if present.
|
/// Writes data passed from the UI into the ID stored in <see cref="IdCardConsoleComponent.TargetIdSlot"/>, if present.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
private void TryWriteToTargetId(EntityUid uid,
|
/// WD-INFO: Also called when icon is changed, to update it on ID.
|
||||||
|
private void TryWriteToTargetId(
|
||||||
|
EntityUid uid,
|
||||||
string newFullName,
|
string newFullName,
|
||||||
string newJobTitle,
|
string newJobTitle,
|
||||||
List<string> newAccessList,
|
List<string> newAccessList,
|
||||||
string newJobProto,
|
string newJobProto,
|
||||||
|
string? newJobIcon,
|
||||||
EntityUid player,
|
EntityUid player,
|
||||||
IdCardConsoleComponent? component = null)
|
IdCardConsoleComponent? component = null)
|
||||||
{
|
{
|
||||||
@@ -127,6 +138,13 @@ public sealed class IdCardConsoleSystem : SharedIdCardConsoleSystem
|
|||||||
if (component.TargetIdSlot.Item is not { Valid: true } targetId || !PrivilegedIdIsAuthorized(uid, component))
|
if (component.TargetIdSlot.Item is not { Valid: true } targetId || !PrivilegedIdIsAuthorized(uid, component))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
//WD-EDIT
|
||||||
|
if (TryComp<IdCardComponent>(targetId, out var idCardComponent) && newJobIcon != null)
|
||||||
|
{
|
||||||
|
idCardComponent.JobIcon = newJobIcon;
|
||||||
|
}
|
||||||
|
//WD-EDIT
|
||||||
|
|
||||||
_idCard.TryChangeFullName(targetId, newFullName, player: player);
|
_idCard.TryChangeFullName(targetId, newFullName, player: player);
|
||||||
_idCard.TryChangeJobTitle(targetId, newJobTitle, player: player);
|
_idCard.TryChangeJobTitle(targetId, newJobTitle, player: player);
|
||||||
|
|
||||||
@@ -148,7 +166,10 @@ public sealed class IdCardConsoleSystem : SharedIdCardConsoleSystem
|
|||||||
var privilegedId = component.PrivilegedIdSlot.Item;
|
var privilegedId = component.PrivilegedIdSlot.Item;
|
||||||
|
|
||||||
if (oldTags.SequenceEqual(newAccessList))
|
if (oldTags.SequenceEqual(newAccessList))
|
||||||
|
{
|
||||||
|
UpdateStationRecord(uid, targetId, newFullName, newJobTitle, job, newJobIcon); //WD-EDIT
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// I hate that C# doesn't have an option for this and don't desire to write this out the hard way.
|
// I hate that C# doesn't have an option for this and don't desire to write this out the hard way.
|
||||||
// var difference = newAccessList.Difference(oldTags);
|
// var difference = newAccessList.Difference(oldTags);
|
||||||
@@ -170,7 +191,7 @@ public sealed class IdCardConsoleSystem : SharedIdCardConsoleSystem
|
|||||||
_adminLogger.Add(LogType.Action, LogImpact.Medium,
|
_adminLogger.Add(LogType.Action, LogImpact.Medium,
|
||||||
$"{ToPrettyString(player):player} has modified {ToPrettyString(targetId):entity} with the following accesses: [{string.Join(", ", addedTags.Union(removedTags))}] [{string.Join(", ", newAccessList)}]");
|
$"{ToPrettyString(player):player} has modified {ToPrettyString(targetId):entity} with the following accesses: [{string.Join(", ", addedTags.Union(removedTags))}] [{string.Join(", ", newAccessList)}]");
|
||||||
|
|
||||||
UpdateStationRecord(uid, targetId, newFullName, newJobTitle, job);
|
UpdateStationRecord(uid, targetId, newFullName, newJobTitle, job, newJobIcon);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -191,7 +212,13 @@ public sealed class IdCardConsoleSystem : SharedIdCardConsoleSystem
|
|||||||
return privilegedId != null && _accessReader.IsAllowed(privilegedId.Value, uid, reader);
|
return privilegedId != null && _accessReader.IsAllowed(privilegedId.Value, uid, reader);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void UpdateStationRecord(EntityUid uid, EntityUid targetId, string newFullName, string newJobTitle, JobPrototype? newJobProto)
|
private void UpdateStationRecord(
|
||||||
|
EntityUid uid,
|
||||||
|
EntityUid targetId,
|
||||||
|
string newFullName,
|
||||||
|
string newJobTitle,
|
||||||
|
JobPrototype? newJobProto,
|
||||||
|
string? newJobIcon) // WD EDIT
|
||||||
{
|
{
|
||||||
if (_station.GetOwningStation(uid) is not { } station
|
if (_station.GetOwningStation(uid) is not { } station
|
||||||
|| !EntityManager.TryGetComponent<StationRecordKeyStorageComponent>(targetId, out var keyStorage)
|
|| !EntityManager.TryGetComponent<StationRecordKeyStorageComponent>(targetId, out var keyStorage)
|
||||||
@@ -210,6 +237,9 @@ public sealed class IdCardConsoleSystem : SharedIdCardConsoleSystem
|
|||||||
record.JobIcon = newJobProto.Icon;
|
record.JobIcon = newJobProto.Icon;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!string.IsNullOrWhiteSpace(newJobIcon))
|
||||||
|
record.JobIcon = newJobIcon;
|
||||||
|
|
||||||
_record.Synchronize(station);
|
_record.Synchronize(station);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -29,13 +29,20 @@ public sealed partial class IdCardConsoleComponent : Component
|
|||||||
public readonly string JobTitle;
|
public readonly string JobTitle;
|
||||||
public readonly List<string> AccessList;
|
public readonly List<string> AccessList;
|
||||||
public readonly string JobPrototype;
|
public readonly string JobPrototype;
|
||||||
|
public readonly string? SelectedIcon; //WD-EDIT
|
||||||
|
|
||||||
public WriteToTargetIdMessage(string fullName, string jobTitle, List<string> accessList, string jobPrototype)
|
public WriteToTargetIdMessage(
|
||||||
|
string fullName,
|
||||||
|
string jobTitle,
|
||||||
|
List<string> accessList,
|
||||||
|
string jobPrototype,
|
||||||
|
string? selectedIcon) //WD-EDIT (selectedIcon)
|
||||||
{
|
{
|
||||||
FullName = fullName;
|
FullName = fullName;
|
||||||
JobTitle = jobTitle;
|
JobTitle = jobTitle;
|
||||||
AccessList = accessList;
|
AccessList = accessList;
|
||||||
JobPrototype = jobPrototype;
|
JobPrototype = jobPrototype;
|
||||||
|
SelectedIcon = "JobIcon" + selectedIcon;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -72,9 +79,61 @@ public sealed partial class IdCardConsoleComponent : Component
|
|||||||
"Salvage",
|
"Salvage",
|
||||||
"Security",
|
"Security",
|
||||||
"Service",
|
"Service",
|
||||||
"Theatre",
|
"Theatre"
|
||||||
};
|
};
|
||||||
|
|
||||||
|
//WD-EDIT
|
||||||
|
[DataField("jobIcons")]
|
||||||
|
public List<string> JobIcons = new()
|
||||||
|
{
|
||||||
|
"AtmosphericTechnician",
|
||||||
|
"Bartender",
|
||||||
|
"Botanist",
|
||||||
|
"Boxer",
|
||||||
|
"Brigmedic",
|
||||||
|
"Captain",
|
||||||
|
"CargoTechnician",
|
||||||
|
"Chaplain",
|
||||||
|
"Chef",
|
||||||
|
"Chemist",
|
||||||
|
"ChiefEngineer",
|
||||||
|
"ChiefMedicalOfficer",
|
||||||
|
"Clown",
|
||||||
|
"Detective",
|
||||||
|
"Geneticist",
|
||||||
|
"HeadOfPersonnel",
|
||||||
|
"HeadOfSecurity",
|
||||||
|
"Janitor",
|
||||||
|
"Lawyer",
|
||||||
|
"Librarian",
|
||||||
|
"MedicalDoctor",
|
||||||
|
"MedicalIntern",
|
||||||
|
"Mime",
|
||||||
|
"Musician",
|
||||||
|
"Paramedic",
|
||||||
|
"Passenger",
|
||||||
|
"Psychologist",
|
||||||
|
"QuarterMaster",
|
||||||
|
"Reporter",
|
||||||
|
"ResearchAssistant",
|
||||||
|
"ResearchDirector",
|
||||||
|
"Roboticist",
|
||||||
|
"Scientist",
|
||||||
|
"SecurityCadet",
|
||||||
|
"SecurityOfficer",
|
||||||
|
"SeniorEngineer",
|
||||||
|
"SeniorOfficer",
|
||||||
|
"SeniorResearcher",
|
||||||
|
"ServiceWorker",
|
||||||
|
"ShaftMiner",
|
||||||
|
"StationEngineer",
|
||||||
|
"TechnicalAssistant",
|
||||||
|
"Virologist",
|
||||||
|
"Warden",
|
||||||
|
"Zookeeper"
|
||||||
|
};
|
||||||
|
// WD EDIT END
|
||||||
|
|
||||||
[Serializable, NetSerializable]
|
[Serializable, NetSerializable]
|
||||||
public sealed class IdCardConsoleBoundUserInterfaceState : BoundUserInterfaceState
|
public sealed class IdCardConsoleBoundUserInterfaceState : BoundUserInterfaceState
|
||||||
{
|
{
|
||||||
@@ -88,8 +147,10 @@ public sealed partial class IdCardConsoleComponent : Component
|
|||||||
public readonly string[]? TargetIdAccessList;
|
public readonly string[]? TargetIdAccessList;
|
||||||
public readonly string[]? AllowedModifyAccessList;
|
public readonly string[]? AllowedModifyAccessList;
|
||||||
public readonly string TargetIdJobPrototype;
|
public readonly string TargetIdJobPrototype;
|
||||||
|
public readonly string? TargetIdJobIcon; //WD-EDIT
|
||||||
|
|
||||||
public IdCardConsoleBoundUserInterfaceState(bool isPrivilegedIdPresent,
|
public IdCardConsoleBoundUserInterfaceState(
|
||||||
|
bool isPrivilegedIdPresent,
|
||||||
bool isPrivilegedIdAuthorized,
|
bool isPrivilegedIdAuthorized,
|
||||||
bool isTargetIdPresent,
|
bool isTargetIdPresent,
|
||||||
string? targetIdFullName,
|
string? targetIdFullName,
|
||||||
@@ -98,7 +159,8 @@ public sealed partial class IdCardConsoleComponent : Component
|
|||||||
string[]? allowedModifyAccessList,
|
string[]? allowedModifyAccessList,
|
||||||
string targetIdJobPrototype,
|
string targetIdJobPrototype,
|
||||||
string privilegedIdName,
|
string privilegedIdName,
|
||||||
string targetIdName)
|
string targetIdName,
|
||||||
|
string? targetIdJobIcon) // #WD EDIT (targetIdJobIcon)
|
||||||
{
|
{
|
||||||
IsPrivilegedIdPresent = isPrivilegedIdPresent;
|
IsPrivilegedIdPresent = isPrivilegedIdPresent;
|
||||||
IsPrivilegedIdAuthorized = isPrivilegedIdAuthorized;
|
IsPrivilegedIdAuthorized = isPrivilegedIdAuthorized;
|
||||||
@@ -110,12 +172,13 @@ public sealed partial class IdCardConsoleComponent : Component
|
|||||||
TargetIdJobPrototype = targetIdJobPrototype;
|
TargetIdJobPrototype = targetIdJobPrototype;
|
||||||
PrivilegedIdName = privilegedIdName;
|
PrivilegedIdName = privilegedIdName;
|
||||||
TargetIdName = targetIdName;
|
TargetIdName = targetIdName;
|
||||||
|
TargetIdJobIcon = targetIdJobIcon; //WD-EDIT
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
[Serializable, NetSerializable]
|
[Serializable, NetSerializable]
|
||||||
public enum IdCardConsoleUiKey : byte
|
public enum IdCardConsoleUiKey : byte
|
||||||
{
|
{
|
||||||
Key,
|
Key
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user