Fixed an issue where items could not be thrown.
修复无法扔出物品的问题。
This commit is contained in:
parent
309a7b73d2
commit
53f830d5a6
|
@ -61,7 +61,7 @@ public partial class CharacterTemplate : CharacterBody2D
|
|||
public Node2D? CurrentItem
|
||||
{
|
||||
get => _currentItem;
|
||||
set
|
||||
protected set
|
||||
{
|
||||
_currentItem = value;
|
||||
WhenUpdateCurrentItem(_currentItem);
|
||||
|
@ -332,7 +332,6 @@ public partial class CharacterTemplate : CharacterBody2D
|
|||
pickAbleTemplate.Sleeping = true;
|
||||
}
|
||||
|
||||
var selectItem = selectItemSlotNode.GetItem();
|
||||
if (_currentItem == null)
|
||||
{
|
||||
//If the selected item slot in the item container is a newly picked item, and there is no item in the hand, then we put the selected item into the hand.
|
||||
|
@ -664,8 +663,8 @@ public partial class CharacterTemplate : CharacterBody2D
|
|||
/// </param>
|
||||
private void ThrowOneItem(ItemSlotNode itemSlotNode, Vector2 velocity)
|
||||
{
|
||||
//Pick an item from the item container
|
||||
//从物品容器内取出一个物品
|
||||
//Remove the item from the item container
|
||||
//从物品容器内取出物品
|
||||
var item = itemSlotNode.GetItem();
|
||||
|
||||
if (item is not Node2D node2D)
|
||||
|
@ -717,6 +716,8 @@ public partial class CharacterTemplate : CharacterBody2D
|
|||
rigidBody2D.LinearVelocity = velocity;
|
||||
break;
|
||||
}
|
||||
|
||||
itemSlotNode.RemoveItem(1);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
|
|
@ -12,13 +12,14 @@ namespace ColdMint.scripts.inventory;
|
|||
public partial class HotBar : HBoxContainer
|
||||
{
|
||||
private IItemContainer? _itemContainer;
|
||||
|
||||
|
||||
Action<SelectedItemSlotChangeEvent>? SelectedItemSlotChangeEvent { get; set; }
|
||||
|
||||
public override void _Ready()
|
||||
{
|
||||
base._Ready();
|
||||
_itemContainer = new UniversalItemContainer();
|
||||
_itemContainer.SupportSelect = true;
|
||||
_itemContainer.SelectedItemSlotChangeEvent += SelectedItemSlotChangeEvent;
|
||||
NodeUtils.DeleteAllChild(this);
|
||||
for (var i = 0; i < Config.HotBarSize; i++)
|
||||
|
|
|
@ -19,7 +19,18 @@ public partial class ItemSlotNode : MarginContainer
|
|||
private bool _isSelect;
|
||||
private Texture2D? _backgroundTexture;
|
||||
private Texture2D? _backgroundTextureWhenSelect;
|
||||
private IItem? _item = null;
|
||||
private IItem? _item;
|
||||
|
||||
public IItem? Item
|
||||
{
|
||||
set
|
||||
{
|
||||
//Set item
|
||||
//设置物品
|
||||
_item = value;
|
||||
UpdateAllDisplay();
|
||||
}
|
||||
}
|
||||
|
||||
public override void _Ready()
|
||||
{
|
||||
|
@ -79,6 +90,14 @@ public partial class ItemSlotNode : MarginContainer
|
|||
return _item == null;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// <para>Get the items in the item container</para>
|
||||
/// <para>获取物品容器内的物品</para>
|
||||
/// </summary>
|
||||
/// <returns>
|
||||
///<para>There may be multiple quantities</para>
|
||||
///<para>数量可能有多个</para>
|
||||
/// </returns>
|
||||
public IItem? GetItem()
|
||||
{
|
||||
return _item;
|
||||
|
@ -100,15 +119,16 @@ public partial class ItemSlotNode : MarginContainer
|
|||
}
|
||||
|
||||
var itemSlotNode = data.As<ItemSlotNode>();
|
||||
var itemStack = itemSlotNode._item;
|
||||
if (itemStack == null)
|
||||
var item = itemSlotNode._item;
|
||||
if (item == null)
|
||||
{
|
||||
//Return null when trying to get the source item heap.
|
||||
//尝试获取源物品堆时返回null。
|
||||
//Return null when trying to get the source item.
|
||||
//尝试获取源物品时返回null。
|
||||
return;
|
||||
}
|
||||
|
||||
// ReplaceItemStack(itemStack);
|
||||
itemSlotNode.Item = null;
|
||||
Item = item;
|
||||
}
|
||||
|
||||
public bool IsSelect
|
||||
|
@ -275,6 +295,11 @@ public partial class ItemSlotNode : MarginContainer
|
|||
//实际移除的数量
|
||||
var removeNumber = number < 0 ? _item.Quantity : number;
|
||||
_item.Quantity -= removeNumber;
|
||||
if (_item.Quantity <= 0)
|
||||
{
|
||||
Item = null;
|
||||
}
|
||||
|
||||
return removeNumber;
|
||||
}
|
||||
|
||||
|
@ -282,7 +307,8 @@ public partial class ItemSlotNode : MarginContainer
|
|||
{
|
||||
if (_item == null)
|
||||
{
|
||||
return false;
|
||||
Item = item;
|
||||
return true;
|
||||
}
|
||||
|
||||
var newQuantity = item.Quantity + _item.Quantity;
|
||||
|
|
|
@ -166,7 +166,15 @@ public class UniversalItemContainer : IItemContainer
|
|||
return null;
|
||||
}
|
||||
|
||||
itemSlotNode.IsSelect = (_itemSlotNodes.Count) == _selectIndex;
|
||||
if (SupportSelect)
|
||||
{
|
||||
itemSlotNode.IsSelect = _itemSlotNodes.Count == _selectIndex;
|
||||
}
|
||||
else
|
||||
{
|
||||
itemSlotNode.IsSelect = false;
|
||||
}
|
||||
|
||||
_itemSlotNodes.Add(itemSlotNode);
|
||||
return itemSlotNode;
|
||||
}
|
||||
|
@ -216,7 +224,7 @@ public class UniversalItemContainer : IItemContainer
|
|||
|
||||
PrivateSelectItemSlot(oldSelectIndex, newSelectIndex);
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// <para>Select an item slot</para>
|
||||
/// <para>选中某个物品槽</para>
|
||||
|
@ -241,7 +249,7 @@ public class UniversalItemContainer : IItemContainer
|
|||
});
|
||||
_selectIndex = newSelectIndex;
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// <para>HideItem</para>
|
||||
/// <para>隐藏某个物品</para>
|
||||
|
|
|
@ -37,7 +37,7 @@ public partial class PickAbleTemplate : RigidBody2D, IItem
|
|||
[Export] private int _maxContactInjury = 2;
|
||||
|
||||
public string? Description => UniqueDescription ?? ItemTypeManager.DefaultDescriptionOf(Id);
|
||||
public int Quantity { get; set; }
|
||||
public int Quantity { get; set; } = 1;
|
||||
|
||||
/// <summary>
|
||||
/// <para>The number of tile maps that come into contact with this item</para>
|
||||
|
|
Loading…
Reference in New Issue
Block a user