Fixed an issue where items were overwritten using the wrong index when picking them up.

修复捡起物品时,使用错误的索引导致物品覆盖的问题。
This commit is contained in:
Cold-Mint 2024-10-08 09:03:10 +08:00
parent 291ef653f0
commit feeb8261e3
Signed by: Cold-Mint
GPG Key ID: C5A9BF8A98E0CE99
16 changed files with 22 additions and 71 deletions

View File

@ -33,13 +33,10 @@ radius = 172.29
collision_layer = 64 collision_layer = 64
collision_mask = 38 collision_mask = 38
script = ExtResource("1_ubaid") script = ExtResource("1_ubaid")
InitWeaponRes = null
CharacterName = "character_evil_crow" CharacterName = "character_evil_crow"
CanMutateAfterDeath = false CanMutateAfterDeath = false
_initialHp = null
MaxHp = 50 MaxHp = 50
CampId = "Mazoku" CampId = "Mazoku"
LootListId = null
[node name="CollisionShape2D" type="CollisionShape2D" parent="."] [node name="CollisionShape2D" type="CollisionShape2D" parent="."]
position = Vector2(2, 10) position = Vector2(2, 10)

View File

@ -29,12 +29,8 @@ collision_mask = 162
platform_floor_layers = 4294967042 platform_floor_layers = 4294967042
platform_wall_layers = 128 platform_wall_layers = 128
script = ExtResource("1_1dlls") script = ExtResource("1_1dlls")
CharacterName = null
CanMutateAfterDeath = null
_initialHp = null
MaxHp = 32 MaxHp = 32
CampId = "Default" CampId = "Default"
LootListId = null
[node name="CollisionShape2D" type="CollisionShape2D" parent="."] [node name="CollisionShape2D" type="CollisionShape2D" parent="."]
shape = SubResource("CapsuleShape2D_bb8wt") shape = SubResource("CapsuleShape2D_bb8wt")

View File

@ -34,10 +34,8 @@ radius = 172.29
collision_layer = 64 collision_layer = 64
collision_mask = 38 collision_mask = 38
script = ExtResource("1_ubaid") script = ExtResource("1_ubaid")
InitWeaponRes = null
CharacterName = "character_necromancer" CharacterName = "character_necromancer"
CanMutateAfterDeath = false CanMutateAfterDeath = false
_initialHp = null
MaxHp = 50 MaxHp = 50
CampId = "Mazoku" CampId = "Mazoku"
LootListId = "test" LootListId = "test"

View File

@ -92,8 +92,6 @@ collision_layer = 256
collision_mask = 160 collision_mask = 160
script = ExtResource("1_t1qdg") script = ExtResource("1_t1qdg")
Path = "res://prefab/ui/SpellEditorUI.tscn" Path = "res://prefab/ui/SpellEditorUI.tscn"
_initialDurability = null
_maxDurability = null
[node name="CollisionShape2D" type="CollisionShape2D" parent="."] [node name="CollisionShape2D" type="CollisionShape2D" parent="."]
position = Vector2(-0.5, -0.5) position = Vector2(-0.5, -0.5)

View File

@ -13,7 +13,6 @@ radius = 52.6118
collision_layer = 256 collision_layer = 256
collision_mask = 160 collision_mask = 160
script = ExtResource("1_hfnuj") script = ExtResource("1_hfnuj")
_initialDurability = null
_maxDurability = 1 _maxDurability = 1
[node name="CollisionShape2D" type="CollisionShape2D" parent="."] [node name="CollisionShape2D" type="CollisionShape2D" parent="."]

View File

@ -18,9 +18,6 @@ collision_mask = 34
angular_damp = -1.0 angular_damp = -1.0
script = ExtResource("1_nydte") script = ExtResource("1_nydte")
FiringIntervalAsMillisecond = 1000 FiringIntervalAsMillisecond = 1000
_recoilStrength = null
_minContactInjury = null
_maxContactInjury = null
[node name="DamageArea2D" type="Area2D" parent="."] [node name="DamageArea2D" type="Area2D" parent="."]
collision_layer = 8 collision_layer = 8

View File

@ -16,9 +16,6 @@ collision_mask = 34
angular_damp = -1.0 angular_damp = -1.0
script = ExtResource("1_gg5rs") script = ExtResource("1_gg5rs")
_packedScenePath = "res://prefab/entitys/BlackenedAboriginalWarrior.tscn" _packedScenePath = "res://prefab/entitys/BlackenedAboriginalWarrior.tscn"
_projectilePath = null
_minContactInjury = null
_maxContactInjury = null
[node name="DamageArea2D" type="Area2D" parent="."] [node name="DamageArea2D" type="Area2D" parent="."]
collision_layer = 8 collision_layer = 8

View File

@ -15,12 +15,6 @@ collision_layer = 8
collision_mask = 34 collision_mask = 34
angular_damp = -1.0 angular_damp = -1.0
script = ExtResource("1_cnhod") script = ExtResource("1_cnhod")
NumberOfProjectiles = null
RandomAngle = null
UnitRadian = null
_projectilePath = null
_minContactInjury = null
_maxContactInjury = null
[node name="DamageArea2D" type="Area2D" parent="."] [node name="DamageArea2D" type="Area2D" parent="."]
collision_layer = 8 collision_layer = 8

View File

@ -14,8 +14,6 @@ collision_layer = 8
collision_mask = 38 collision_mask = 38
script = ExtResource("1_slakl") script = ExtResource("1_slakl")
NumberSlots = 30 NumberSlots = 30
_minContactInjury = null
_maxContactInjury = null
[node name="DamageArea2D" type="Area2D" parent="."] [node name="DamageArea2D" type="Area2D" parent="."]
collision_layer = 8 collision_layer = 8

View File

@ -23,7 +23,7 @@ polygons = Array[PackedInt32Array]([PackedInt32Array(0, 1, 2, 3), PackedInt32Arr
outlines = Array[PackedVector2Array]([PackedVector2Array(479, 34, 228, 32, 226, 1, 159, 1, 160, 31, 32, 35, 33, 97, 1, 97, -1, 162, 512, 160, 509, 96, 480, 97)]) outlines = Array[PackedVector2Array]([PackedVector2Array(479, 34, 228, 32, 226, 1, 159, 1, 160, 31, 32, 35, 33, 97, 1, 97, -1, 162, 512, 160, 509, 96, 480, 97)])
source_geometry_group_name = &"navigation_polygon_source_group" source_geometry_group_name = &"navigation_polygon_source_group"
[node name="InitialRoom" type="Node2D"] [node name="InitialRoom2" type="Node2D"]
[node name="RoomArea" type="Area2D" parent="."] [node name="RoomArea" type="Area2D" parent="."]
collision_mask = 0 collision_mask = 0
@ -89,5 +89,3 @@ texture = ExtResource("3_r2p3x")
[node name="RigidBody2D" parent="." instance=ExtResource("4_rean8")] [node name="RigidBody2D" parent="." instance=ExtResource("4_rean8")]
position = Vector2(239, 101) position = Vector2(239, 101)
_initialDurability = null
_maxDurability = null

View File

@ -55,7 +55,6 @@ shape = SubResource("RectangleShape2D_131jn")
[node name="Marker2D" type="Marker2D" parent="."] [node name="Marker2D" type="Marker2D" parent="."]
position = Vector2(237, 69) position = Vector2(237, 69)
script = ExtResource("2_7q101") script = ExtResource("2_7q101")
ResPath = null
metadata/ResPath = "res://prefab/entitys/DelivererOfDarkMagic.tscn" metadata/ResPath = "res://prefab/entitys/DelivererOfDarkMagic.tscn"
[node name="NavigationRegion2D" type="NavigationRegion2D" parent="."] [node name="NavigationRegion2D" type="NavigationRegion2D" parent="."]

View File

@ -20,7 +20,7 @@ polygons = Array[PackedInt32Array]([PackedInt32Array(0, 1, 2, 3), PackedInt32Arr
outlines = Array[PackedVector2Array]([PackedVector2Array(36, 32, 731, 32, 733, 258, 766, 257, 767, 316, 35, 317)]) outlines = Array[PackedVector2Array]([PackedVector2Array(36, 32, 731, 32, 733, 258, 766, 257, 767, 316, 35, 317)])
source_geometry_group_name = &"navigation_polygon_source_group" source_geometry_group_name = &"navigation_polygon_source_group"
[node name="InitialRoom" type="Node2D"] [node name="InitialRoom3" type="Node2D"]
[node name="RoomArea" type="Area2D" parent="."] [node name="RoomArea" type="Area2D" parent="."]
@ -103,8 +103,6 @@ texture = ExtResource("6_dbg76")
[node name="RigidBody2D" parent="." instance=ExtResource("5_0kep0")] [node name="RigidBody2D" parent="." instance=ExtResource("5_0kep0")]
position = Vector2(227, 283) position = Vector2(227, 283)
_initialDurability = null
_maxDurability = null
[node name="WoodenBox" parent="." instance=ExtResource("7_jybe6")] [node name="WoodenBox" parent="." instance=ExtResource("7_jybe6")]
position = Vector2(715, 244) position = Vector2(715, 244)

View File

@ -125,8 +125,6 @@ position = Vector2(711, 98)
[node name="RigidBody2D" parent="." instance=ExtResource("5_ll4ng")] [node name="RigidBody2D" parent="." instance=ExtResource("5_ll4ng")]
position = Vector2(473, 285) position = Vector2(473, 285)
_initialDurability = null
_maxDurability = null
[node name="TripleShotSpell" type="Sprite2D" parent="."] [node name="TripleShotSpell" type="Sprite2D" parent="."]
position = Vector2(637, 85) position = Vector2(637, 85)

View File

@ -18,12 +18,6 @@ collision_layer = 8
collision_mask = 34 collision_mask = 34
angular_damp = -1.0 angular_damp = -1.0
script = ExtResource("1_snmy1") script = ExtResource("1_snmy1")
_maxDamage = null
_minDamage = null
FiringIntervalAsMillisecond = null
_recoilStrength = null
_minContactInjury = null
_maxContactInjury = null
[node name="DamageArea2D" type="Area2D" parent="."] [node name="DamageArea2D" type="Area2D" parent="."]
collision_layer = 8 collision_layer = 8

View File

@ -21,8 +21,6 @@ _fireSequentially = true
FiringIntervalAsMillisecond = 300 FiringIntervalAsMillisecond = 300
_recoilStrength = 5 _recoilStrength = 5
UniqueIcon = ExtResource("3_31iau") UniqueIcon = ExtResource("3_31iau")
_minContactInjury = null
_maxContactInjury = null
[node name="DamageArea2D" type="Area2D" parent="."] [node name="DamageArea2D" type="Area2D" parent="."]
collision_layer = 8 collision_layer = 8

View File

@ -23,16 +23,6 @@ public class UniversalItemContainer(int totalCapacity) : IItemContainer
//_selectIndex默认为0. //_selectIndex默认为0.
private int _selectIndex; private int _selectIndex;
/// <summary>
/// <para>The next available index</para>
/// <para>下个可用的索引</para>
/// </summary>
/// <remarks>
///<para>For example, the variable [1,2,3,5,6] represents 4, or the variable [1,2,3,4,5,6,7] represents 8.</para>
///<para>例如[1,2,3,5,6]这个变量表示4再或者[1,2,3,4,5,6,7]这个变量表示8。</para>
/// </remarks>
private int _nextAvailableIndex;
/// <summary> /// <summary>
/// <para>The type of item that can be added to the item container</para> /// <para>The type of item that can be added to the item container</para>
/// <para>物品容器允许添加的物品类型</para> /// <para>物品容器允许添加的物品类型</para>
@ -132,34 +122,41 @@ public class UniversalItemContainer(int totalCapacity) : IItemContainer
/// <para>Update the next available index location</para> /// <para>Update the next available index location</para>
/// <para>更新下个可用的索引位置</para> /// <para>更新下个可用的索引位置</para>
/// </summary> /// </summary>
private void UpdateNextAvailableIndex() /// <remarks>
///<para>For example, the variable [1,2,3,5,6] represents 4, or the variable [1,2,3,4,5,6,7] represents 8.</para>
///<para>例如[1,2,3,5,6]这个变量表示4再或者[1,2,3,4,5,6,7]这个变量表示8。</para>
/// </remarks>
/// <returns>
///<para>The next available index is returned after obtaining failure<see cref="UnknownIndex"/></para>
///<para>下次可用的索引,获取失败返回<see cref="UnknownIndex"/></para>
/// </returns>
private int GetNextAvailableIndex()
{ {
_nextAvailableIndex = UnknownIndex;
if (totalCapacity <= 0) if (totalCapacity <= 0)
{ {
return; return UnknownIndex;
} }
for (var i = 0; i < totalCapacity; i++) for (var i = 0; i < totalCapacity; i++)
{ {
var contains = _itemDictionary.ContainsKey(i); var contains = _itemDictionary.ContainsKey(i);
if (!contains) if (!contains)
{ {
_nextAvailableIndex = i; return i;
return;
} }
} }
return UnknownIndex;
} }
public int AddItem(IItem item) public int AddItem(IItem item)
{ {
var nextAvailableIndex = GetNextAvailableIndex();
if (item.MaxQuantity == 1) if (item.MaxQuantity == 1)
{ {
if (_nextAvailableIndex == UnknownIndex) if (nextAvailableIndex == UnknownIndex)
{ {
return 0; return 0;
} }
var nextAvailableIndex = _nextAvailableIndex;
_itemDictionary[nextAvailableIndex] = item; _itemDictionary[nextAvailableIndex] = item;
item.Index = nextAvailableIndex; item.Index = nextAvailableIndex;
item.ItemContainer = this; item.ItemContainer = this;
@ -167,7 +164,6 @@ public class UniversalItemContainer(int totalCapacity) : IItemContainer
{ {
item.HideSelf(); item.HideSelf();
} }
UpdateNextAvailableIndex();
UpdateSelectStatus(nextAvailableIndex, item); UpdateSelectStatus(nextAvailableIndex, item);
ItemDataChangeEvent?.Invoke(new ItemDataChangeEvent ItemDataChangeEvent?.Invoke(new ItemDataChangeEvent
{ {
@ -221,24 +217,22 @@ public class UniversalItemContainer(int totalCapacity) : IItemContainer
//Add the rest to the container. //Add the rest to the container.
//添加剩余到容器内。 //添加剩余到容器内。
if (_nextAvailableIndex == UnknownIndex) if (nextAvailableIndex == UnknownIndex)
{ {
return 0; return 0;
} }
var finalNextAvailableIndex = _nextAvailableIndex; _itemDictionary[nextAvailableIndex] = item;
_itemDictionary[finalNextAvailableIndex] = item; item.Index = nextAvailableIndex;
item.Index = finalNextAvailableIndex;
item.ItemContainer = this; item.ItemContainer = this;
if (finalNextAvailableIndex != _selectIndex) if (nextAvailableIndex != _selectIndex)
{ {
item.HideSelf(); item.HideSelf();
} }
UpdateNextAvailableIndex(); UpdateSelectStatus(nextAvailableIndex, item);
UpdateSelectStatus(finalNextAvailableIndex, item);
ItemDataChangeEvent?.Invoke(new ItemDataChangeEvent ItemDataChangeEvent?.Invoke(new ItemDataChangeEvent
{ {
NewItem = item, NewItem = item,
NewIndex = finalNextAvailableIndex, NewIndex = nextAvailableIndex,
Type = Config.ItemDataChangeEventType.Add Type = Config.ItemDataChangeEventType.Add
}); });
return originalQuantity; return originalQuantity;
@ -355,7 +349,6 @@ public class UniversalItemContainer(int totalCapacity) : IItemContainer
//输入的数量小于0,则移除全部物品。 //输入的数量小于0,则移除全部物品。
item.Quantity = 0; item.Quantity = 0;
_itemDictionary.Remove(itemIndex); _itemDictionary.Remove(itemIndex);
UpdateNextAvailableIndex();
ItemDataChangeEvent?.Invoke(new ItemDataChangeEvent ItemDataChangeEvent?.Invoke(new ItemDataChangeEvent
{ {
NewItem = item, NewItem = item,
@ -370,7 +363,6 @@ public class UniversalItemContainer(int totalCapacity) : IItemContainer
if (item.Quantity < 1) if (item.Quantity < 1)
{ {
_itemDictionary.Remove(itemIndex); _itemDictionary.Remove(itemIndex);
UpdateNextAvailableIndex();
ItemDataChangeEvent?.Invoke(new ItemDataChangeEvent ItemDataChangeEvent?.Invoke(new ItemDataChangeEvent
{ {
NewItem = item, NewItem = item,