OverallPlaytimeRequirement.cs 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. using System.Diagnostics.CodeAnalysis;
  2. using Content.Shared.Localizations;
  3. using Content.Shared.Players.PlayTimeTracking;
  4. using Content.Shared.Preferences;
  5. using JetBrains.Annotations;
  6. using Robust.Shared.Prototypes;
  7. using Robust.Shared.Serialization;
  8. using Robust.Shared.Utility;
  9. namespace Content.Shared.Roles;
  10. [UsedImplicitly]
  11. [Serializable, NetSerializable]
  12. public sealed partial class OverallPlaytimeRequirement : JobRequirement
  13. {
  14. /// <inheritdoc cref="DepartmentTimeRequirement.Time"/>
  15. [DataField(required: true)]
  16. public TimeSpan Time;
  17. public override bool Check(IEntityManager entManager,
  18. IPrototypeManager protoManager,
  19. HumanoidCharacterProfile? profile,
  20. IReadOnlyDictionary<string, TimeSpan> playTimes,
  21. [NotNullWhen(false)] out FormattedMessage? reason)
  22. {
  23. reason = new FormattedMessage();
  24. var overallTime = playTimes.GetValueOrDefault(PlayTimeTrackingShared.TrackerOverall);
  25. var overallDiffSpan = Time - overallTime;
  26. var overallDiff = overallDiffSpan.TotalMinutes;
  27. var formattedOverallDiff = ContentLocalizationManager.FormatPlaytime(overallDiffSpan);
  28. if (!Inverted)
  29. {
  30. if (overallDiff <= 0 || overallTime >= Time)
  31. return true;
  32. reason = FormattedMessage.FromMarkupPermissive(Loc.GetString(
  33. "role-timer-overall-insufficient",
  34. ("time", formattedOverallDiff)));
  35. return false;
  36. }
  37. if (overallDiff <= 0 || overallTime >= Time)
  38. {
  39. reason = FormattedMessage.FromMarkupPermissive(Loc.GetString("role-timer-overall-too-high",
  40. ("time", formattedOverallDiff)));
  41. return false;
  42. }
  43. return true;
  44. }
  45. }