diff --git a/prefab/roomTemplates/dungeon/utilityRoom.tscn b/prefab/roomTemplates/dungeon/utilityRoom.tscn index 88429b6..fbb9f64 100644 --- a/prefab/roomTemplates/dungeon/utilityRoom.tscn +++ b/prefab/roomTemplates/dungeon/utilityRoom.tscn @@ -69,7 +69,7 @@ tile_set = ExtResource("1_rn2om") [node name="Ground" type="TileMapLayer" parent="TileMap"] use_parent_material = true -tile_map_data = PackedByteArray("AAAAAAAAAQAAAAMAAAAAAAEAAQACAAEAAAAAAAIAAQACAAEAAAAAAAMAAQACAAEAAAAAAAQAAQACAAEAAAAAAAUAAQACAAEAAAAAAAYAAQACAAEAAAABAAAAAQABAAIAAAACAAAAAQABAAIAAAADAAAAAQABAAIAAAAEAAAAAQABAAIAAAAFAAAAAQABAAIAAAAGAAAAAQABAAIAAAAHAAAAAQABAAIAAAAIAAAAAQABAAIAAAAJAAAAAQABAAIAAAAKAAAAAQABAAIAAAALAAAAAQABAAIAAAAMAAAAAQABAAIAAAANAAAAAQABAAIAAAAOAAAAAQABAAIAAAAPAAAAAQABAAIAAAAQAAAAAQABAAIAAAARAAAAAQABAAIAAAASAAAAAQABAAIAAAATAAAAAQABAAIAAAAUAAAAAQABAAIAAAAVAAAAAQABAAIAAAAWAAAAAQACAAMAAAAWAAMAAQAAAAEAAAAWAAQAAQAAAAEAAAAWAAUAAQAAAAEAAAAWAAYAAQAAAAEAAAAWAAcAAQAAAAEAAAAWAAgAAQAAAAEAAAAWAAkAAQAAAAEAAAAWAAoAAQAAAAEAAAAWAAsAAQAAAAEAAAAWAAwAAQAAAAEAAAAAAAcAAQACAAEAAAAAAAgAAQACAAEAAAAAAAkAAQACAAEAAAAAAAoAAQACAAEAAAAAAAsAAQACAAEAAAAAAAwAAQACAAEAAAAVAA8AAQABAAAAAAAUAA8AAQABAAAAAAATAA8AAQABAAAAAAASAA8AAQABAAAAAAARAA8AAQABAAAAAAAQAA8AAQABAAAAAAAPAA8AAQABAAAAAAAOAA8AAQABAAAAAAANAA8AAQABAAAAAAAMAA8AAQABAAAAAAALAA8AAQABAAAAAAAKAA8AAQABAAAAAAAJAA8AAQABAAAAAAAIAA8AAQABAAAAAAAHAA8AAQABAAAAAAAGAA8AAQABAAAAAAAFAA8AAQABAAAAAAAEAA8AAQABAAAAAAADAA8AAQABAAAAAAACAA8AAQABAAAAAAABAA8AAQABAAAAAAAAAA8AAQAAAAUAAAAWAA8AAQACAAUAAAASAAsAAQAEAAQAAAATAAsAAQAEAAQAAAAUAAsAAQAEAAQAAAAVAAsAAQAFAAQAAAABAAsAAQADAAQAAAACAAsAAQAEAAQAAAADAAsAAQAEAAQAAAAEAAsAAQAEAAQAAAAFAAsAAQAEAAQAAAAGAAsAAQAEAAQAAAAHAAsAAQAEAAQAAAAIAAsAAQAEAAQAAAAOAAsAAQAEAAQAAAAPAAsAAQAEAAQAAAAQAAsAAQAEAAQAAAARAAsAAQAEAAQAAAABAAoAAQAEAAMAAAAVAAoAAQAEAAMAAAACAAoAAQAEAAIAAAAUAAoAAQAEAAIAAAANAAQAAQAEAAQAAAANAAwAAQAEAAQAAAAMAA0AAQAEAAQAAAALAA4AAQAEAAQAAAAJAAsAAQAEAAQAAAAGAAoAAQAEAAQAAAAHAAkAAQAEAAQAAAAIAAgAAQAEAAQAAAAJAAcAAQAEAAQAAAAKAAcAAQAEAAQAAAALAAcAAQAEAAQAAAAMAAcAAQAEAAQAAAANAAcAAQAEAAQAAAAOAAcAAQAEAAQAAAAPAAcAAQAEAAQAAAAQAAcAAQAEAAQAAAARAAcAAQAEAAQAAAASAAcAAQAEAAQAAAATAAcAAQAEAAQAAAAUAAcAAQAEAAQAAAAVAAcAAQAEAAQAAAABAAcAAQAEAAQAAAACAAcAAQAEAAQAAAADAAcAAQAEAAQAAAAEAAcAAQAEAAQAAAAFAAcAAQAEAAQAAAALAAYAAQAEAAQAAAAMAAUAAQAEAAQAAAAPAAMAAQAEAAQAAAAQAAMAAQAEAAQAAAARAAMAAQAEAAQAAAASAAMAAQAEAAQAAAATAAMAAQAEAAQAAAAUAAMAAQAEAAQAAAAVAAMAAQAEAAQAAAABAAMAAQAEAAQAAAACAAMAAQAEAAQAAAADAAMAAQAEAAQAAAAEAAMAAQAEAAQAAAAFAAMAAQAEAAQAAAAGAAMAAQAEAAQAAAAHAAMAAQAEAAQAAAAIAAMAAQAEAAQAAAAJAAMAAQAEAAQAAAA=") +tile_map_data = PackedByteArray("AAAAAAAAAQAAAAMAAAAAAAEAAQACAAEAAAAAAAIAAQACAAEAAAAAAAMAAQACAAEAAAAAAAQAAQACAAEAAAAAAAUAAQACAAEAAAAAAAYAAQACAAEAAAABAAAAAQABAAIAAAACAAAAAQABAAIAAAADAAAAAQABAAIAAAAEAAAAAQABAAIAAAAFAAAAAQABAAIAAAAGAAAAAQABAAIAAAAHAAAAAQABAAIAAAAIAAAAAQABAAIAAAAJAAAAAQABAAIAAAAKAAAAAQABAAIAAAALAAAAAQABAAIAAAAMAAAAAQABAAIAAAANAAAAAQABAAIAAAAOAAAAAQABAAIAAAAPAAAAAQABAAIAAAAQAAAAAQABAAIAAAARAAAAAQABAAIAAAASAAAAAQABAAIAAAATAAAAAQABAAIAAAAUAAAAAQABAAIAAAAVAAAAAQABAAIAAAAWAAAAAQACAAMAAAAWAAMAAQAAAAEAAAAWAAQAAQAAAAEAAAAWAAUAAQAAAAEAAAAWAAYAAQAAAAEAAAAWAAcAAQAAAAEAAAAWAAgAAQAAAAEAAAAWAAkAAQAAAAEAAAAWAAoAAQAAAAEAAAAWAAsAAQAAAAEAAAAWAAwAAQAAAAEAAAAAAAcAAQACAAEAAAAAAAgAAQACAAEAAAAAAAkAAQACAAEAAAAAAAoAAQACAAEAAAAAAAsAAQACAAEAAAAAAAwAAQACAAEAAAAVAA8AAQABAAAAAAAUAA8AAQABAAAAAAATAA8AAQABAAAAAAASAA8AAQABAAAAAAARAA8AAQABAAAAAAAQAA8AAQABAAAAAAAPAA8AAQABAAAAAAAOAA8AAQABAAAAAAANAA8AAQABAAAAAAAMAA8AAQABAAAAAAALAA8AAQABAAAAAAAKAA8AAQABAAAAAAAJAA8AAQABAAAAAAAIAA8AAQABAAAAAAAHAA8AAQABAAAAAAAGAA8AAQABAAAAAAAFAA8AAQABAAAAAAAEAA8AAQABAAAAAAADAA8AAQABAAAAAAACAA8AAQABAAAAAAABAA8AAQABAAAAAAAAAA8AAQAAAAUAAAAWAA8AAQACAAUAAAASAAsAAQAEAAQAAAATAAsAAQAEAAQAAAAUAAsAAQAEAAQAAAAVAAsAAQAFAAQAAAABAAsAAQADAAQAAAACAAsAAQAEAAQAAAADAAsAAQAEAAQAAAAEAAsAAQAEAAQAAAAFAAsAAQAEAAQAAAAGAAsAAQAEAAQAAAAHAAsAAQAEAAQAAAAIAAsAAQAEAAQAAAAOAAsAAQAEAAQAAAAPAAsAAQAEAAQAAAAQAAsAAQAEAAQAAAARAAsAAQAEAAQAAAABAAoAAQAEAAMAAAAVAAoAAQAEAAMAAAACAAoAAQAEAAIAAAAUAAoAAQAEAAIAAAANAAQAAQAEAAQAAAANAAwAAQAEAAQAAAAMAA0AAQAEAAQAAAALAA4AAQAEAAQAAAAJAAsAAQAEAAQAAAAGAAoAAQAEAAQAAAAHAAkAAQAEAAQAAAAIAAgAAQAEAAQAAAAJAAcAAQAEAAQAAAAKAAcAAQAEAAQAAAALAAcAAQAEAAQAAAAMAAcAAQAEAAQAAAANAAcAAQAEAAQAAAAOAAcAAQAEAAQAAAAPAAcAAQAEAAQAAAAQAAcAAQAEAAQAAAARAAcAAQAEAAQAAAASAAcAAQAEAAQAAAATAAcAAQAEAAQAAAAUAAcAAQAEAAQAAAAVAAcAAQAFAAQAAAABAAcAAQADAAQAAAACAAcAAQAEAAQAAAADAAcAAQAEAAQAAAAEAAcAAQAEAAQAAAAFAAcAAQAEAAQAAAALAAYAAQAEAAQAAAAMAAUAAQAEAAQAAAAPAAMAAQAEAAQAAAAQAAMAAQAEAAQAAAARAAMAAQAEAAQAAAASAAMAAQAEAAQAAAATAAMAAQAEAAQAAAAUAAMAAQAEAAQAAAAVAAMAAQAFAAQAAAABAAMAAQADAAQAAAACAAMAAQAEAAQAAAADAAMAAQAEAAQAAAAEAAMAAQAEAAQAAAAFAAMAAQAEAAQAAAAGAAMAAQAEAAQAAAAHAAMAAQAEAAQAAAAIAAMAAQAEAAQAAAAJAAMAAQAEAAQAAAAKAAMAAQAEAAQAAAAKAAsAAQAEAAQAAAALAAsAAQAEAAQAAAAGAAcAAQAEAAQAAAALAAMAAQAEAAQAAAAMAAMAAQAEAAQAAAA=") tile_set = ExtResource("1_rn2om") [node name="Barrier" type="TileMapLayer" parent="TileMap"] diff --git a/prefab/roomTemplates/tutorials/tripleShotSpell.tscn b/prefab/roomTemplates/tutorials/tripleShotSpell.tscn index 3fcf5a1..9ef8d0a 100644 --- a/prefab/roomTemplates/tutorials/tripleShotSpell.tscn +++ b/prefab/roomTemplates/tutorials/tripleShotSpell.tscn @@ -63,7 +63,7 @@ tile_set = ExtResource("2_k54gk") [node name="Ground" type="TileMapLayer" parent="TileMap"] use_parent_material = true -tile_map_data = PackedByteArray("AAAAAAAAAQAAAAMAAAAAAAEAAQACAAEAAAAAAAIAAQACAAEAAAAAAAMAAQACAAEAAAAAAAQAAQACAAEAAAAAAAcAAQACAAEAAAAPAAAAAQABAAIAAAAAAAUAAQACAAEAAAAAAAYAAQACAAEAAAABAAAAAQABAAIAAAACAAAAAQABAAIAAAADAAAAAQABAAIAAAAEAAAAAQABAAIAAAAFAAAAAQABAAIAAAAGAAAAAQABAAIAAAAHAAAAAQABAAIAAAAIAAAAAQABAAIAAAAJAAAAAQABAAIAAAAKAAAAAQABAAIAAAALAAAAAQABAAIAAAAMAAAAAQABAAIAAAANAAAAAQABAAIAAAAOAAAAAQABAAMAAAAAAAoAAQAAAAUAAAABAAoAAQABAAAAAAACAAoAAQABAAAAAAADAAoAAQABAAAAAAAEAAoAAQABAAAAAAAFAAoAAQABAAAAAAAGAAoAAQABAAAAAAAHAAoAAQABAAAAAAAIAAoAAQABAAAAAAAJAAoAAQABAAAAAAAKAAoAAQABAAAAAAALAAoAAQABAAAAAAAMAAoAAQABAAAAAAANAAoAAQABAAAAAAAOAAoAAQABAAAAAAAPAAoAAQABAAAAAAAQAAoAAQABAAAAAAARAAoAAQABAAAAAAASAAoAAQABAAAAAAATAAoAAQABAAAAAAAUAAoAAQABAAAAAAAVAAoAAQABAAAAAAAWAAoAAQABAAAAAAAXAAoAAQACAAUAAAAQAAAAAQABAAIAAAARAAAAAQABAAIAAAASAAAAAQABAAIAAAATAAAAAQABAAIAAAAUAAAAAQABAAIAAAAXAAcAAQAAAAEAAAAXAAYAAQAAAAEAAAAXAAUAAQAAAAEAAAAXAAQAAQAAAAEAAAAXAAMAAQAAAAEAAAAXAAIAAQAAAAEAAAAXAAEAAQAAAAEAAAAXAAAAAQACAAMAAAAVAAAAAQABAAIAAAAWAAAAAQABAAIAAAAEAAkAAQAEAAQAAAAFAAgAAQAEAAQAAAAGAAcAAQAEAAQAAAAHAAYAAQAEAAQAAAAIAAUAAQAEAAQAAAAKAAUAAQAEAAQAAAAMAAUAAQAEAAQAAAAOAAUAAQADAAQAAAAQAAUAAQAEAAQAAAASAAUAAQADAAAAAAAJAAUAAQAEAAQAAAALAAUAAQAEAAQAAAANAAkAAQADAAAAAAANAAgAAQADAAAAAAANAAcAAQADAAAAAAANAAYAAQADAAAAAAANAAUAAQADAAAAAAAPAAUAAQAEAAQAAAARAAUAAQAFAAQAAAASAAYAAQADAAAAAAASAAcAAQADAAAAAAASAAQAAQADAAAAAAASAAMAAQADAAAAAAASAAIAAQADAAAAAAASAAEAAQADAAAAAAA=") +tile_map_data = PackedByteArray("AAAAAAAAAQAAAAMAAAAAAAEAAQACAAEAAAAAAAIAAQACAAEAAAAAAAMAAQACAAEAAAAAAAQAAQACAAEAAAAAAAcAAQACAAEAAAAPAAAAAQABAAIAAAAAAAUAAQACAAEAAAAAAAYAAQACAAEAAAABAAAAAQABAAIAAAACAAAAAQABAAIAAAADAAAAAQABAAIAAAAEAAAAAQABAAIAAAAFAAAAAQABAAIAAAAGAAAAAQABAAIAAAAHAAAAAQABAAIAAAAIAAAAAQABAAIAAAAJAAAAAQABAAIAAAAKAAAAAQABAAIAAAALAAAAAQABAAIAAAAMAAAAAQABAAIAAAANAAAAAQABAAIAAAAOAAAAAQABAAMAAAAAAAoAAQAAAAUAAAABAAoAAQABAAAAAAACAAoAAQABAAAAAAADAAoAAQABAAAAAAAEAAoAAQABAAAAAAAFAAoAAQABAAAAAAAGAAoAAQABAAAAAAAHAAoAAQABAAAAAAAIAAoAAQABAAAAAAAJAAoAAQABAAAAAAAKAAoAAQABAAAAAAALAAoAAQABAAAAAAAMAAoAAQABAAAAAAANAAoAAQABAAAAAAAOAAoAAQABAAAAAAAPAAoAAQABAAAAAAAQAAoAAQABAAAAAAARAAoAAQABAAAAAAASAAoAAQABAAAAAAATAAoAAQABAAAAAAAUAAoAAQABAAAAAAAVAAoAAQABAAAAAAAWAAoAAQABAAAAAAAXAAoAAQACAAUAAAAQAAAAAQABAAIAAAARAAAAAQABAAIAAAASAAAAAQABAAIAAAATAAAAAQABAAIAAAAUAAAAAQABAAIAAAAXAAcAAQAAAAEAAAAXAAYAAQAAAAEAAAAXAAUAAQAAAAEAAAAXAAQAAQAAAAEAAAAXAAMAAQAAAAEAAAAXAAIAAQAAAAEAAAAXAAEAAQAAAAEAAAAXAAAAAQACAAMAAAAVAAAAAQABAAIAAAAWAAAAAQABAAIAAAAEAAkAAQAEAAQAAAAFAAgAAQAEAAQAAAAGAAcAAQAEAAQAAAAHAAYAAQAEAAQAAAAIAAUAAQAEAAQAAAAKAAUAAQAEAAQAAAAMAAUAAQAEAAQAAAASAAUAAQADAAAAAAAJAAUAAQAEAAQAAAALAAUAAQAEAAQAAAANAAkAAQADAAAAAAANAAgAAQADAAAAAAANAAcAAQADAAAAAAANAAYAAQADAAAAAAANAAUAAQADAAAAAAASAAYAAQADAAAAAAASAAcAAQADAAAAAAASAAQAAQADAAAAAAASAAMAAQADAAAAAAASAAIAAQADAAAAAAASAAEAAQADAAAAAAAOAAUAAQADAAQAAAAPAAYAAQAEAAQAAAAQAAcAAQAEAAQAAAARAAgAAQAEAAQAAAAQAAkAAQAEAAQAAAA=") tile_set = ExtResource("2_k54gk") [node name="Barrier" type="TileMapLayer" parent="TileMap"] diff --git a/prefab/weapons/BeginnerStaff.tscn b/prefab/weapons/BeginnerStaff.tscn index bde7a79..ef4e660 100644 --- a/prefab/weapons/BeginnerStaff.tscn +++ b/prefab/weapons/BeginnerStaff.tscn @@ -6,10 +6,10 @@ [ext_resource type="AudioStream" uid="uid://cak6chjjsu7wo" path="res://sounds/fire.wav" id="4_p12sk"] [sub_resource type="RectangleShape2D" id="RectangleShape2D_obcq2"] -size = Vector2(49, 5) +size = Vector2(48, 5) [sub_resource type="RectangleShape2D" id="RectangleShape2D_14m1g"] -size = Vector2(49, 5.25) +size = Vector2(48, 5) [node name="BeginnerStaff" type="RigidBody2D"] collision_layer = 8 @@ -26,7 +26,7 @@ collision_layer = 8 collision_mask = 102 [node name="CollisionShape2D" type="CollisionShape2D" parent="DamageArea2D"] -position = Vector2(25.5, 0.5) +position = Vector2(26, 0.5) shape = SubResource("RectangleShape2D_obcq2") [node name="StaffOfTheUndead2" type="Sprite2D" parent="."] @@ -34,7 +34,7 @@ position = Vector2(30, 0) texture = ExtResource("3_rhhwp") [node name="CollisionShape2D" type="CollisionShape2D" parent="."] -position = Vector2(25.5, 0.375) +position = Vector2(26, 0.5) shape = SubResource("RectangleShape2D_14m1g") [node name="Marker2D" type="Marker2D" parent="."] diff --git a/prefab/weapons/StaffNecromancy.tscn b/prefab/weapons/StaffNecromancy.tscn index cd3fdd0..938ba57 100644 --- a/prefab/weapons/StaffNecromancy.tscn +++ b/prefab/weapons/StaffNecromancy.tscn @@ -23,6 +23,7 @@ _recoilStrength = 5 UniqueIcon = ExtResource("3_31iau") [node name="DamageArea2D" type="Area2D" parent="."] +visible = false collision_layer = 8 collision_mask = 102 diff --git a/scripts/character/CharacterTemplate.cs b/scripts/character/CharacterTemplate.cs index cffcc91..d228b9d 100644 --- a/scripts/character/CharacterTemplate.cs +++ b/scripts/character/CharacterTemplate.cs @@ -71,6 +71,7 @@ public partial class CharacterTemplate : CharacterBody2D protected const float JumpVelocity = -240; + //How long it takes for an item to recover from a collision with the ground and platform after being thrown (in seconds) //物品被扔出后多长时间恢复与地面和平台的碰撞(单位:秒) private readonly double _itemCollisionRecoveryTime = 0.045f; @@ -406,8 +407,7 @@ public partial class CharacterTemplate : CharacterBody2D { return false; } - - + //The item store is marked null, or the item container is null. //物品存放的标记为null,或者物品容器为null。 if (ItemMarker2D == null || ItemContainer == null) @@ -437,14 +437,13 @@ public partial class CharacterTemplate : CharacterBody2D //您可以在这里补充更多类型对象的捡起状态处理。 if (pickAbleItemNode2D is PickAbleTemplate pickAbleTemplate) { + pickAbleTemplate.LoadingResource(); pickAbleTemplate.Owner = this; pickAbleTemplate.Picked = true; - pickAbleTemplate.SetCollisionMaskValue(Config.LayerNumber.Platform, false); - pickAbleTemplate.SetCollisionMaskValue(Config.LayerNumber.Floor, false); - pickAbleTemplate.SetCollisionMaskValue(Config.LayerNumber.Wall, false); - LogCat.Log("item_pickup_disables_collision_damage", LogCat.LogLabel.ContactInjury); + pickAbleTemplate.Freeze = true; + pickAbleTemplate.DisabledCollisionShape2D(); pickAbleTemplate.EnableContactInjury = false; - pickAbleTemplate.Sleeping = true; + LogCat.Log("item_pickup_disables_collision_damage", LogCat.LogLabel.ContactInjury); } if (pickAbleItemNode2D is ProjectileWeapon projectileWeapon) @@ -805,10 +804,14 @@ public partial class CharacterTemplate : CharacterBody2D { return; } - - pickAbleTemplate.Sleeping = false; + pickAbleTemplate.LoadingResource(); pickAbleTemplate.Owner = this; pickAbleTemplate.Picked = false; + //Setting an initial speed of 0 for items here prevents the problem of throwing items too fast. + //在这里给物品设置一个为0的初始速度,可防止扔出物品时速度过快的问题。 + pickAbleTemplate.LinearVelocity = Vector2.Zero; + pickAbleTemplate.EnabledCollisionShape2D(); + pickAbleTemplate.Freeze = false; var timer = new Timer(); pickAbleTemplate.AddChild(timer); timer.WaitTime = _itemCollisionRecoveryTime; @@ -820,14 +823,9 @@ public partial class CharacterTemplate : CharacterBody2D //仍出武器时,我们不能立即恢复物理碰撞,立即恢复会导致武器更早的与地面和平台碰撞,阻止武器的飞行。 pickAbleTemplate.EnableContactInjury = true; LogCat.Log("item_thrown_restore_collision_damage", LogCat.LogLabel.ContactInjury); - pickAbleTemplate.SetCollisionMaskValue(Config.LayerNumber.Floor, true); - pickAbleTemplate.SetCollisionMaskValue(Config.LayerNumber.Wall, true); - pickAbleTemplate.SetCollisionMaskValue(Config.LayerNumber.Platform, true); timer.QueueFree(); }; - //Setting an initial speed of 0 for items here prevents the problem of throwing items too fast. - //在这里给物品设置一个为0的初始速度,可防止扔出物品时速度过快的问题。 - pickAbleTemplate.LinearVelocity = Vector2.Zero; + break; } diff --git a/scripts/pickable/PickAbleTemplate.cs b/scripts/pickable/PickAbleTemplate.cs index 64c64d0..f542831 100644 --- a/scripts/pickable/PickAbleTemplate.cs +++ b/scripts/pickable/PickAbleTemplate.cs @@ -85,6 +85,12 @@ public partial class PickAbleTemplate : RigidBody2D, IItem /// private Area2D? _damageArea2D; + /// + /// Damage collision shape + /// 伤害的碰撞形状 + /// + private CollisionShape2D? _damageAreaCollisionShape2D; + /// /// Whether the item is currently picked up /// 当前物品是否被捡起了 @@ -192,17 +198,38 @@ public partial class PickAbleTemplate : RigidBody2D, IItem } + private CollisionShape2D? _collisionShape2D; + + + /// + /// Whether the resource has been loaded + /// 是否已加载过资源了 + /// + private bool _loadedResource; + public override void _Ready() { + LoadingResource(); + } + + public void LoadingResource() + { + if (_loadedResource) + { + return; + } _damageArea2D = GetNode("DamageArea2D"); + _damageAreaCollisionShape2D = _damageArea2D.GetNode("CollisionShape2D"); _damageArea2D.BodyEntered += OnBodyEnter; _damageArea2D.BodyExited += OnBodyExited; _tipLabel = GetNodeOrNull