Add CanPutInPack property of IItem
This commit is contained in:
parent
ced2618a5e
commit
3063680786
|
@ -26,6 +26,14 @@ public interface IItem
|
||||||
/// <para>当前项目的描述</para>
|
/// <para>当前项目的描述</para>
|
||||||
/// </summary>
|
/// </summary>
|
||||||
string? Description { get; }
|
string? Description { get; }
|
||||||
|
/// <summary>
|
||||||
|
/// <para>
|
||||||
|
/// Whether the current item can be put into item containers like packsack.<br/>
|
||||||
|
/// This attribute is usually set to false for items of the backpack class to avoid pack nesting.
|
||||||
|
/// </para>
|
||||||
|
/// <para>当前物品是否可以放入背包类的容器中。一般将背包类物品的该属性设为false来避免背包嵌套。</para>
|
||||||
|
/// </summary>
|
||||||
|
bool CanPutInPack { get; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// <para>Execute when current item is used <br/> e.g. when player clicks left mouse button with current item in hand</para>
|
/// <para>Execute when current item is used <br/> e.g. when player clicks left mouse button with current item in hand</para>
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
using ColdMint.scripts.inventory;
|
using ColdMint.scripts.inventory;
|
||||||
using ColdMint.scripts.pickable;
|
using ColdMint.scripts.pickable;
|
||||||
using ColdMint.scripts.utils;
|
using ColdMint.scripts.utils;
|
||||||
|
|
||||||
using Godot;
|
using Godot;
|
||||||
|
|
||||||
namespace ColdMint.scripts.item;
|
namespace ColdMint.scripts.item;
|
||||||
|
@ -14,6 +15,8 @@ public partial class Packsack : PickAbleTemplate
|
||||||
private PackedScene? _packedScene;
|
private PackedScene? _packedScene;
|
||||||
private PacksackUi? _packsackUi;
|
private PacksackUi? _packsackUi;
|
||||||
|
|
||||||
|
public override bool CanPutInPack => false;
|
||||||
|
|
||||||
public override void Destroy()
|
public override void Destroy()
|
||||||
{
|
{
|
||||||
if (ItemContainer == null) return;
|
if (ItemContainer == null) return;
|
||||||
|
@ -31,10 +34,12 @@ public partial class Packsack : PickAbleTemplate
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_packsackUi == null)
|
if (_packsackUi == null)
|
||||||
{
|
{
|
||||||
_packsackUi = NodeUtils.InstantiatePackedScene<PacksackUi>(_packedScene,this);
|
_packsackUi = NodeUtils.InstantiatePackedScene<PacksackUi>(_packedScene, this);
|
||||||
}
|
}
|
||||||
|
|
||||||
_packsackUi?.Show();
|
_packsackUi?.Show();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -45,6 +50,5 @@ public partial class Packsack : PickAbleTemplate
|
||||||
base._Ready();
|
base._Ready();
|
||||||
ItemContainer = new UniversalItemContainer();
|
ItemContainer = new UniversalItemContainer();
|
||||||
_packedScene = GD.Load<PackedScene>("res://prefab/ui/packsackUI.tscn");
|
_packedScene = GD.Load<PackedScene>("res://prefab/ui/packsackUI.tscn");
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -17,17 +17,16 @@ public class PacksackStack(Packsack packsack) : IItemStack
|
||||||
public Texture2D Icon => packsack.Icon;
|
public Texture2D Icon => packsack.Icon;
|
||||||
public string Name => packsack.Name;
|
public string Name => packsack.Name;
|
||||||
public string? Description => packsack.Description;
|
public string? Description => packsack.Description;
|
||||||
|
|
||||||
//todo: 只拒绝是背包的物品是权宜之计,应该为物品加入一个“是否可以放入背包”的属性来实现这个判断。
|
|
||||||
public bool CanAddItem(IItem item)
|
public bool CanAddItem(IItem item)
|
||||||
{
|
{
|
||||||
if (item is Packsack) return false;
|
if (!item.CanPutInPack) return false;
|
||||||
return packsack.ItemContainer?.CanAddItem(item) ?? false;
|
return packsack.ItemContainer?.CanAddItem(item) ?? false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool AddItem(IItem item)
|
public bool AddItem(IItem item)
|
||||||
{
|
{
|
||||||
if (item is Packsack) return false;
|
if (!item.CanPutInPack) return false;
|
||||||
return packsack.ItemContainer?.AddItem(item) ?? false;
|
return packsack.ItemContainer?.AddItem(item) ?? false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -21,6 +21,7 @@ public partial class PickAbleTemplate : RigidBody2D, IItem
|
||||||
[Export] protected string? UniqueName { get; set; }
|
[Export] protected string? UniqueName { get; set; }
|
||||||
public new string Name => UniqueName ?? ItemTypeManager.DefaultNameOf(Id);
|
public new string Name => UniqueName ?? ItemTypeManager.DefaultNameOf(Id);
|
||||||
[Export] protected string? UniqueDescription { get; set; }
|
[Export] protected string? UniqueDescription { get; set; }
|
||||||
|
public virtual bool CanPutInPack => true;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// <para>Owner</para>
|
/// <para>Owner</para>
|
||||||
|
|
Loading…
Reference in New Issue
Block a user