diff --git a/DungeonShooting_Godot/scene/Hall.tscn b/DungeonShooting_Godot/scene/Hall.tscn index cd7b366..4f5cfe1 100644 --- a/DungeonShooting_Godot/scene/Hall.tscn +++ b/DungeonShooting_Godot/scene/Hall.tscn @@ -1,6 +1,6 @@ [gd_scene load_steps=13 format=3 uid="uid://c2hynqudkykxl"] -[ext_resource type="PackedScene" path="res://scene/Dungeon.tscn" id="1_31od0"] +[ext_resource type="PackedScene" uid="uid://bqf2vks5ggnsp" path="res://scene/Dungeon.tscn" id="1_31od0"] [ext_resource type="Script" path="res://src/game/hall/Hall.cs" id="2_43fdu"] [ext_resource type="Texture2D" uid="uid://b2j5mkqm3uv6w" path="res://resource/sprite/tile/HallBg.png" id="3_0g5wq"] [ext_resource type="Script" path="res://src/game/hall/DungeonEntrance.cs" id="3_t3my6"] @@ -109,6 +109,7 @@ script = ExtResource("5_lowqi") Id = "item_0031" ShadowZIndex = 0 +CollisionEnabled = false CollisionVisible = false [node name="Item0013" type="Node2D" parent="ItemRoot" index="3"] diff --git a/DungeonShooting_Godot/src/framework/activity/ActivityInstance.cs b/DungeonShooting_Godot/src/framework/activity/ActivityInstance.cs index 3306940..6398cb7 100644 --- a/DungeonShooting_Godot/src/framework/activity/ActivityInstance.cs +++ b/DungeonShooting_Godot/src/framework/activity/ActivityInstance.cs @@ -133,6 +133,23 @@ public bool VerticalMotion { get; private set; } = true; /// + /// 是否启用碰撞器 + /// + [Export] + public bool CollisionEnabled + { + get => _collisionEnabled; + set + { + _collisionEnabled = value; + if (_activityObject != null) + { + _activityObject.Collision.Disabled = !value; + } + } + } + + /// /// 编辑器属性, 物体子碰撞器在编辑器中是否可见 /// [Export] @@ -157,6 +174,7 @@ private float _altitude; private int _spriteZIndex = 0; private int _shadowZIndex = -1; + private bool _collisionEnabled = true; private Vector2 _collPos; private bool _createFlag = false; @@ -287,12 +305,14 @@ activityObject.AnimatedSprite.ZIndex = _spriteZIndex; activityObject.ShadowSprite.ZIndex = _shadowZIndex; activityObject.EnableVerticalMotion = VerticalMotion; + activityObject.Collision.Disabled = !_collisionEnabled; if (!_isNested) { activityObject.PutDown(DefaultLayer, _showShadow); } else { + activityObject.DefaultLayer = DefaultLayer; activityObject.ShowShadowSprite(); } diff --git a/DungeonShooting_Godot/src/framework/activity/ActivityObject.cs b/DungeonShooting_Godot/src/framework/activity/ActivityObject.cs index e5b5a58..7b4d69c 100644 --- a/DungeonShooting_Godot/src/framework/activity/ActivityObject.cs +++ b/DungeonShooting_Godot/src/framework/activity/ActivityObject.cs @@ -450,7 +450,7 @@ } IsShowShadow = true; - CalcShadowTransform(); + CalcShadowTransform(IsInsideTree()); ShadowSprite.Visible = true; } @@ -684,7 +684,7 @@ { //注意需要延时调用 CallDeferred(nameof(ShowShadowSprite)); - CalcShadowTransform(); + CalcShadowTransform(false); } } else @@ -1232,7 +1232,7 @@ if (_freezeSprite == null || !_freezeSprite.IsFrozen) { //计算阴影 - CalcShadowTransform(); + CalcShadowTransform(true); } } @@ -1344,7 +1344,7 @@ /// /// 重新计算物体阴影的位置和旋转信息, 无论是否显示阴影 /// - public void CalcShadowTransform() + public void CalcShadowTransform(bool isInTree) { //偏移 if (!IsCustomShadowSprite) @@ -1357,8 +1357,16 @@ //阴影角度 ShadowSprite.Rotation = 0; //阴影位置计算 - var pos = AnimatedSprite.GlobalPosition; - ShadowSprite.GlobalPosition = new Vector2(pos.X + ShadowOffset.X, pos.Y + ShadowOffset.Y + Altitude); + if (isInTree) + { + var pos = AnimatedSprite.GlobalPosition; + ShadowSprite.GlobalPosition = new Vector2(pos.X + ShadowOffset.X, pos.Y + ShadowOffset.Y + Altitude); + } + else + { + var pos = AnimatedSprite.Position; + ShadowSprite.Position = new Vector2(pos.X + ShadowOffset.X, pos.Y + ShadowOffset.Y + Altitude); + } } /// diff --git a/DungeonShooting_Godot/src/game/activity/role/Role_Animation.cs b/DungeonShooting_Godot/src/game/activity/role/Role_Animation.cs index 57f7b88..29d22f1 100644 --- a/DungeonShooting_Godot/src/game/activity/role/Role_Animation.cs +++ b/DungeonShooting_Godot/src/game/activity/role/Role_Animation.cs @@ -30,7 +30,7 @@ MountPoint.Position = p3; //重新计算武器阴影位置 var activeItem = WeaponPack.ActiveItem; - activeItem.CalcShadowTransform(); + activeItem.CalcShadowTransform(true); //创建屏幕抖动 if (Face == FaceDirection.Right) {