62 lines
1.4 KiB
C#
62 lines
1.4 KiB
C#
using Sandbox.Gravity;
|
||
using Sandbox.UI;
|
||
using Sasalka;
|
||
using System;
|
||
using System.Linq;
|
||
|
||
namespace Sasalka;
|
||
|
||
[Icon( "skip_next" )]
|
||
public sealed class PickupItem : InteractionButton
|
||
{
|
||
[Property] public override string Label { get; set; } = "E";
|
||
|
||
protected override void OnStart()
|
||
{
|
||
base.OnStart();
|
||
|
||
// Устанавливаем правильную метку для предмета
|
||
if ( GameObject.Components.TryGet<InventoryItem>( out var inventoryItem ) )
|
||
{
|
||
Label = inventoryItem.Definition?.Name != ""
|
||
? $"{inventoryItem.Definition.Name} x{inventoryItem.Count}"
|
||
: "Подобрать";
|
||
}
|
||
}
|
||
|
||
public override bool Press( IPressable.Event e )
|
||
{
|
||
base.Press( e );
|
||
|
||
if ( e.Source.Components.TryGet<Dedugan>( out var dedugan ) )
|
||
{
|
||
var inventoryItem = Components.Get<InventoryItem>();
|
||
|
||
if ( inventoryItem != null && dedugan.Inventory != null )
|
||
{
|
||
// Пытаемся добавить предмет в инвентарь, остаток остаётся на земле
|
||
int left = dedugan.Inventory.AddItem( inventoryItem );
|
||
if ( left <= 0 )
|
||
{
|
||
RpcDestroy();
|
||
return true;
|
||
}
|
||
else
|
||
{
|
||
inventoryItem.Count = left;
|
||
// Оставляем предмет с новым количеством на земле
|
||
return true;
|
||
}
|
||
}
|
||
}
|
||
|
||
return false;
|
||
}
|
||
|
||
[Rpc.Broadcast]
|
||
void RpcDestroy()
|
||
{
|
||
GameObject.Destroy();
|
||
}
|
||
}
|