1
0

TargetObjectiveSystem.cs 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. using Content.Server.Objectives.Components;
  2. using Content.Shared.Mind;
  3. using Content.Shared.Objectives.Components;
  4. using Content.Shared.Roles.Jobs;
  5. using Robust.Shared.GameObjects;
  6. using System.Diagnostics.CodeAnalysis;
  7. namespace Content.Server.Objectives.Systems;
  8. /// <summary>
  9. /// Provides API for other components and handles setting the title.
  10. /// </summary>
  11. public sealed class TargetObjectiveSystem : EntitySystem
  12. {
  13. [Dependency] private readonly MetaDataSystem _metaData = default!;
  14. [Dependency] private readonly SharedJobSystem _job = default!;
  15. public override void Initialize()
  16. {
  17. base.Initialize();
  18. SubscribeLocalEvent<TargetObjectiveComponent, ObjectiveAfterAssignEvent>(OnAfterAssign);
  19. }
  20. private void OnAfterAssign(EntityUid uid, TargetObjectiveComponent comp, ref ObjectiveAfterAssignEvent args)
  21. {
  22. if (!GetTarget(uid, out var target, comp))
  23. return;
  24. _metaData.SetEntityName(uid, GetTitle(target.Value, comp.Title), args.Meta);
  25. }
  26. /// <summary>
  27. /// Sets the Target field for the title and other components to use.
  28. /// </summary>
  29. public void SetTarget(EntityUid uid, EntityUid target, TargetObjectiveComponent? comp = null)
  30. {
  31. if (!Resolve(uid, ref comp))
  32. return;
  33. comp.Target = target;
  34. }
  35. /// <summary>
  36. /// Gets the target from the component.
  37. /// </summary>
  38. /// <remarks>
  39. /// If it is null then the prototype is invalid, just return.
  40. /// </remarks>
  41. public bool GetTarget(EntityUid uid, [NotNullWhen(true)] out EntityUid? target, TargetObjectiveComponent? comp = null)
  42. {
  43. target = Resolve(uid, ref comp) ? comp.Target : null;
  44. return target != null;
  45. }
  46. private string GetTitle(EntityUid target, string title)
  47. {
  48. var targetName = "Unknown";
  49. if (TryComp<MindComponent>(target, out var mind) && mind.CharacterName != null)
  50. {
  51. targetName = mind.CharacterName;
  52. }
  53. var jobName = _job.MindTryGetJobName(target);
  54. return Loc.GetString(title, ("targetName", targetName), ("job", jobName));
  55. }
  56. }