(temp):
Just a small refactoring in the huge interaction code (regarding ItemSlot and ItemStack), but I think it's necessary to leave a save point, after all, I have to go to sleep first
This commit is contained in:
parent
7f20a7233c
commit
e9656d6992
|
@ -277,7 +277,7 @@ public partial class CharacterTemplate : CharacterBody2D
|
||||||
{
|
{
|
||||||
//Empty reference checking is implicitly performed here.
|
//Empty reference checking is implicitly performed here.
|
||||||
//此处隐式的执行了空引用检查。
|
//此处隐式的执行了空引用检查。
|
||||||
if (pickAbleItem is not IItem item)
|
if (pickAbleItem is not IItem_New item)
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,6 +3,7 @@ using Godot;
|
||||||
|
|
||||||
namespace ColdMint.scripts.inventory;
|
namespace ColdMint.scripts.inventory;
|
||||||
|
|
||||||
|
/*
|
||||||
public interface IItem
|
public interface IItem
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -54,3 +55,4 @@ public interface IItem
|
||||||
/// </summary>
|
/// </summary>
|
||||||
Func<IItem, Node>? OnInstantiation { get; set; }
|
Func<IItem, Node>? OnInstantiation { get; set; }
|
||||||
}
|
}
|
||||||
|
*/
|
|
@ -1,4 +1,6 @@
|
||||||
namespace ColdMint.scripts.inventory;
|
using ColdMint.scripts.item;
|
||||||
|
|
||||||
|
namespace ColdMint.scripts.inventory;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// <para>item container</para>
|
/// <para>item container</para>
|
||||||
|
@ -16,7 +18,7 @@ public interface IItemContainer
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="item"></param>
|
/// <param name="item"></param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
bool CanAddItem(IItem item);
|
bool CanAddItem(IItem_New item);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// <para>Implement methods for adding items</para>
|
/// <para>Implement methods for adding items</para>
|
||||||
|
@ -24,7 +26,7 @@ public interface IItemContainer
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="item"></param>
|
/// <param name="item"></param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
bool AddItem(IItem item);
|
bool AddItem(IItem_New item);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// <para>Gets the selected location</para>
|
/// <para>Gets the selected location</para>
|
||||||
|
@ -81,5 +83,5 @@ public interface IItemContainer
|
||||||
///<para>Return null if there is no slot to place the item in</para>
|
///<para>Return null if there is no slot to place the item in</para>
|
||||||
///<para>若没有槽可放置此物品,则返回null</para>
|
///<para>若没有槽可放置此物品,则返回null</para>
|
||||||
/// </returns>
|
/// </returns>
|
||||||
ItemSlotNode? Matching(IItem item);
|
ItemSlotNode? Matching(IItem_New item);
|
||||||
}
|
}
|
|
@ -1,4 +1,6 @@
|
||||||
|
using ColdMint.scripts.item;
|
||||||
using ColdMint.scripts.utils;
|
using ColdMint.scripts.utils;
|
||||||
|
|
||||||
using Godot;
|
using Godot;
|
||||||
|
|
||||||
namespace ColdMint.scripts.inventory;
|
namespace ColdMint.scripts.inventory;
|
||||||
|
@ -9,7 +11,8 @@ namespace ColdMint.scripts.inventory;
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public partial class ItemSlotNode : MarginContainer
|
public partial class ItemSlotNode : MarginContainer
|
||||||
{
|
{
|
||||||
private IItem? _item;
|
//private IItem? _item;
|
||||||
|
private IItemStack? _itemStack;
|
||||||
private TextureRect? _backgroundTextureRect;
|
private TextureRect? _backgroundTextureRect;
|
||||||
private TextureRect? _iconTextureRect;
|
private TextureRect? _iconTextureRect;
|
||||||
private Label? _quantityLabel;
|
private Label? _quantityLabel;
|
||||||
|
@ -35,56 +38,69 @@ public partial class ItemSlotNode : MarginContainer
|
||||||
public TextureRect? BackgroundTextureRect => _backgroundTextureRect;
|
public TextureRect? BackgroundTextureRect => _backgroundTextureRect;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// <para>Get the items in the item slot</para>
|
/// <para>Get the item stack in the item slot</para>
|
||||||
/// <para>获取物品槽内的物品</para>
|
/// <para>获取物品槽内的物品堆</para>
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public IItem? GetItem()
|
public IItemStack GetItemStack() => _itemStack;
|
||||||
{
|
|
||||||
return _item;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// <para>Removes the specified number of items from the item slot</para>
|
/// <para>Removes the specified number of items from the item slot</para>
|
||||||
/// <para>在物品槽内移除指定数量的物品</para>
|
/// <para>在物品槽内移除指定数量的物品</para>
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="number"></param>
|
/// <param name="number"></param>
|
||||||
/// <returns></returns>
|
/// <returns>
|
||||||
public bool RemoveItem(int number)
|
/// <para>The remaining number, if the number of items in the current item stack is less than the specified number. Otherwise,0</para>
|
||||||
|
/// <para>若物品槽内物品少于指定的数量,返回相差的数量。否则返回0</para>
|
||||||
|
/// </returns>
|
||||||
|
public int RemoveItem(int number)
|
||||||
{
|
{
|
||||||
if (_item == null)
|
if (_itemStack == null)
|
||||||
{
|
{
|
||||||
return false;
|
return number;
|
||||||
}
|
}
|
||||||
|
|
||||||
var newNumber = _item.Quantity - number;
|
var result = _itemStack.RemoveItem(number);
|
||||||
if (newNumber <= 0)
|
//If the specified number of items is removed, the number of items is less than or equal to 0. Then we empty the inventory.
|
||||||
{
|
//如果移除指定数量的物品后,物品数量小于或等于0。那么我们清空物品栏。
|
||||||
//If the specified number of items is removed, the number of items is less than or equal to 0. Then we return the removal successful and empty the inventory.
|
if (_itemStack.Quantity == 0) ClearSlot();
|
||||||
//如果移除指定数量的物品后,物品数量小于或等于0。那么我们返回移除成功,并清空物品栏。
|
|
||||||
ClearItem();
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
_item.Quantity = newNumber;
|
UpdateTooltipText(_itemStack);
|
||||||
UpdateTooltipText(_item);
|
UpdateQuantityLabel(_itemStack.Quantity);
|
||||||
UpdateQuantityLabel(_item.Quantity);
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
|
||||||
|
// var newNumber = _item.Quantity - number;
|
||||||
|
// if (newNumber <= 0)
|
||||||
|
// {
|
||||||
|
// //If the specified number of items is removed, the number of items is less than or equal to 0. Then we return the removal successful and empty the inventory.
|
||||||
|
// //如果移除指定数量的物品后,物品数量小于或等于0。那么我们返回移除成功,并清空物品栏。
|
||||||
|
// ClearItem();
|
||||||
|
// return true;
|
||||||
|
// }
|
||||||
|
// else
|
||||||
|
// {
|
||||||
|
// _item.Quantity = newNumber;
|
||||||
|
// UpdateTooltipText(_item);
|
||||||
|
// UpdateQuantityLabel(_item.Quantity);
|
||||||
|
// return true;
|
||||||
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// <para>Empty the items in the item slot</para>
|
/// <para>Empty the item slot</para>
|
||||||
/// <para>清空物品槽内的物品</para>
|
/// <para>清空物品槽</para>
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <remarks>
|
/// <remarks>
|
||||||
///<para>This method does not calculate how many items should be left. If you want to remove a specified number of items, call the RemoveItem method.</para>
|
///<para>This method does not calculate how many items should be left. If you want to remove a specified number of items, call the <see cref="RemoveItem"/> method.</para>
|
||||||
///<para>此方法不会计算物品应该剩余多少个。若您希望移除指定数量的物品,请调用RemoveItem方法。</para>
|
///<para>此方法不会计算物品应该剩余多少个。若您希望移除指定数量的物品,请调用<see cref="RemoveItem"/>方法。</para>
|
||||||
/// </remarks>
|
/// </remarks>
|
||||||
public void ClearItem()
|
public void ClearSlot()
|
||||||
{
|
{
|
||||||
_item = null;
|
_itemStack = null;
|
||||||
|
|
||||||
if (_iconTextureRect != null)
|
if (_iconTextureRect != null)
|
||||||
{
|
{
|
||||||
_iconTextureRect.Texture = null;
|
_iconTextureRect.Texture = null;
|
||||||
|
@ -95,12 +111,10 @@ public partial class ItemSlotNode : MarginContainer
|
||||||
_control.TooltipText = null;
|
_control.TooltipText = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_quantityLabel != null)
|
_quantityLabel?.Hide();
|
||||||
{
|
|
||||||
_quantityLabel.Hide();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//Todo: I searched until here.
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// <para>Can the specified item be placed in the item slot?</para>
|
/// <para>Can the specified item be placed in the item slot?</para>
|
||||||
|
@ -186,9 +200,9 @@ public partial class ItemSlotNode : MarginContainer
|
||||||
if (debugText != null)
|
if (debugText != null)
|
||||||
{
|
{
|
||||||
_control.TooltipText = string.Format(debugText, item.Id,
|
_control.TooltipText = string.Format(debugText, item.Id,
|
||||||
TranslationServerUtils.Translate(item.Name),
|
TranslationServerUtils.Translate(item.Name),
|
||||||
item.Quantity, item.MaxStackQuantity, item.GetType().Name,
|
item.Quantity, item.MaxStackQuantity, item.GetType().Name,
|
||||||
TranslationServerUtils.Translate(item.Description));
|
TranslationServerUtils.Translate(item.Description));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
|
@ -37,6 +37,17 @@ public interface IItemStack
|
||||||
string? Description { get; }
|
string? Description { get; }
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// <para>Removes the specified number of items from current item stack</para>
|
||||||
|
/// <para>在当前物品堆移除指定数量的物品</para>
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="number"></param>
|
||||||
|
/// <returns>
|
||||||
|
/// <para>The remaining number, if the number of items in the current item stack is less than the specified number. Otherwise,0</para>
|
||||||
|
/// <para>若物品槽内物品少于指定的数量,返回相差的数量。否则返回0</para>
|
||||||
|
/// </returns>
|
||||||
|
public int RemoveItem(int number);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Create a new ItemStack with the given item as the first item
|
/// Create a new ItemStack with the given item as the first item
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
Loading…
Reference in New Issue
Block a user