From 6a4ccebd4861c3899984f83dc3e8819adae037bd Mon Sep 17 00:00:00 2001 From: Pieter-Jan Briers Date: Wed, 27 May 2020 14:56:24 +0200 Subject: [PATCH] You can now hide small items in potted plants. --- .../Components/PottedPlantHideComponent.cs | 93 ++++++++++++++++++ Resources/Audio/effects/plant_rustle.ogg | Bin 0 -> 8930 bytes .../Prototypes/Entities/potted_plants.yml | 1 + 3 files changed, 94 insertions(+) create mode 100644 Content.Server/GameObjects/Components/PottedPlantHideComponent.cs create mode 100644 Resources/Audio/effects/plant_rustle.ogg diff --git a/Content.Server/GameObjects/Components/PottedPlantHideComponent.cs b/Content.Server/GameObjects/Components/PottedPlantHideComponent.cs new file mode 100644 index 0000000000..545a6e5fa4 --- /dev/null +++ b/Content.Server/GameObjects/Components/PottedPlantHideComponent.cs @@ -0,0 +1,93 @@ +using Content.Server.GameObjects.EntitySystems; +using Content.Server.Interfaces.GameObjects; +using Content.Shared.Audio; +using Content.Shared.Interfaces; +using Robust.Server.GameObjects.Components.Container; +using Robust.Server.GameObjects.EntitySystems; +using Robust.Shared.GameObjects; +using Robust.Shared.GameObjects.Systems; +using Robust.Shared.Localization; +using Robust.Shared.ViewVariables; + +namespace Content.Server.GameObjects.Components +{ + [RegisterComponent] + public class PottedPlantHideComponent : Component, IInteractUsing, IInteractHand + { + private const int MaxItemSize = (int) ReferenceSizes.Pocket; + + public override string Name => "PottedPlantHide"; + + [ViewVariables] private ContainerSlot _itemContainer; + + public override void Initialize() + { + base.Initialize(); + + _itemContainer = + ContainerManagerComponent.Ensure("flashlight_cell_container", Owner, out _); + } + + bool IInteractUsing.InteractUsing(InteractUsingEventArgs eventArgs) + { + if (_itemContainer.ContainedEntity != null) + { + Rustle(); + + Owner.PopupMessage(eventArgs.User, Loc.GetString("There's already something in here?!")); + return false; + } + + var size = eventArgs.Using.GetComponent().ObjectSize; + + // TODO: use proper text macro system for this. + + if (size > MaxItemSize) + { + Owner.PopupMessage(eventArgs.User, + Loc.GetString("The {0} is too big to fit in the plant!", eventArgs.Using.Name)); + return false; + } + + var handsComponent = eventArgs.User.GetComponent(); + + if (!handsComponent.Drop(eventArgs.Using, _itemContainer)) + { + return false; + } + + Owner.PopupMessage(eventArgs.User, Loc.GetString("You hide the {0} in the plant.", eventArgs.Using.Name)); + Rustle(); + return true; + } + + bool IInteractHand.InteractHand(InteractHandEventArgs eventArgs) + { + Rustle(); + + if (_itemContainer.ContainedEntity == null) + { + Owner.PopupMessage(eventArgs.User, Loc.GetString("You root around in the roots.")); + return true; + } + + Owner.PopupMessage(eventArgs.User, Loc.GetString("There was something in there!")); + if (eventArgs.User.TryGetComponent(out HandsComponent hands)) + { + hands.PutInHandOrDrop(_itemContainer.ContainedEntity.GetComponent()); + } + else if (_itemContainer.Remove(_itemContainer.ContainedEntity)) + { + _itemContainer.ContainedEntity.Transform.GridPosition = Owner.Transform.GridPosition; + } + + return true; + } + + private void Rustle() + { + EntitySystem.Get() + .Play("/Audio/effects/plant_rustle.ogg", Owner, AudioHelpers.WithVariation(0.25f)); + } + } +} diff --git a/Resources/Audio/effects/plant_rustle.ogg b/Resources/Audio/effects/plant_rustle.ogg new file mode 100644 index 0000000000000000000000000000000000000000..c4de6d91376b663485141d43e0d14486b8d67826 GIT binary patch literal 8930 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