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
|
public Node2D? CurrentItem
|
||||||
{
|
{
|
||||||
get => _currentItem;
|
get => _currentItem;
|
||||||
set
|
protected set
|
||||||
{
|
{
|
||||||
_currentItem = value;
|
_currentItem = value;
|
||||||
WhenUpdateCurrentItem(_currentItem);
|
WhenUpdateCurrentItem(_currentItem);
|
||||||
|
@ -332,7 +332,6 @@ public partial class CharacterTemplate : CharacterBody2D
|
||||||
pickAbleTemplate.Sleeping = true;
|
pickAbleTemplate.Sleeping = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
var selectItem = selectItemSlotNode.GetItem();
|
|
||||||
if (_currentItem == null)
|
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.
|
//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>
|
/// </param>
|
||||||
private void ThrowOneItem(ItemSlotNode itemSlotNode, Vector2 velocity)
|
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();
|
var item = itemSlotNode.GetItem();
|
||||||
|
|
||||||
if (item is not Node2D node2D)
|
if (item is not Node2D node2D)
|
||||||
|
@ -717,6 +716,8 @@ public partial class CharacterTemplate : CharacterBody2D
|
||||||
rigidBody2D.LinearVelocity = velocity;
|
rigidBody2D.LinearVelocity = velocity;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
itemSlotNode.RemoveItem(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|
|
@ -12,13 +12,14 @@ namespace ColdMint.scripts.inventory;
|
||||||
public partial class HotBar : HBoxContainer
|
public partial class HotBar : HBoxContainer
|
||||||
{
|
{
|
||||||
private IItemContainer? _itemContainer;
|
private IItemContainer? _itemContainer;
|
||||||
|
|
||||||
Action<SelectedItemSlotChangeEvent>? SelectedItemSlotChangeEvent { get; set; }
|
Action<SelectedItemSlotChangeEvent>? SelectedItemSlotChangeEvent { get; set; }
|
||||||
|
|
||||||
public override void _Ready()
|
public override void _Ready()
|
||||||
{
|
{
|
||||||
base._Ready();
|
base._Ready();
|
||||||
_itemContainer = new UniversalItemContainer();
|
_itemContainer = new UniversalItemContainer();
|
||||||
|
_itemContainer.SupportSelect = true;
|
||||||
_itemContainer.SelectedItemSlotChangeEvent += SelectedItemSlotChangeEvent;
|
_itemContainer.SelectedItemSlotChangeEvent += SelectedItemSlotChangeEvent;
|
||||||
NodeUtils.DeleteAllChild(this);
|
NodeUtils.DeleteAllChild(this);
|
||||||
for (var i = 0; i < Config.HotBarSize; i++)
|
for (var i = 0; i < Config.HotBarSize; i++)
|
||||||
|
|
|
@ -19,7 +19,18 @@ public partial class ItemSlotNode : MarginContainer
|
||||||
private bool _isSelect;
|
private bool _isSelect;
|
||||||
private Texture2D? _backgroundTexture;
|
private Texture2D? _backgroundTexture;
|
||||||
private Texture2D? _backgroundTextureWhenSelect;
|
private Texture2D? _backgroundTextureWhenSelect;
|
||||||
private IItem? _item = null;
|
private IItem? _item;
|
||||||
|
|
||||||
|
public IItem? Item
|
||||||
|
{
|
||||||
|
set
|
||||||
|
{
|
||||||
|
//Set item
|
||||||
|
//设置物品
|
||||||
|
_item = value;
|
||||||
|
UpdateAllDisplay();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public override void _Ready()
|
public override void _Ready()
|
||||||
{
|
{
|
||||||
|
@ -79,6 +90,14 @@ public partial class ItemSlotNode : MarginContainer
|
||||||
return _item == null;
|
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()
|
public IItem? GetItem()
|
||||||
{
|
{
|
||||||
return _item;
|
return _item;
|
||||||
|
@ -100,15 +119,16 @@ public partial class ItemSlotNode : MarginContainer
|
||||||
}
|
}
|
||||||
|
|
||||||
var itemSlotNode = data.As<ItemSlotNode>();
|
var itemSlotNode = data.As<ItemSlotNode>();
|
||||||
var itemStack = itemSlotNode._item;
|
var item = itemSlotNode._item;
|
||||||
if (itemStack == null)
|
if (item == null)
|
||||||
{
|
{
|
||||||
//Return null when trying to get the source item heap.
|
//Return null when trying to get the source item.
|
||||||
//尝试获取源物品堆时返回null。
|
//尝试获取源物品时返回null。
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ReplaceItemStack(itemStack);
|
itemSlotNode.Item = null;
|
||||||
|
Item = item;
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool IsSelect
|
public bool IsSelect
|
||||||
|
@ -275,6 +295,11 @@ public partial class ItemSlotNode : MarginContainer
|
||||||
//实际移除的数量
|
//实际移除的数量
|
||||||
var removeNumber = number < 0 ? _item.Quantity : number;
|
var removeNumber = number < 0 ? _item.Quantity : number;
|
||||||
_item.Quantity -= removeNumber;
|
_item.Quantity -= removeNumber;
|
||||||
|
if (_item.Quantity <= 0)
|
||||||
|
{
|
||||||
|
Item = null;
|
||||||
|
}
|
||||||
|
|
||||||
return removeNumber;
|
return removeNumber;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -282,7 +307,8 @@ public partial class ItemSlotNode : MarginContainer
|
||||||
{
|
{
|
||||||
if (_item == null)
|
if (_item == null)
|
||||||
{
|
{
|
||||||
return false;
|
Item = item;
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
var newQuantity = item.Quantity + _item.Quantity;
|
var newQuantity = item.Quantity + _item.Quantity;
|
||||||
|
|
|
@ -166,7 +166,15 @@ public class UniversalItemContainer : IItemContainer
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
itemSlotNode.IsSelect = (_itemSlotNodes.Count) == _selectIndex;
|
if (SupportSelect)
|
||||||
|
{
|
||||||
|
itemSlotNode.IsSelect = _itemSlotNodes.Count == _selectIndex;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
itemSlotNode.IsSelect = false;
|
||||||
|
}
|
||||||
|
|
||||||
_itemSlotNodes.Add(itemSlotNode);
|
_itemSlotNodes.Add(itemSlotNode);
|
||||||
return itemSlotNode;
|
return itemSlotNode;
|
||||||
}
|
}
|
||||||
|
@ -216,7 +224,7 @@ public class UniversalItemContainer : IItemContainer
|
||||||
|
|
||||||
PrivateSelectItemSlot(oldSelectIndex, newSelectIndex);
|
PrivateSelectItemSlot(oldSelectIndex, newSelectIndex);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// <para>Select an item slot</para>
|
/// <para>Select an item slot</para>
|
||||||
/// <para>选中某个物品槽</para>
|
/// <para>选中某个物品槽</para>
|
||||||
|
@ -241,7 +249,7 @@ public class UniversalItemContainer : IItemContainer
|
||||||
});
|
});
|
||||||
_selectIndex = newSelectIndex;
|
_selectIndex = newSelectIndex;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// <para>HideItem</para>
|
/// <para>HideItem</para>
|
||||||
/// <para>隐藏某个物品</para>
|
/// <para>隐藏某个物品</para>
|
||||||
|
|
|
@ -37,7 +37,7 @@ public partial class PickAbleTemplate : RigidBody2D, IItem
|
||||||
[Export] private int _maxContactInjury = 2;
|
[Export] private int _maxContactInjury = 2;
|
||||||
|
|
||||||
public string? Description => UniqueDescription ?? ItemTypeManager.DefaultDescriptionOf(Id);
|
public string? Description => UniqueDescription ?? ItemTypeManager.DefaultDescriptionOf(Id);
|
||||||
public int Quantity { get; set; }
|
public int Quantity { get; set; } = 1;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// <para>The number of tile maps that come into contact with this item</para>
|
/// <para>The number of tile maps that come into contact with this item</para>
|
||||||
|
|
Loading…
Reference in New Issue
Block a user