Files
tbd-station-14/Content.Server/GameObjects/Components/Items/Storage/ItemComponent.cs
collinlunn f7aba5f701 SharedItemComponent (#3513)
* StorableComponent refactor

* ItemComponent refactor

* conflict fixes

* removes redundant null check

* removes redundant item throwing code

* fix conflicts

* ExplosionLaunchedComponent

Co-authored-by: metalgearsloth <comedian_vs_clown@hotmail.com>
2021-04-02 21:01:03 +11:00

79 lines
2.4 KiB
C#

#nullable enable
using Content.Server.GameObjects.Components.GUI;
using Content.Server.Interfaces.GameObjects.Components.Items;
using Content.Shared.GameObjects.Components.Storage;
using Content.Shared.GameObjects.EntitySystems.ActionBlocker;
using Content.Shared.GameObjects.Verbs;
using Content.Shared.Utility;
using Robust.Server.GameObjects;
using Robust.Shared.Containers;
using Robust.Shared.GameObjects;
using Robust.Shared.Localization;
using Robust.Shared.Physics;
namespace Content.Server.GameObjects.Components.Items.Storage
{
[RegisterComponent]
[ComponentReference(typeof(SharedItemComponent))]
public class ItemComponent : SharedItemComponent
{
public override void RemovedFromSlot()
{
foreach (var component in Owner.GetAllComponents<ISpriteRenderableComponent>())
{
component.Visible = true;
}
}
public override void EquippedToSlot()
{
foreach (var component in Owner.GetAllComponents<ISpriteRenderableComponent>())
{
component.Visible = false;
}
}
public override bool TryPutInHand(IEntity user)
{
if (!CanPickup(user))
return false;
if (!user.TryGetComponent(out IHandsComponent? hands))
return false;
var activeHand = hands.ActiveHand;
if (activeHand == null)
return false;
hands.PutInHand(this, activeHand, false);
return true;
}
[Verb]
public sealed class PickUpVerb : Verb<ItemComponent>
{
protected override void GetData(IEntity user, ItemComponent component, VerbData data)
{
if (!ActionBlockerSystem.CanInteract(user) ||
component.Owner.IsInContainer() ||
!component.CanPickup(user))
{
data.Visibility = VerbVisibility.Invisible;
return;
}
data.Text = Loc.GetString("Pick Up");
}
protected override void Activate(IEntity user, ItemComponent component)
{
if (user.TryGetComponent(out HandsComponent? hands) && !hands.IsHolding(component.Owner))
{
hands.PutInHand(component);
}
}
}
}
}