| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- using Content.Shared.CharacterInfo;
- using Content.Shared.Objectives;
- using Robust.Client.Player;
- using Robust.Client.UserInterface;
- namespace Content.Client.CharacterInfo;
- public sealed class CharacterInfoSystem : EntitySystem
- {
- [Dependency] private readonly IPlayerManager _players = default!;
- public event Action<CharacterData>? OnCharacterUpdate;
- public override void Initialize()
- {
- base.Initialize();
- SubscribeNetworkEvent<CharacterInfoEvent>(OnCharacterInfoEvent);
- }
- public void RequestCharacterInfo()
- {
- var entity = _players.LocalEntity;
- if (entity == null)
- {
- return;
- }
- RaiseNetworkEvent(new RequestCharacterInfoEvent(GetNetEntity(entity.Value)));
- }
- private void OnCharacterInfoEvent(CharacterInfoEvent msg, EntitySessionEventArgs args)
- {
- var entity = GetEntity(msg.NetEntity);
- var data = new CharacterData(entity, msg.JobTitle, msg.Objectives, msg.Briefing, Name(entity));
- OnCharacterUpdate?.Invoke(data);
- }
- public List<Control> GetCharacterInfoControls(EntityUid uid)
- {
- var ev = new GetCharacterInfoControlsEvent(uid);
- RaiseLocalEvent(uid, ref ev, true);
- return ev.Controls;
- }
- public readonly record struct CharacterData(
- EntityUid Entity,
- string Job,
- Dictionary<string, List<ObjectiveInfo>> Objectives,
- string? Briefing,
- string EntityName
- );
- /// <summary>
- /// Event raised to get additional controls to display in the character info menu.
- /// </summary>
- [ByRefEvent]
- public readonly record struct GetCharacterInfoControlsEvent(EntityUid Entity)
- {
- public readonly List<Control> Controls = new();
- public readonly EntityUid Entity = Entity;
- }
- }
|