using Content.Shared.Botany.Components; using Content.Shared.Botany.Systems; using Content.Shared.Random.Helpers; using Robust.Shared.Prototypes; using Robust.Shared.Random; using Robust.Shared.Timing; namespace Content.Shared.EntityEffects.Effects.Botany; /// /// Plant mutation entity effect that forces plant to exude gas while living. /// /// public sealed partial class PlantMutateExudeGasesEntityEffectSystem : EntityEffectSystem { [Dependency] private IGameTiming _timing = default!; [Dependency] private SharedPlantConsumeExudeGasSystem _plantConsumeExudeGas = default!; protected override void Effect(Entity entity, ref EntityEffectEvent args) { var random = SharedRandomExtensions.PredictedRandom(_timing, GetNetEntity(entity)); var amount = random.NextFloat(args.Effect.MinValue, args.Effect.MaxValue); _plantConsumeExudeGas.MutateRandomExudeGasses(entity.Owner, amount); } } /// public sealed partial class PlantMutateExudeGases : EntityEffectBase { /// /// The minimum amount of gas to consume. /// [DataField] public float MinValue = 0.01f; /// /// The maximum amount of gas to consume. /// [DataField] public float MaxValue = 0.5f; /// public override string EntityEffectGuidebookText(IPrototypeManager prototype, IEntitySystemManager entSys) { return Loc.GetString("entity-effect-guidebook-plant-mutate-exude-gasses", ("chance", Probability), ("minValue", MinValue), ("maxValue", MaxValue)); } } /// /// Plant mutation entity effect that forces plant to consume gas while living. /// /// public sealed partial class PlantMutateConsumeGasesEntityEffectSystem : EntityEffectSystem { [Dependency] private IGameTiming _timing = default!; [Dependency] private SharedPlantConsumeExudeGasSystem _plantConsumeExudeGas = default!; protected override void Effect(Entity entity, ref EntityEffectEvent args) { var random = SharedRandomExtensions.PredictedRandom(_timing, GetNetEntity(entity)); var amount = random.NextFloat(args.Effect.MinValue, args.Effect.MaxValue); _plantConsumeExudeGas.MutateRandomConsumeGasses(entity.Owner, amount); } } /// public sealed partial class PlantMutateConsumeGases : EntityEffectBase { /// /// The minimum amount of gas to exude. /// [DataField] public float MinValue = 0.01f; /// /// The maximum amount of gas to exude. /// [DataField] public float MaxValue = 0.5f; /// public override string EntityEffectGuidebookText(IPrototypeManager prototype, IEntitySystemManager entSys) { return Loc.GetString("entity-effect-guidebook-plant-mutate-consume-gasses", ("chance", Probability), ("minValue", MinValue), ("maxValue", MaxValue)); } }