feat: смена значков в консоли ID карт
This commit is contained in:
@@ -1,12 +1,16 @@
|
||||
using System.Linq;
|
||||
using System.Numerics;
|
||||
using Content.Shared.Access;
|
||||
using Content.Shared.Access.Components;
|
||||
using Content.Shared.Access.Systems;
|
||||
using Content.Shared.Roles;
|
||||
using Robust.Client.AutoGenerated;
|
||||
using Robust.Client.ResourceManagement;
|
||||
using Robust.Client.UserInterface.Controls;
|
||||
using Robust.Client.UserInterface.CustomControls;
|
||||
using Robust.Client.UserInterface.XAML;
|
||||
using Robust.Shared.Prototypes;
|
||||
using Robust.Shared.Utility;
|
||||
using static Content.Shared.Access.Components.IdCardConsoleComponent;
|
||||
|
||||
namespace Content.Client.Access.UI
|
||||
@@ -16,18 +20,24 @@ namespace Content.Client.Access.UI
|
||||
{
|
||||
[Dependency] private readonly IPrototypeManager _prototypeManager = 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 IdCardConsoleBoundUserInterface _owner;
|
||||
|
||||
private readonly Dictionary<string, Button> _accessButtons = new();
|
||||
private readonly Dictionary<string, TextureButton> _jobIconButtons = new(); //WD-EDIT
|
||||
private readonly List<string> _jobPrototypeIds = new();
|
||||
|
||||
private string? _lastFullName;
|
||||
private string? _lastJobTitle;
|
||||
private string? _lastJobProto;
|
||||
private string? _lastJobIcon; //WD-EDIT
|
||||
|
||||
public IdCardConsoleWindow(IdCardConsoleBoundUserInterface owner, IPrototypeManager prototypeManager,
|
||||
public IdCardConsoleWindow(
|
||||
IdCardConsoleBoundUserInterface owner,
|
||||
IPrototypeManager prototypeManager,
|
||||
List<ProtoId<AccessLevelPrototype>> accessLevels)
|
||||
{
|
||||
RobustXamlLoader.Load(this);
|
||||
@@ -41,6 +51,7 @@ namespace Content.Client.Access.UI
|
||||
{
|
||||
FullNameSaveButton.Disabled = FullNameSaveButton.Text == _lastFullName;
|
||||
};
|
||||
|
||||
FullNameSaveButton.OnPressed += _ => SubmitData();
|
||||
|
||||
JobTitleLineEdit.OnTextEntered += _ => SubmitData();
|
||||
@@ -48,6 +59,7 @@ namespace Content.Client.Access.UI
|
||||
{
|
||||
JobTitleSaveButton.Disabled = JobTitleLineEdit.Text == _lastJobTitle;
|
||||
};
|
||||
|
||||
JobTitleSaveButton.OnPressed += _ => SubmitData();
|
||||
|
||||
var jobs = _prototypeManager.EnumeratePrototypes<JobPrototype>().ToList();
|
||||
@@ -69,7 +81,7 @@ namespace Content.Client.Access.UI
|
||||
|
||||
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}");
|
||||
continue;
|
||||
@@ -78,19 +90,50 @@ namespace Content.Client.Access.UI
|
||||
var newButton = new Button
|
||||
{
|
||||
Text = GetAccessLevelName(accessLevel),
|
||||
ToggleMode = true,
|
||||
ToggleMode = true
|
||||
};
|
||||
|
||||
_accessButtons.Add(accessLevel.ID, newButton);
|
||||
newButton.OnPressed += _ => SubmitData();
|
||||
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)
|
||||
{
|
||||
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)
|
||||
@@ -149,6 +192,7 @@ namespace Content.Client.Access.UI
|
||||
}
|
||||
}
|
||||
|
||||
_lastJobIcon = job.Icon;
|
||||
SubmitData();
|
||||
}
|
||||
|
||||
@@ -195,11 +239,11 @@ namespace Content.Client.Access.UI
|
||||
foreach (var (accessName, button) in _accessButtons)
|
||||
{
|
||||
button.Disabled = !interfaceEnabled;
|
||||
if (interfaceEnabled)
|
||||
{
|
||||
button.Pressed = state.TargetIdAccessList?.Contains(accessName) ?? false;
|
||||
button.Disabled = (!state.AllowedModifyAccessList?.Contains(accessName)) ?? true;
|
||||
}
|
||||
if (!interfaceEnabled)
|
||||
continue;
|
||||
|
||||
button.Pressed = state.TargetIdAccessList?.Contains(accessName) ?? false;
|
||||
button.Disabled = !state.AllowedModifyAccessList?.Contains(accessName) ?? true;
|
||||
}
|
||||
|
||||
var jobIndex = _jobPrototypeIds.IndexOf(state.TargetIdJobPrototype);
|
||||
@@ -208,6 +252,37 @@ namespace Content.Client.Access.UI
|
||||
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;
|
||||
_lastJobTitle = state.TargetIdJobTitle;
|
||||
_lastJobProto = state.TargetIdJobPrototype;
|
||||
@@ -217,14 +292,15 @@ namespace Content.Client.Access.UI
|
||||
{
|
||||
// Don't send this if it isn't dirty.
|
||||
var jobProtoDirty = _lastJobProto != null &&
|
||||
_jobPrototypeIds[JobPresetOptionButton.SelectedId] != _lastJobProto;
|
||||
_jobPrototypeIds[JobPresetOptionButton.SelectedId] != _lastJobProto;
|
||||
|
||||
_owner.SubmitData(
|
||||
FullNameLineEdit.Text,
|
||||
JobTitleLineEdit.Text,
|
||||
// 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(),
|
||||
jobProtoDirty ? _jobPrototypeIds[JobPresetOptionButton.SelectedId] : string.Empty);
|
||||
jobProtoDirty ? _jobPrototypeIds[JobPresetOptionButton.SelectedId] : string.Empty,
|
||||
_lastJobIcon);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user