BotanySystem.Produce.cs 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. using Content.Server.Botany.Components;
  2. using Content.Shared.EntityEffects;
  3. using Content.Shared.FixedPoint;
  4. namespace Content.Server.Botany.Systems;
  5. public sealed partial class BotanySystem
  6. {
  7. public void ProduceGrown(EntityUid uid, ProduceComponent produce)
  8. {
  9. if (!TryGetSeed(produce, out var seed))
  10. return;
  11. foreach (var mutation in seed.Mutations)
  12. {
  13. if (mutation.AppliesToProduce)
  14. {
  15. var args = new EntityEffectBaseArgs(uid, EntityManager);
  16. mutation.Effect.Effect(args);
  17. }
  18. }
  19. if (!_solutionContainerSystem.EnsureSolution(uid,
  20. produce.SolutionName,
  21. out var solutionContainer,
  22. FixedPoint2.Zero))
  23. return;
  24. solutionContainer.RemoveAllSolution();
  25. foreach (var (chem, quantity) in seed.Chemicals)
  26. {
  27. var amount = FixedPoint2.New(quantity.Min);
  28. if (quantity.PotencyDivisor > 0 && seed.Potency > 0)
  29. amount += FixedPoint2.New(seed.Potency / quantity.PotencyDivisor);
  30. amount = FixedPoint2.New(MathHelper.Clamp(amount.Float(), quantity.Min, quantity.Max));
  31. solutionContainer.MaxVolume += amount;
  32. solutionContainer.AddReagent(chem, amount);
  33. }
  34. }
  35. }