using Content.Shared.Botany.Components;
using Content.Shared.Botany.Systems;
using Robust.Shared.Prototypes;
using Content.Shared.Random.Helpers;
using Robust.Shared.Timing;
namespace Content.Shared.EntityEffects.Effects.Botany.PlantAttributes;
///
/// Entity effect that reverts aging of plant.
///
///
public sealed partial class PlantCryoxadoneEntityEffectSystem : EntityEffectSystem
{
[Dependency] private PlantSystem _plant = default!;
[Dependency] private PlantHolderSystem _plantHolder = default!;
[Dependency] private PlantHarvestSystem _plantHarvest = default!;
[Dependency] private IGameTiming _timing = default!;
[Dependency] private BotanySystem _botany = default!;
protected override void Effect(Entity entity, ref EntityEffectEvent args)
{
if (_plantHolder.IsDead(entity.Owner))
return;
if (!TryComp(entity, out var plantHolder))
return;
var random = SharedRandomExtensions.PredictedRandom(_timing, GetNetEntity(entity));
var deviation = plantHolder.Age > entity.Comp.Maturation
? (int)Math.Max(entity.Comp.Maturation - 1, plantHolder.Age - random.Next(7, 10))
: (int)(entity.Comp.Maturation / entity.Comp.GrowthStages);
if (plantHolder.Age - deviation < 0)
{
_botany.TryRevertPlantToSeed(entity.Owner);
return;
}
_plantHolder.AdjustsAge((entity.Owner, plantHolder), -deviation);
_plantHarvest.ResetHarvestProgress((entity.Owner, plantHolder));
_plant.ForceUpdate(entity.AsNullable());
}
}
///
public sealed partial class PlantCryoxadone : EntityEffectBase
{
public override string EntityEffectGuidebookText(IPrototypeManager prototype, IEntitySystemManager entSys) =>
Loc.GetString("entity-effect-guidebook-plant-cryoxadone", ("chance", Probability));
}