clipping and extracting put seeds in the users hands (#14343)

This commit is contained in:
deltanedas
2023-03-06 02:37:57 +00:00
committed by GitHub
parent 5947fbc042
commit 60ac402b8b
3 changed files with 13 additions and 5 deletions

View File

@@ -6,6 +6,7 @@ using Content.Server.Kitchen.Components;
using Content.Server.Popups; using Content.Server.Popups;
using Content.Shared.Botany; using Content.Shared.Botany;
using Content.Shared.Examine; using Content.Shared.Examine;
using Content.Shared.Hands.EntitySystems;
using Content.Shared.Popups; using Content.Shared.Popups;
using Content.Shared.Random.Helpers; using Content.Shared.Random.Helpers;
using Content.Shared.Slippery; using Content.Shared.Slippery;
@@ -22,6 +23,7 @@ namespace Content.Server.Botany.Systems;
public sealed partial class BotanySystem : EntitySystem public sealed partial class BotanySystem : EntitySystem
{ {
[Dependency] private readonly AppearanceSystem _appearance = default!; [Dependency] private readonly AppearanceSystem _appearance = default!;
[Dependency] private readonly SharedHandsSystem _hands = default!;
[Dependency] private readonly IPrototypeManager _prototypeManager = default!; [Dependency] private readonly IPrototypeManager _prototypeManager = default!;
[Dependency] private readonly PopupSystem _popupSystem = default!; [Dependency] private readonly PopupSystem _popupSystem = default!;
[Dependency] private readonly IRobustRandom _robustRandom = default!; [Dependency] private readonly IRobustRandom _robustRandom = default!;
@@ -88,9 +90,12 @@ public sealed partial class BotanySystem : EntitySystem
#region SeedPrototype prototype stuff #region SeedPrototype prototype stuff
public EntityUid SpawnSeedPacket(SeedData proto, EntityCoordinates transformCoordinates) /// <summary>
/// Spawns a new seed packet on the floor at a position, then tries to put it in the user's hands if possible.
/// </summary>
public EntityUid SpawnSeedPacket(SeedData proto, EntityCoordinates coords, EntityUid user)
{ {
var seed = Spawn(proto.PacketPrototype, transformCoordinates); var seed = Spawn(proto.PacketPrototype, coords);
var seedComp = EnsureComp<SeedComponent>(seed); var seedComp = EnsureComp<SeedComponent>(seed);
seedComp.Seed = proto; seedComp.Seed = proto;
@@ -106,6 +111,8 @@ public sealed partial class BotanySystem : EntitySystem
var val = Loc.GetString("botany-seed-packet-name", ("seedName", name), ("seedNoun", noun)); var val = Loc.GetString("botany-seed-packet-name", ("seedName", name), ("seedNoun", noun));
MetaData(seed).EntityName = val; MetaData(seed).EntityName = val;
// try to automatically place in user's other hand
_hands.TryPickupAnyHand(user, seed);
return seed; return seed;
} }

View File

@@ -251,7 +251,7 @@ namespace Content.Server.Botany.Systems
} }
component.Seed.Unique = false; component.Seed.Unique = false;
var seed = _botanySystem.SpawnSeedPacket(component.Seed, Transform(args.User).Coordinates); var seed = _botanySystem.SpawnSeedPacket(component.Seed, Transform(args.User).Coordinates, args.User);
seed.RandomOffset(0.25f); seed.RandomOffset(0.25f);
var displayName = Loc.GetString(component.Seed.DisplayName); var displayName = Loc.GetString(component.Seed.DisplayName);
_popupSystem.PopupCursor(Loc.GetString("plant-holder-component-take-sample-message", _popupSystem.PopupCursor(Loc.GetString("plant-holder-component-take-sample-message",
@@ -572,7 +572,8 @@ namespace Content.Server.Botany.Systems
} }
else if (component.Age < 0) // Revert back to seed packet! else if (component.Age < 0) // Revert back to seed packet!
{ {
_botanySystem.SpawnSeedPacket(component.Seed, Transform(uid).Coordinates); // will put it in the trays hands if it has any, please do not try doing this
_botanySystem.SpawnSeedPacket(component.Seed, Transform(uid).Coordinates, uid);
RemovePlant(uid, component); RemovePlant(uid, component);
component.ForceUpdate = true; component.ForceUpdate = true;
Update(uid, component); Update(uid, component);

View File

@@ -50,7 +50,7 @@ public sealed class SeedExtractorSystem : EntitySystem
for (var i = 0; i < amount; i++) for (var i = 0; i < amount; i++)
{ {
_botanySystem.SpawnSeedPacket(seed, coords); _botanySystem.SpawnSeedPacket(seed, coords, args.User);
} }
} }