Backpack Ui will not prevent clicking the button below anymore.
背包Ui不会阻止点击下面的按钮了。
This commit is contained in:
parent
8391396191
commit
c1f0e30671
|
@ -13,7 +13,10 @@ size = Vector2(21, 29)
|
||||||
collision_layer = 8
|
collision_layer = 8
|
||||||
collision_mask = 38
|
collision_mask = 38
|
||||||
script = ExtResource("1_slakl")
|
script = ExtResource("1_slakl")
|
||||||
|
NumberSlots = 30
|
||||||
Id = "packsack"
|
Id = "packsack"
|
||||||
|
UniqueName = null
|
||||||
|
UniqueDescription = null
|
||||||
_minContactInjury = null
|
_minContactInjury = null
|
||||||
_maxContactInjury = null
|
_maxContactInjury = null
|
||||||
|
|
||||||
|
|
|
@ -7,6 +7,7 @@
|
||||||
offset_right = 38.0
|
offset_right = 38.0
|
||||||
offset_bottom = 38.0
|
offset_bottom = 38.0
|
||||||
size_flags_vertical = 3
|
size_flags_vertical = 3
|
||||||
|
mouse_filter = 0
|
||||||
theme_override_constants/margin_left = 3
|
theme_override_constants/margin_left = 3
|
||||||
theme_override_constants/margin_top = 3
|
theme_override_constants/margin_top = 3
|
||||||
theme_override_constants/margin_right = 3
|
theme_override_constants/margin_right = 3
|
||||||
|
@ -15,6 +16,7 @@ script = ExtResource("1_fbwot")
|
||||||
|
|
||||||
[node name="BackgroundTexture" type="TextureRect" parent="."]
|
[node name="BackgroundTexture" type="TextureRect" parent="."]
|
||||||
layout_mode = 2
|
layout_mode = 2
|
||||||
|
mouse_filter = 2
|
||||||
texture = ExtResource("1_y2wyt")
|
texture = ExtResource("1_y2wyt")
|
||||||
|
|
||||||
[node name="IconTextureRect" type="TextureRect" parent="BackgroundTexture"]
|
[node name="IconTextureRect" type="TextureRect" parent="BackgroundTexture"]
|
||||||
|
@ -28,10 +30,12 @@ offset_right = -3.0
|
||||||
offset_bottom = -3.0
|
offset_bottom = -3.0
|
||||||
grow_horizontal = 2
|
grow_horizontal = 2
|
||||||
grow_vertical = 2
|
grow_vertical = 2
|
||||||
|
mouse_filter = 2
|
||||||
expand_mode = 1
|
expand_mode = 1
|
||||||
|
|
||||||
[node name="Control" type="Control" parent="."]
|
[node name="Control" type="Control" parent="."]
|
||||||
layout_mode = 2
|
layout_mode = 2
|
||||||
|
mouse_filter = 2
|
||||||
|
|
||||||
[node name="QuantityLabel" type="Label" parent="Control"]
|
[node name="QuantityLabel" type="Label" parent="Control"]
|
||||||
layout_mode = 1
|
layout_mode = 1
|
||||||
|
|
|
@ -9,46 +9,37 @@ anchor_right = 1.0
|
||||||
anchor_bottom = 1.0
|
anchor_bottom = 1.0
|
||||||
grow_horizontal = 2
|
grow_horizontal = 2
|
||||||
grow_vertical = 2
|
grow_vertical = 2
|
||||||
|
mouse_filter = 2
|
||||||
script = ExtResource("1_wm4bu")
|
script = ExtResource("1_wm4bu")
|
||||||
|
|
||||||
[node name="ColorRect" type="ColorRect" parent="."]
|
|
||||||
layout_mode = 1
|
|
||||||
anchors_preset = 15
|
|
||||||
anchor_right = 1.0
|
|
||||||
anchor_bottom = 1.0
|
|
||||||
grow_horizontal = 2
|
|
||||||
grow_vertical = 2
|
|
||||||
color = Color(0, 0, 0, 0.294118)
|
|
||||||
|
|
||||||
[node name="TitleLabel" type="Label" parent="."]
|
[node name="TitleLabel" type="Label" parent="."]
|
||||||
layout_mode = 1
|
layout_mode = 1
|
||||||
anchors_preset = 10
|
anchors_preset = 10
|
||||||
anchor_right = 1.0
|
anchor_right = 1.0
|
||||||
offset_bottom = 30.0
|
offset_bottom = 25.0
|
||||||
grow_horizontal = 2
|
grow_horizontal = 2
|
||||||
text = "ui_name"
|
text = "ui_name"
|
||||||
horizontal_alignment = 1
|
horizontal_alignment = 1
|
||||||
|
|
||||||
[node name="GridContainer" type="GridContainer" parent="."]
|
|
||||||
layout_mode = 1
|
|
||||||
anchors_preset = 15
|
|
||||||
anchor_right = 1.0
|
|
||||||
anchor_bottom = 1.0
|
|
||||||
offset_left = 36.0
|
|
||||||
offset_top = 57.0
|
|
||||||
offset_right = -34.0
|
|
||||||
offset_bottom = -23.0
|
|
||||||
grow_horizontal = 2
|
|
||||||
grow_vertical = 2
|
|
||||||
|
|
||||||
[node name="ExitButton" type="Button" parent="."]
|
[node name="ExitButton" type="Button" parent="."]
|
||||||
layout_mode = 1
|
layout_mode = 1
|
||||||
anchors_preset = 1
|
anchors_preset = 1
|
||||||
anchor_left = 1.0
|
anchor_left = 1.0
|
||||||
anchor_right = 1.0
|
anchor_right = 1.0
|
||||||
offset_left = -75.0
|
offset_left = -91.0
|
||||||
offset_top = 8.0
|
offset_top = 11.0
|
||||||
offset_right = -8.0
|
offset_right = -24.0
|
||||||
offset_bottom = 41.0
|
offset_bottom = 44.0
|
||||||
grow_horizontal = 0
|
grow_horizontal = 0
|
||||||
text = "ui_close"
|
text = "ui_close"
|
||||||
|
|
||||||
|
[node name="HFlowContainer" type="HFlowContainer" parent="."]
|
||||||
|
layout_mode = 1
|
||||||
|
anchors_preset = 10
|
||||||
|
anchor_right = 1.0
|
||||||
|
offset_left = 26.0
|
||||||
|
offset_top = 70.0
|
||||||
|
offset_right = -29.0
|
||||||
|
offset_bottom = 389.0
|
||||||
|
grow_horizontal = 2
|
||||||
|
mouse_filter = 2
|
||||||
|
|
|
@ -91,6 +91,7 @@ anchor_right = 1.0
|
||||||
anchor_bottom = 1.0
|
anchor_bottom = 1.0
|
||||||
grow_horizontal = 2
|
grow_horizontal = 2
|
||||||
grow_vertical = 2
|
grow_vertical = 2
|
||||||
|
mouse_filter = 2
|
||||||
|
|
||||||
[node name="GameOverMenu" parent="CanvasLayer" instance=ExtResource("6_yjmrv")]
|
[node name="GameOverMenu" parent="CanvasLayer" instance=ExtResource("6_yjmrv")]
|
||||||
visible = false
|
visible = false
|
||||||
|
|
|
@ -219,7 +219,7 @@ public interface IItemContainer : IEnumerable<ItemSlotNode>
|
||||||
/// <para>添加物品槽</para>
|
/// <para>添加物品槽</para>
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="rootNode"></param>
|
/// <param name="rootNode"></param>
|
||||||
void AddItemSlot(Node rootNode);
|
ItemSlotNode? AddItemSlot(Node rootNode);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// <para>SelectTheNextItemSlot</para>
|
/// <para>SelectTheNextItemSlot</para>
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
|
using ColdMint.scripts.debug;
|
||||||
using ColdMint.scripts.item;
|
using ColdMint.scripts.item;
|
||||||
using ColdMint.scripts.item.itemStacks;
|
using ColdMint.scripts.item.itemStacks;
|
||||||
using ColdMint.scripts.utils;
|
using ColdMint.scripts.utils;
|
||||||
|
|
||||||
using Godot;
|
using Godot;
|
||||||
|
|
||||||
namespace ColdMint.scripts.inventory;
|
namespace ColdMint.scripts.inventory;
|
||||||
|
@ -21,6 +21,34 @@ public partial class ItemSlotNode : MarginContainer
|
||||||
private Texture2D? _backgroundTexture;
|
private Texture2D? _backgroundTexture;
|
||||||
private Texture2D? _backgroundTextureWhenSelect;
|
private Texture2D? _backgroundTextureWhenSelect;
|
||||||
|
|
||||||
|
public override Variant _GetDragData(Vector2 atPosition)
|
||||||
|
{
|
||||||
|
if (_iconTextureRect == null)
|
||||||
|
{
|
||||||
|
return base._GetDragData(atPosition);
|
||||||
|
}
|
||||||
|
|
||||||
|
var textureRect = new TextureRect();
|
||||||
|
textureRect.ExpandMode = _iconTextureRect.ExpandMode;
|
||||||
|
textureRect.Size = _iconTextureRect.Size;
|
||||||
|
textureRect.Texture = _iconTextureRect.Texture;
|
||||||
|
SetDragPreview(textureRect);
|
||||||
|
return Variant.From(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override bool _CanDropData(Vector2 atPosition, Variant data)
|
||||||
|
{
|
||||||
|
if (_iconTextureRect == null)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
//TODO:在这里判断是否可以放置物品。物品槽必须是空的。
|
||||||
|
// var itemSlotNode = data.As<ItemSlotNode>();
|
||||||
|
// itemSlotNode._itemStack
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
public bool IsSelect
|
public bool IsSelect
|
||||||
{
|
{
|
||||||
get => _isSelect;
|
get => _isSelect;
|
||||||
|
@ -272,9 +300,9 @@ public partial class ItemSlotNode : MarginContainer
|
||||||
if (debugText != null)
|
if (debugText != null)
|
||||||
{
|
{
|
||||||
_control.TooltipText = string.Format(debugText, _itemStack.GetItem()?.Id,
|
_control.TooltipText = string.Format(debugText, _itemStack.GetItem()?.Id,
|
||||||
TranslationServerUtils.Translate(_itemStack.Name),
|
TranslationServerUtils.Translate(_itemStack.Name),
|
||||||
_itemStack.Quantity, _itemStack.MaxQuantity, _itemStack.GetType().Name,
|
_itemStack.Quantity, _itemStack.MaxQuantity, _itemStack.GetType().Name,
|
||||||
TranslationServerUtils.Translate(_itemStack.Description));
|
TranslationServerUtils.Translate(_itemStack.Description));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
|
@ -2,14 +2,11 @@
|
||||||
using System.Collections;
|
using System.Collections;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
|
|
||||||
using ColdMint.scripts.character;
|
using ColdMint.scripts.character;
|
||||||
using ColdMint.scripts.item;
|
using ColdMint.scripts.item;
|
||||||
using ColdMint.scripts.item.itemStacks;
|
using ColdMint.scripts.item.itemStacks;
|
||||||
using ColdMint.scripts.utils;
|
using ColdMint.scripts.utils;
|
||||||
|
|
||||||
using Godot;
|
using Godot;
|
||||||
|
|
||||||
using JetBrains.Annotations;
|
using JetBrains.Annotations;
|
||||||
|
|
||||||
namespace ColdMint.scripts.inventory;
|
namespace ColdMint.scripts.inventory;
|
||||||
|
@ -62,7 +59,7 @@ public class UniversalItemContainer : IItemContainer
|
||||||
var slots = MatchAll(slot => slot.CanAddItem(testItem));
|
var slots = MatchAll(slot => slot.CanAddItem(testItem));
|
||||||
return
|
return
|
||||||
Math.Min(itemStack.Quantity,
|
Math.Min(itemStack.Quantity,
|
||||||
slots.Select(slot => slot.CanAddItemStack(itemStack)).Sum());
|
slots.Select(slot => slot.CanAddItemStack(itemStack)).Sum());
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool AddItemStack(IItemStack itemStack)
|
public bool AddItemStack(IItemStack itemStack)
|
||||||
|
@ -222,21 +219,22 @@ public class UniversalItemContainer : IItemContainer
|
||||||
/// <para>Add items tank</para>
|
/// <para>Add items tank</para>
|
||||||
/// <para>添加物品槽</para>
|
/// <para>添加物品槽</para>
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public void AddItemSlot(Node rootNode)
|
public ItemSlotNode? AddItemSlot(Node rootNode)
|
||||||
{
|
{
|
||||||
if (_itemSlotNodes == null || _itemSlotPackedScene == null)
|
if (_itemSlotNodes == null || _itemSlotPackedScene == null)
|
||||||
{
|
{
|
||||||
return;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
var itemSlotNode = NodeUtils.InstantiatePackedScene<ItemSlotNode>(_itemSlotPackedScene, rootNode);
|
var itemSlotNode = NodeUtils.InstantiatePackedScene<ItemSlotNode>(_itemSlotPackedScene, rootNode);
|
||||||
if (itemSlotNode == null)
|
if (itemSlotNode == null)
|
||||||
{
|
{
|
||||||
return;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
itemSlotNode.IsSelect = (_itemSlotNodes.Count) == _selectIndex;
|
itemSlotNode.IsSelect = (_itemSlotNodes.Count) == _selectIndex;
|
||||||
_itemSlotNodes.Add(itemSlotNode);
|
_itemSlotNodes.Add(itemSlotNode);
|
||||||
|
return itemSlotNode;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void SelectTheNextItemSlot()
|
public void SelectTheNextItemSlot()
|
||||||
|
|
|
@ -15,6 +15,8 @@ public partial class Packsack : PickAbleTemplate
|
||||||
{
|
{
|
||||||
private PackedScene? _packedScene;
|
private PackedScene? _packedScene;
|
||||||
private PacksackUi? _packsackUi;
|
private PacksackUi? _packsackUi;
|
||||||
|
[Export]
|
||||||
|
public int NumberSlots { get; set; }
|
||||||
|
|
||||||
public override bool CanPutInPack => false;
|
public override bool CanPutInPack => false;
|
||||||
|
|
||||||
|
@ -45,7 +47,7 @@ public partial class Packsack : PickAbleTemplate
|
||||||
_packsackUi.ItemContainer = ItemContainer;
|
_packsackUi.ItemContainer = ItemContainer;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
GameSceneNodeHolder.BackpackUiContainer?.Show();
|
||||||
_packsackUi?.Show();
|
_packsackUi?.Show();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -55,6 +57,12 @@ public partial class Packsack : PickAbleTemplate
|
||||||
{
|
{
|
||||||
base._Ready();
|
base._Ready();
|
||||||
ItemContainer = new UniversalItemContainer();
|
ItemContainer = new UniversalItemContainer();
|
||||||
|
//When the backpack is created, the item slot is generated.
|
||||||
|
//当背包被创建时,物品槽就被生成出来了。
|
||||||
|
for (var i = 0; i < NumberSlots; i++)
|
||||||
|
{
|
||||||
|
ItemContainer.AddItemSlot(this)?.Hide();
|
||||||
|
}
|
||||||
_packedScene = GD.Load<PackedScene>("res://prefab/ui/packsackUI.tscn");
|
_packedScene = GD.Load<PackedScene>("res://prefab/ui/packsackUI.tscn");
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -14,7 +14,7 @@ public partial class PacksackUi : UiLoaderTemplate
|
||||||
|
|
||||||
private PackedScene? _packedScene;
|
private PackedScene? _packedScene;
|
||||||
|
|
||||||
private GridContainer? _gridContainer;
|
private HFlowContainer? _hFlowContainer;
|
||||||
|
|
||||||
private Label? _titleLabel;
|
private Label? _titleLabel;
|
||||||
|
|
||||||
|
@ -57,15 +57,16 @@ public partial class PacksackUi : UiLoaderTemplate
|
||||||
/// <param name="itemContainer"></param>
|
/// <param name="itemContainer"></param>
|
||||||
private void PlaceItemSlot(IItemContainer? itemContainer)
|
private void PlaceItemSlot(IItemContainer? itemContainer)
|
||||||
{
|
{
|
||||||
if (_gridContainer == null || itemContainer == null)
|
if (_hFlowContainer == null || itemContainer == null)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
NodeUtils.DeleteAllChild(_gridContainer);
|
NodeUtils.DeleteAllChild(_hFlowContainer);
|
||||||
foreach (var itemSlotNode in itemContainer)
|
foreach (var itemSlotNode in itemContainer)
|
||||||
{
|
{
|
||||||
itemSlotNode.Reparent(_gridContainer);
|
itemSlotNode.Reparent(_hFlowContainer);
|
||||||
|
itemSlotNode.Show();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -91,10 +92,9 @@ public partial class PacksackUi : UiLoaderTemplate
|
||||||
|
|
||||||
public override void InitializeUi()
|
public override void InitializeUi()
|
||||||
{
|
{
|
||||||
_gridContainer = GetNode<GridContainer>("GridContainer");
|
_hFlowContainer = GetNode<HFlowContainer>("HFlowContainer");
|
||||||
_titleLabel = GetNode<Label>("TitleLabel");
|
_titleLabel = GetNode<Label>("TitleLabel");
|
||||||
_exitButton = GetNode<Button>("ExitButton");
|
_exitButton = GetNode<Button>("ExitButton");
|
||||||
_gridContainer.Columns = Config.HotBarSize;
|
|
||||||
//If the item container was set before this node was placed in the node tree, load it here.
|
//If the item container was set before this node was placed in the node tree, load it here.
|
||||||
//若物品容器在此节点放置到节点树之前被设置了,那么在这里加载。
|
//若物品容器在此节点放置到节点树之前被设置了,那么在这里加载。
|
||||||
PlaceItemSlot(_itemContainer);
|
PlaceItemSlot(_itemContainer);
|
||||||
|
@ -105,7 +105,11 @@ public partial class PacksackUi : UiLoaderTemplate
|
||||||
{
|
{
|
||||||
if (_exitButton != null)
|
if (_exitButton != null)
|
||||||
{
|
{
|
||||||
_exitButton.Pressed += Hide;
|
_exitButton.Pressed += () =>
|
||||||
|
{
|
||||||
|
GameSceneNodeHolder.BackpackUiContainer?.Hide();
|
||||||
|
Hide();
|
||||||
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -1,10 +1,8 @@
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
using ColdMint.scripts.debug;
|
using ColdMint.scripts.debug;
|
||||||
using ColdMint.scripts.item;
|
using ColdMint.scripts.item;
|
||||||
using ColdMint.scripts.item.weapon;
|
using ColdMint.scripts.item.weapon;
|
||||||
|
|
||||||
using Godot;
|
using Godot;
|
||||||
using PacksackUi = ColdMint.scripts.loader.uiLoader.PacksackUi;
|
using PacksackUi = ColdMint.scripts.loader.uiLoader.PacksackUi;
|
||||||
|
|
||||||
|
@ -71,7 +69,7 @@ public static class NodeUtils
|
||||||
/// </param>
|
/// </param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public static Node2D? GetTheNearestNode(Node2D origin, Node[] array, HashSet<Node>? exclude = null,
|
public static Node2D? GetTheNearestNode(Node2D origin, Node[] array, HashSet<Node>? exclude = null,
|
||||||
bool excludeInvisibleNodes = true)
|
bool excludeInvisibleNodes = true)
|
||||||
{
|
{
|
||||||
var closestDistance = float.MaxValue;
|
var closestDistance = float.MaxValue;
|
||||||
Node2D? closestNode = null;
|
Node2D? closestNode = null;
|
||||||
|
@ -132,10 +130,11 @@ public static class NodeUtils
|
||||||
return GameSceneNodeHolder.PacksackContainer;
|
return GameSceneNodeHolder.PacksackContainer;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (GameSceneNodeHolder.BackpackUiContainer!=null && childNode is PacksackUi)
|
if (GameSceneNodeHolder.BackpackUiContainer != null && childNode is PacksackUi)
|
||||||
{
|
{
|
||||||
return GameSceneNodeHolder.BackpackUiContainer;
|
return GameSceneNodeHolder.BackpackUiContainer;
|
||||||
}
|
}
|
||||||
|
|
||||||
return defaultParentNode;
|
return defaultParentNode;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -162,7 +161,7 @@ public static class NodeUtils
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
/// <seealso cref="InstantiatePackedScene{T}"/>
|
/// <seealso cref="InstantiatePackedScene{T}"/>
|
||||||
public static Node InstantiatePackedScene(PackedScene packedScene, Node? defaultParentNode = null,
|
public static Node InstantiatePackedScene(PackedScene packedScene, Node? defaultParentNode = null,
|
||||||
bool assignedByRootNodeType = true)
|
bool assignedByRootNodeType = true)
|
||||||
{
|
{
|
||||||
var instantiateNode = packedScene.Instantiate();
|
var instantiateNode = packedScene.Instantiate();
|
||||||
//An attempt is made to place an instantiated node under a parent node only after the default parent node is set.
|
//An attempt is made to place an instantiated node under a parent node only after the default parent node is set.
|
||||||
|
@ -213,14 +212,14 @@ public static class NodeUtils
|
||||||
/// <para>如果创建的节点无法转型至指定的类型,返回null</para>
|
/// <para>如果创建的节点无法转型至指定的类型,返回null</para>
|
||||||
/// </returns>
|
/// </returns>
|
||||||
public static T? InstantiatePackedScene<T>(PackedScene packedScene, Node? defaultParentNode = null,
|
public static T? InstantiatePackedScene<T>(PackedScene packedScene, Node? defaultParentNode = null,
|
||||||
bool assignedByRootNodeType = true)
|
bool assignedByRootNodeType = true)
|
||||||
where T : class
|
where T : class
|
||||||
{
|
{
|
||||||
var node = InstantiatePackedScene(packedScene, defaultParentNode, assignedByRootNodeType);
|
var node = InstantiatePackedScene(packedScene, defaultParentNode, assignedByRootNodeType);
|
||||||
// 检查类型转化,成功返回结果
|
// 检查类型转化,成功返回结果
|
||||||
if (node is T result) return result;
|
if (node is T result) return result;
|
||||||
//如果转型失败,释放所创建的节点
|
//如果转型失败,释放所创建的节点
|
||||||
LogCat.LogWarningWithFormat("warning_node_cannot_cast_to",node,nameof(T));
|
LogCat.LogWarningWithFormat("warning_node_cannot_cast_to", node, nameof(T));
|
||||||
node.QueueFree();
|
node.QueueFree();
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user