mirror of
https://github.com/space-wizards/space-station-14.git
synced 2026-02-14 19:29:53 +01:00
61 lines
2.1 KiB
C#
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;
|
|
}
|
|
}
|
|
}
|
|
|