Fixed an issue where the number of weapons to be picked up after being thrown is 0, making it impossible to throw them again.
解决武器扔出后再捡起数量为0,导致无法再次扔出的问题。
This commit is contained in:
parent
dea683dbc5
commit
1b440b828f
|
@ -664,14 +664,13 @@ public partial class CharacterTemplate : CharacterBody2D
|
||||||
{
|
{
|
||||||
//Remove the item from the item container
|
//Remove the item from the item container
|
||||||
//从物品容器内取出物品
|
//从物品容器内取出物品
|
||||||
var item = itemSlotNode.GetItem();
|
var item = itemSlotNode.CreateItemInstance(1);
|
||||||
|
|
||||||
if (item is not Node2D node2D)
|
if (item is not Node2D node2D)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
NodeUtils.CallDeferredReparent(NodeUtils.FindContainerNode(this, GetNode("/root")), this);
|
NodeUtils.CallDeferredAddChild(NodeUtils.FindContainerNode(node2D, GetNode("/root")), node2D);
|
||||||
switch (item)
|
switch (item)
|
||||||
{
|
{
|
||||||
case PickAbleTemplate pickAbleTemplate:
|
case PickAbleTemplate pickAbleTemplate:
|
||||||
|
@ -684,6 +683,7 @@ public partial class CharacterTemplate : CharacterBody2D
|
||||||
var timer = new Timer();
|
var timer = new Timer();
|
||||||
pickAbleTemplate.AddChild(timer);
|
pickAbleTemplate.AddChild(timer);
|
||||||
timer.WaitTime = _itemCollisionRecoveryTime;
|
timer.WaitTime = _itemCollisionRecoveryTime;
|
||||||
|
timer.Autostart = true;
|
||||||
timer.OneShot = true;
|
timer.OneShot = true;
|
||||||
timer.Timeout += () =>
|
timer.Timeout += () =>
|
||||||
{
|
{
|
||||||
|
@ -694,7 +694,6 @@ public partial class CharacterTemplate : CharacterBody2D
|
||||||
pickAbleTemplate.SetCollisionMaskValue(Config.LayerNumber.Platform, true);
|
pickAbleTemplate.SetCollisionMaskValue(Config.LayerNumber.Platform, true);
|
||||||
timer.QueueFree();
|
timer.QueueFree();
|
||||||
};
|
};
|
||||||
timer.Start();
|
|
||||||
pickAbleTemplate.Sleeping = false;
|
pickAbleTemplate.Sleeping = false;
|
||||||
//Setting an initial speed of 0 for items here prevents the problem of throwing items too fast.
|
//Setting an initial speed of 0 for items here prevents the problem of throwing items too fast.
|
||||||
//在这里给物品设置一个为0的初始速度,可防止扔出物品时速度过快的问题。
|
//在这里给物品设置一个为0的初始速度,可防止扔出物品时速度过快的问题。
|
||||||
|
|
|
@ -121,6 +121,12 @@ public partial class ItemSlotNode : MarginContainer
|
||||||
}
|
}
|
||||||
|
|
||||||
var duplicate = node2D.Duplicate();
|
var duplicate = node2D.Duplicate();
|
||||||
|
if (duplicate is not Node2D newNode2D)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
newNode2D.GlobalPosition = node2D.GlobalPosition;
|
||||||
if (duplicate is not IItem newItem)
|
if (duplicate is not IItem newItem)
|
||||||
{
|
{
|
||||||
return null;
|
return null;
|
||||||
|
@ -138,6 +144,26 @@ public partial class ItemSlotNode : MarginContainer
|
||||||
return newItem;
|
return newItem;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// <para>Empty the inventory</para>
|
||||||
|
/// <para>清空物品栏内的物品</para>
|
||||||
|
/// </summary>
|
||||||
|
public void ClearItem()
|
||||||
|
{
|
||||||
|
if (_item == null)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (_item is Node node)
|
||||||
|
{
|
||||||
|
node.QueueFree();
|
||||||
|
}
|
||||||
|
|
||||||
|
_item = null;
|
||||||
|
UpdateAllDisplay();
|
||||||
|
}
|
||||||
|
|
||||||
public override void _DropData(Vector2 atPosition, Variant data)
|
public override void _DropData(Vector2 atPosition, Variant data)
|
||||||
{
|
{
|
||||||
if (_iconTextureRect == null)
|
if (_iconTextureRect == null)
|
||||||
|
@ -162,7 +188,7 @@ public partial class ItemSlotNode : MarginContainer
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
itemSlotNode.Item = null;
|
itemSlotNode.ClearItem();
|
||||||
AddItem(item);
|
AddItem(item);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -344,7 +370,7 @@ public partial class ItemSlotNode : MarginContainer
|
||||||
_item.Quantity -= removeNumber;
|
_item.Quantity -= removeNumber;
|
||||||
if (_item.Quantity <= 0)
|
if (_item.Quantity <= 0)
|
||||||
{
|
{
|
||||||
Item = null;
|
ClearItem();
|
||||||
}
|
}
|
||||||
|
|
||||||
return removeNumber;
|
return removeNumber;
|
||||||
|
|
|
@ -46,7 +46,7 @@ public static class NodeUtils
|
||||||
/// <param name="childNode"></param>
|
/// <param name="childNode"></param>
|
||||||
public static void CallDeferredReparent(Node parentNode, Node childNode)
|
public static void CallDeferredReparent(Node parentNode, Node childNode)
|
||||||
{
|
{
|
||||||
parentNode.CallDeferred("reparent", childNode);
|
childNode.CallDeferred("reparent", parentNode);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user