| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- using Content.Server.Botany.Components;
- using Content.Server.Popups;
- using Content.Server.Power.EntitySystems;
- using Content.Shared.Interaction;
- using Content.Shared.Popups;
- using Robust.Shared.Random;
- namespace Content.Server.Botany.Systems;
- public sealed class SeedExtractorSystem : EntitySystem
- {
- [Dependency] private readonly IRobustRandom _random = default!;
- [Dependency] private readonly PopupSystem _popupSystem = default!;
- [Dependency] private readonly BotanySystem _botanySystem = default!;
- public override void Initialize()
- {
- base.Initialize();
- SubscribeLocalEvent<SeedExtractorComponent, InteractUsingEvent>(OnInteractUsing);
- }
- private void OnInteractUsing(EntityUid uid, SeedExtractorComponent seedExtractor, InteractUsingEvent args)
- {
- if (!this.IsPowered(uid, EntityManager))
- return;
- if (!TryComp(args.Used, out ProduceComponent? produce))
- return;
- if (!_botanySystem.TryGetSeed(produce, out var seed) || seed.Seedless)
- {
- _popupSystem.PopupCursor(Loc.GetString("seed-extractor-component-no-seeds", ("name", args.Used)),
- args.User, PopupType.MediumCaution);
- return;
- }
- _popupSystem.PopupCursor(Loc.GetString("seed-extractor-component-interact-message", ("name", args.Used)),
- args.User, PopupType.Medium);
- QueueDel(args.Used);
- args.Handled = true;
- var amount = _random.Next(seedExtractor.BaseMinSeeds, seedExtractor.BaseMaxSeeds + 1);
- var coords = Transform(uid).Coordinates;
- var packetSeed = seed;
- if (amount > 1)
- packetSeed.Unique = false;
- for (var i = 0; i < amount; i++)
- {
- _botanySystem.SpawnSeedPacket(packetSeed, coords, args.User);
- }
- }
- }
|