Files
space-station-14/Content.Server/EntityEffects/Effects/Botany/PlantMutateGasesEntityEffectSystem.cs
2025-12-12 23:05:58 +03:00

61 lines
2.1 KiB
C#

using Content.Server.Botany.Components;
using Content.Shared.Atmos;
using Content.Shared.EntityEffects;
using Content.Shared.EntityEffects.Effects.Botany;
using Robust.Shared.Random;
namespace Content.Server.EntityEffects.Effects.Botany;
/// <summary>
/// Plant mutation entity effect that forces plant to exude gas while living.
/// </summary>
public sealed partial class PlantMutateExudeGasesEntityEffectSystem : EntityEffectSystem<PlantHolderComponent, PlantMutateExudeGases>
{
[Dependency] private readonly IRobustRandom _random = default!;
protected override void Effect(Entity<PlantHolderComponent> entity, ref EntityEffectEvent<PlantMutateExudeGases> args)
{
if (entity.Comp.Seed == null)
return;
var gasComponent = EnsureComp<ConsumeExudeGasGrowthComponent>(entity);
var gasses = gasComponent.ExudeGasses;
// Add a random amount of a random gas to this gas dictionary.
float amount = _random.NextFloat(args.Effect.MinValue, args.Effect.MaxValue);
var gas = _random.Pick(Enum.GetValues<Gas>());
if (!gasses.TryAdd(gas, amount))
{
gasses[gas] += amount;
}
}
}
/// <summary>
/// Plant mutation entity effect that forces plant to consume gas while living.
/// </summary>
public sealed partial class PlantMutateConsumeGasesEntityEffectSystem : EntityEffectSystem<PlantHolderComponent, PlantMutateConsumeGases>
{
[Dependency] private readonly IRobustRandom _random = default!;
protected override void Effect(Entity<PlantHolderComponent> entity, ref EntityEffectEvent<PlantMutateConsumeGases> args)
{
if (entity.Comp.Seed == null)
return;
var gasComponent = EnsureComp<ConsumeExudeGasGrowthComponent>(entity);
var gasses = gasComponent.ConsumeGasses;
// Add a random amount of a random gas to this gas dictionary.
var amount = _random.NextFloat(args.Effect.MinValue, args.Effect.MaxValue);
var gas = _random.Pick(Enum.GetValues<Gas>());
if (!gasses.TryAdd(gas, amount))
{
gasses[gas] += amount;
}
}
}