GroupLoadoutEffect.cs 1.2 KB

1234567891011121314151617181920212223242526272829303132
  1. using System.Diagnostics.CodeAnalysis;
  2. using Robust.Shared.Player;
  3. using Robust.Shared.Prototypes;
  4. using Robust.Shared.Utility;
  5. namespace Content.Shared.Preferences.Loadouts.Effects;
  6. /// <summary>
  7. /// Uses a <see cref="LoadoutEffectGroupPrototype"/> prototype as a singular effect that can be re-used.
  8. /// </summary>
  9. public sealed partial class GroupLoadoutEffect : LoadoutEffect
  10. {
  11. [DataField(required: true)]
  12. public ProtoId<LoadoutEffectGroupPrototype> Proto;
  13. public override bool Validate(HumanoidCharacterProfile profile, RoleLoadout loadout, ICommonSession? session, IDependencyCollection collection, [NotNullWhen(false)] out FormattedMessage? reason)
  14. {
  15. var effectsProto = collection.Resolve<IPrototypeManager>().Index(Proto);
  16. var reasons = new List<string>();
  17. foreach (var effect in effectsProto.Effects)
  18. {
  19. if (effect.Validate(profile, loadout, session, collection, out reason))
  20. continue;
  21. reasons.Add(reason.ToMarkup());
  22. }
  23. reason = reasons.Count == 0 ? null : FormattedMessage.FromMarkupOrThrow(string.Join('\n', reasons));
  24. return reason == null;
  25. }
  26. }