CatStation/Content.Shared/EntityEffects/Effects/NestedEffect.cs
Pieter-Jan Briers 5168b5f3d4
IoC source gen compatibility (#43863)
* IoC source gen compatibility

Can be merged before or after https://github.com/space-wizards/RobustToolbox/pull/6549 doesn't really matter.

* Missed a spot
2026-05-09 03:29:58 +00:00

65 lines
2.2 KiB
C#

using Content.Shared.Localizations;
using Robust.Shared.Prototypes;
namespace Content.Shared.EntityEffects.Effects;
/// <summary>
/// Applies the effect of an <see cref="EntityEffectPrototype"/>.
/// </summary>
public sealed partial class NestedEffect : EntityEffectBase<NestedEffect>
{
/// <summary>
/// The effect prototype to use.
/// </summary>
[DataField(required: true)]
public ProtoId<EntityEffectPrototype> Proto;
private List<string> _conditions = new();
private List<string> _effects = new();
public override string? EntityEffectGuidebookText(IPrototypeManager prototype, IEntitySystemManager entSys)
{
var proto = prototype.Index(Proto);
if (proto.GuidebookText is {} key)
return Loc.GetString(key, ("chance", Probability));
_effects.Clear();
foreach (var effect in proto.Effects)
{
if (effect.EntityEffectGuidebookText(prototype, entSys) is not {} text)
continue;
// basically GuidebookReagentEffectDescription but independent of reagents and no linq
_conditions.Clear();
if (effect.Conditions is {} conditions)
{
foreach (var condition in conditions)
{
_conditions.Add(condition.EntityConditionGuidebookText(prototype));
}
}
var desc = Loc.GetString("guidebook-nested-effect-description",
("effect", text),
("chance", effect.Probability),
("conditionCount", _conditions.Count),
("conditions", ContentLocalizationManager.FormatList(_conditions)));
_effects.Add(desc);
}
return _effects.Count == 0 ? null : string.Join("\n", _effects);
}
}
/// <summary>
/// Handles <see cref="NestedEffect"/>.
/// </summary>
public sealed partial class NestedEffectSystem : EntityEffectSystem<TransformComponent, NestedEffect>
{
[Dependency] private SharedEntityEffectsSystem _effects = default!;
protected override void Effect(Entity<TransformComponent> ent, ref EntityEffectEvent<NestedEffect> args)
{
_effects.TryApplyEffect(ent, args.Effect.Proto, args.Scale, args.User);
}
}