diff --git a/DungeonShooting_Godot/prefab/ui/WeaponRoulette.tscn b/DungeonShooting_Godot/prefab/ui/WeaponRoulette.tscn index 99cbb14..37b98be 100644 --- a/DungeonShooting_Godot/prefab/ui/WeaponRoulette.tscn +++ b/DungeonShooting_Godot/prefab/ui/WeaponRoulette.tscn @@ -1,16 +1,51 @@ -[gd_scene load_steps=3 format=3 uid="uid://dbjpknb3d5gfw"] +[gd_scene load_steps=4 format=3 uid="uid://dbjpknb3d5gfw"] [ext_resource type="Script" path="res://src/game/ui/weaponRoulette/WeaponRoulettePanel.cs" id="1_1uvbk"] -[ext_resource type="Texture2D" uid="uid://uhhfgdhpk7i4" path="res://icon.png" id="2_yfusg"] +[ext_resource type="Texture2D" uid="uid://e6krxgte01j3" path="res://resource/sprite/ui/roulette/RouletteBg.png" id="2_k6gjh"] +[ext_resource type="Texture2D" uid="uid://civvcowt2wklr" path="res://resource/sprite/weapon/weapon0001/Weapon0001.png" id="3_f6rvp"] [node name="WeaponRoulette" type="Control"] layout_mode = 3 anchors_preset = 15 anchor_right = 1.0 anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 script = ExtResource("1_1uvbk") -[node name="Icon" type="Sprite2D" parent="."] -visible = false -position = Vector2(113, 116) -texture = ExtResource("2_yfusg") +[node name="Bg" 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.588235) + +[node name="Control" type="Control" parent="."] +layout_mode = 1 +anchors_preset = 8 +anchor_left = 0.5 +anchor_top = 0.5 +anchor_right = 0.5 +anchor_bottom = 0.5 +offset_left = -0.5 +offset_top = -20.0 +offset_right = 0.5 +offset_bottom = -19.0 +grow_horizontal = 2 +grow_vertical = 2 + +[node name="RouletteBg" type="Sprite2D" parent="Control"] +scale = Vector2(4, 4) +texture = ExtResource("2_k6gjh") + +[node name="WeaponSlot" type="Node2D" parent="Control/RouletteBg"] + +[node name="Sprite" type="Sprite2D" parent="Control/RouletteBg/WeaponSlot"] +position = Vector2(65, 2.08165e-12) +texture = ExtResource("3_f6rvp") + +[node name="Area2D" type="Area2D" parent="Control/RouletteBg/WeaponSlot"] + +[node name="CollisionPolygon2D" type="CollisionPolygon2D" parent="Control/RouletteBg/WeaponSlot/Area2D"] diff --git a/DungeonShooting_Godot/resource/sprite/Light.png b/DungeonShooting_Godot/resource/sprite/Light.png new file mode 100644 index 0000000..e5d1fcd --- /dev/null +++ b/DungeonShooting_Godot/resource/sprite/Light.png Binary files differ diff --git a/DungeonShooting_Godot/resource/sprite/Light.png.import b/DungeonShooting_Godot/resource/sprite/Light.png.import new file mode 100644 index 0000000..22630da --- /dev/null +++ b/DungeonShooting_Godot/resource/sprite/Light.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://d0c6oc02hkp4i" +path="res://.godot/imported/Light.png-9ee16c293926cdacc658fb283472a574.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://resource/sprite/Light.png" +dest_files=["res://.godot/imported/Light.png-9ee16c293926cdacc658fb283472a574.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/DungeonShooting_Godot/resource/sprite/ui/roulette/RouletteBg.png b/DungeonShooting_Godot/resource/sprite/ui/roulette/RouletteBg.png new file mode 100644 index 0000000..3518e20 --- /dev/null +++ b/DungeonShooting_Godot/resource/sprite/ui/roulette/RouletteBg.png Binary files differ diff --git a/DungeonShooting_Godot/resource/sprite/ui/roulette/RouletteBg.png.import b/DungeonShooting_Godot/resource/sprite/ui/roulette/RouletteBg.png.import new file mode 100644 index 0000000..91d39df --- /dev/null +++ b/DungeonShooting_Godot/resource/sprite/ui/roulette/RouletteBg.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://e6krxgte01j3" +path="res://.godot/imported/RouletteBg.png-a8e0ab7b49cd64da4b7f4e5bab210d71.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://resource/sprite/ui/roulette/RouletteBg.png" +dest_files=["res://.godot/imported/RouletteBg.png-a8e0ab7b49cd64da4b7f4e5bab210d71.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/DungeonShooting_Godot/scene/Hall.tscn b/DungeonShooting_Godot/scene/Hall.tscn index 7119221..23cb0c9 100644 --- a/DungeonShooting_Godot/scene/Hall.tscn +++ b/DungeonShooting_Godot/scene/Hall.tscn @@ -104,6 +104,7 @@ shape = SubResource("RectangleShape2D_ru8u4") [node name="StaticBody2D" type="StaticBody2D" parent="." index="5"] +visible = false collision_mask = 0 [node name="CollisionShape2D" type="CollisionShape2D" parent="StaticBody2D" index="0"] @@ -146,7 +147,7 @@ ShowOffset = Vector2(2.08165e-12, 2) CollisionVisible = false -[node name="Sprite2D" type="Sprite2D" parent="ItemRoot/Item0006" index="1"] +[node name="Sprite2D" type="Sprite2D" parent="ItemRoot/Item0006" index="0"] position = Vector2(-10, -7) texture = ExtResource("7_30qwa") @@ -158,7 +159,7 @@ ShowOffset = Vector2(2.08165e-12, 2) CollisionVisible = false -[node name="ActivityInstance" type="Node2D" parent="ItemRoot/Item0008" index="1"] +[node name="ActivityInstance" type="Node2D" parent="ItemRoot/Item0008" index="0"] position = Vector2(2.5, -12) script = ExtResource("5_lowqi") Id = "item_0031" @@ -174,7 +175,7 @@ ShowOffset = Vector2(2.08165e-12, 2) CollisionVisible = false -[node name="Item26" type="Sprite2D" parent="ItemRoot/Item0013" index="1"] +[node name="Item26" type="Sprite2D" parent="ItemRoot/Item0013" index="0"] position = Vector2(18, -2) texture = ExtResource("8_61dkg") @@ -194,19 +195,19 @@ ShowOffset = Vector2(2.08165e-12, 2) CollisionVisible = false -[node name="Sprite2D" type="Sprite2D" parent="ItemRoot/Item0017" index="1"] +[node name="Sprite2D" type="Sprite2D" parent="ItemRoot/Item0017" index="0"] position = Vector2(-3, -16) texture = ExtResource("8_u3vry") -[node name="Sprite2D2" type="Sprite2D" parent="ItemRoot/Item0017" index="2"] +[node name="Sprite2D2" type="Sprite2D" parent="ItemRoot/Item0017" index="1"] position = Vector2(18, -11) texture = ExtResource("9_lhdr8") -[node name="Sprite2D3" type="Sprite2D" parent="ItemRoot/Item0017" index="3"] +[node name="Sprite2D3" type="Sprite2D" parent="ItemRoot/Item0017" index="2"] position = Vector2(-16, -8) texture = ExtResource("10_4eqn0") -[node name="Sprite2D4" type="Sprite2D" parent="ItemRoot/Item0017" index="4"] +[node name="Sprite2D4" type="Sprite2D" parent="ItemRoot/Item0017" index="3"] position = Vector2(10, -7) texture = ExtResource("11_tg3jo") @@ -238,11 +239,11 @@ DefaultLayer = 1 CollisionVisible = false -[node name="Sprite2D" type="Sprite2D" parent="ItemRoot/Item0002" index="1"] +[node name="Sprite2D" type="Sprite2D" parent="ItemRoot/Item0002" index="0"] position = Vector2(32, -2) texture = ExtResource("12_agfji") -[node name="Sprite2D2" type="Sprite2D" parent="ItemRoot/Item0002" index="2"] +[node name="Sprite2D2" type="Sprite2D" parent="ItemRoot/Item0002" index="1"] material = SubResource("ShaderMaterial_i7git") position = Vector2(0, -18) scale = Vector2(1, -1) @@ -260,7 +261,7 @@ Id = "item_0004" DefaultLayer = 1 -[node name="Sprite2D" type="Sprite2D" parent="ItemRoot/Item0004" index="1"] +[node name="Sprite2D" type="Sprite2D" parent="ItemRoot/Item0004" index="0"] position = Vector2(0, -17) texture = ExtResource("13_unnpl") @@ -294,15 +295,15 @@ Id = "item_0009" DefaultLayer = 1 -[node name="Sprite2D" type="Sprite2D" parent="ItemRoot/Item0009" index="1"] +[node name="Sprite2D" type="Sprite2D" parent="ItemRoot/Item0009" index="0"] position = Vector2(-24, -10) texture = ExtResource("15_h7524") -[node name="Sprite2D2" type="Sprite2D" parent="ItemRoot/Item0009" index="2"] +[node name="Sprite2D2" type="Sprite2D" parent="ItemRoot/Item0009" index="1"] position = Vector2(1, -10) texture = ExtResource("15_h7524") -[node name="Sprite2D3" type="Sprite2D" parent="ItemRoot/Item0009" index="3"] +[node name="Sprite2D3" type="Sprite2D" parent="ItemRoot/Item0009" index="2"] position = Vector2(37, -10) texture = ExtResource("15_h7524") @@ -336,7 +337,7 @@ Id = "item_0015" DefaultLayer = 1 -[node name="Slice04" type="Sprite2D" parent="ItemRoot/Item0015" index="1"] +[node name="Slice04" type="Sprite2D" parent="ItemRoot/Item0015" index="0"] position = Vector2(16, -9) texture = ExtResource("15_h7524") @@ -358,11 +359,11 @@ Id = "item_0019" DefaultLayer = 1 -[node name="Sprite2D" type="Sprite2D" parent="ItemRoot/Item0019" index="1"] +[node name="Sprite2D" type="Sprite2D" parent="ItemRoot/Item0019" index="0"] position = Vector2(-23, -7) texture = ExtResource("16_xj0e1") -[node name="Sprite2D2" type="Sprite2D" parent="ItemRoot/Item0019" index="2"] +[node name="Sprite2D2" type="Sprite2D" parent="ItemRoot/Item0019" index="1"] position = Vector2(24, -8) texture = ExtResource("17_gwwce") diff --git a/DungeonShooting_Godot/src/game/ui/roomMap/RoomMapPanel.cs b/DungeonShooting_Godot/src/game/ui/roomMap/RoomMapPanel.cs index bc71185..3009e94 100644 --- a/DungeonShooting_Godot/src/game/ui/roomMap/RoomMapPanel.cs +++ b/DungeonShooting_Godot/src/game/ui/roomMap/RoomMapPanel.cs @@ -64,17 +64,12 @@ { if (UiManager.GetUiInstanceCount(UiManager.UiNames.PauseMenu) == 0) { - World.Current.Pause = true; - _pressMapFlag = true; - _isMagnifyMap = true; - MagnifyMap(); + ExpandMap(); } } else if (!InputManager.Map && _isMagnifyMap) //还原小地图 { - ResetMap(); - _isMagnifyMap = false; - World.Current.Pause = false; + ShrinkMap(); } } @@ -175,6 +170,27 @@ } } + /// + /// 执行展开地图 + /// + public void ExpandMap() + { + World.Current.Pause = true; + _pressMapFlag = true; + _isMagnifyMap = true; + MagnifyMap(); + } + + /// + /// 执行收起地图 + /// + public void ShrinkMap() + { + ResetMap(); + _isMagnifyMap = false; + World.Current.Pause = false; + } + private void OnDrawContainerResized() { S_Mark.Instance.Position = S_DrawContainer.Instance.Size / 2; diff --git a/DungeonShooting_Godot/src/game/ui/roomUI/RoomUIPanel.cs b/DungeonShooting_Godot/src/game/ui/roomUI/RoomUIPanel.cs index 70dfb0d..466618c 100644 --- a/DungeonShooting_Godot/src/game/ui/roomUI/RoomUIPanel.cs +++ b/DungeonShooting_Godot/src/game/ui/roomUI/RoomUIPanel.cs @@ -16,6 +16,8 @@ private EventFactory _factory; + private bool _showMap = false; + public override void OnCreateUi() { _reloadBar = new ReloadBarHandler(L_ReloadBar); @@ -64,6 +66,8 @@ _weaponBar.Process(delta); _activePropBar.Process(delta); _lifeBar.Process(delta); + + } //玩家拾起道具, 弹出提示 diff --git a/DungeonShooting_Godot/src/game/ui/weaponRoulette/WeaponRoulette.cs b/DungeonShooting_Godot/src/game/ui/weaponRoulette/WeaponRoulette.cs index 65cb7a5..64dc32a 100644 --- a/DungeonShooting_Godot/src/game/ui/weaponRoulette/WeaponRoulette.cs +++ b/DungeonShooting_Godot/src/game/ui/weaponRoulette/WeaponRoulette.cs @@ -6,17 +6,30 @@ public abstract partial class WeaponRoulette : UiBase { /// - /// 使用 Instance 属性获取当前节点实例对象, 节点类型: , 节点路径: WeaponRoulette.Icon + /// 使用 Instance 属性获取当前节点实例对象, 节点类型: , 节点路径: WeaponRoulette.Bg /// - public Icon L_Icon + public Bg L_Bg { get { - if (_L_Icon == null) _L_Icon = new Icon((WeaponRoulettePanel)this, GetNode("Icon")); - return _L_Icon; + if (_L_Bg == null) _L_Bg = new Bg((WeaponRoulettePanel)this, GetNode("Bg")); + return _L_Bg; } } - private Icon _L_Icon; + private Bg _L_Bg; + + /// + /// 使用 Instance 属性获取当前节点实例对象, 节点类型: , 节点路径: WeaponRoulette.Control + /// + public Control L_Control + { + get + { + if (_L_Control == null) _L_Control = new Control((WeaponRoulettePanel)this, GetNode("Control")); + return _L_Control; + } + } + private Control _L_Control; public WeaponRoulette() : base(nameof(WeaponRoulette)) @@ -29,18 +42,167 @@ } /// - /// 类型: , 路径: WeaponRoulette.Icon + /// 类型: , 路径: WeaponRoulette.Bg /// - public class Icon : UiNode + public class Bg : UiNode { - public Icon(WeaponRoulettePanel uiPanel, Godot.Sprite2D node) : base(uiPanel, node) { } - public override Icon Clone() => new (UiPanel, (Godot.Sprite2D)Instance.Duplicate()); + public Bg(WeaponRoulettePanel uiPanel, Godot.ColorRect node) : base(uiPanel, node) { } + public override Bg Clone() => new (UiPanel, (Godot.ColorRect)Instance.Duplicate()); + } + + /// + /// 类型: , 路径: WeaponRoulette.Control.RouletteBg.WeaponSlot.Sprite + /// + public class Sprite : UiNode + { + public Sprite(WeaponRoulettePanel uiPanel, Godot.Sprite2D node) : base(uiPanel, node) { } + public override Sprite Clone() => new (UiPanel, (Godot.Sprite2D)Instance.Duplicate()); + } + + /// + /// 类型: , 路径: WeaponRoulette.Control.RouletteBg.WeaponSlot.Area2D.CollisionPolygon2D + /// + public class CollisionPolygon2D : UiNode + { + public CollisionPolygon2D(WeaponRoulettePanel uiPanel, Godot.CollisionPolygon2D node) : base(uiPanel, node) { } + public override CollisionPolygon2D Clone() => new (UiPanel, (Godot.CollisionPolygon2D)Instance.Duplicate()); + } + + /// + /// 类型: , 路径: WeaponRoulette.Control.RouletteBg.WeaponSlot.Area2D + /// + public class Area2D : UiNode + { + /// + /// 使用 Instance 属性获取当前节点实例对象, 节点类型: , 节点路径: WeaponRoulette.Control.RouletteBg.WeaponSlot.CollisionPolygon2D + /// + public CollisionPolygon2D L_CollisionPolygon2D + { + get + { + if (_L_CollisionPolygon2D == null) _L_CollisionPolygon2D = new CollisionPolygon2D(UiPanel, Instance.GetNode("CollisionPolygon2D")); + return _L_CollisionPolygon2D; + } + } + private CollisionPolygon2D _L_CollisionPolygon2D; + + public Area2D(WeaponRoulettePanel uiPanel, Godot.Area2D node) : base(uiPanel, node) { } + public override Area2D Clone() => new (UiPanel, (Godot.Area2D)Instance.Duplicate()); + } + + /// + /// 类型: , 路径: WeaponRoulette.Control.RouletteBg.WeaponSlot + /// + public class WeaponSlot : UiNode + { + /// + /// 使用 Instance 属性获取当前节点实例对象, 节点类型: , 节点路径: WeaponRoulette.Control.RouletteBg.Sprite + /// + public Sprite L_Sprite + { + get + { + if (_L_Sprite == null) _L_Sprite = new Sprite(UiPanel, Instance.GetNode("Sprite")); + return _L_Sprite; + } + } + private Sprite _L_Sprite; + + /// + /// 使用 Instance 属性获取当前节点实例对象, 节点类型: , 节点路径: WeaponRoulette.Control.RouletteBg.Area2D + /// + public Area2D L_Area2D + { + get + { + if (_L_Area2D == null) _L_Area2D = new Area2D(UiPanel, Instance.GetNode("Area2D")); + return _L_Area2D; + } + } + private Area2D _L_Area2D; + + public WeaponSlot(WeaponRoulettePanel uiPanel, Godot.Node2D node) : base(uiPanel, node) { } + public override WeaponSlot Clone() => new (UiPanel, (Godot.Node2D)Instance.Duplicate()); + } + + /// + /// 类型: , 路径: WeaponRoulette.Control.RouletteBg + /// + public class RouletteBg : UiNode + { + /// + /// 使用 Instance 属性获取当前节点实例对象, 节点类型: , 节点路径: WeaponRoulette.Control.WeaponSlot + /// + public WeaponSlot L_WeaponSlot + { + get + { + if (_L_WeaponSlot == null) _L_WeaponSlot = new WeaponSlot(UiPanel, Instance.GetNode("WeaponSlot")); + return _L_WeaponSlot; + } + } + private WeaponSlot _L_WeaponSlot; + + public RouletteBg(WeaponRoulettePanel uiPanel, Godot.Sprite2D node) : base(uiPanel, node) { } + public override RouletteBg Clone() => new (UiPanel, (Godot.Sprite2D)Instance.Duplicate()); + } + + /// + /// 类型: , 路径: WeaponRoulette.Control + /// + public class Control : UiNode + { + /// + /// 使用 Instance 属性获取当前节点实例对象, 节点类型: , 节点路径: WeaponRoulette.RouletteBg + /// + public RouletteBg L_RouletteBg + { + get + { + if (_L_RouletteBg == null) _L_RouletteBg = new RouletteBg(UiPanel, Instance.GetNode("RouletteBg")); + return _L_RouletteBg; + } + } + private RouletteBg _L_RouletteBg; + + public Control(WeaponRoulettePanel uiPanel, Godot.Control node) : base(uiPanel, node) { } + public override Control Clone() => new (UiPanel, (Godot.Control)Instance.Duplicate()); } /// - /// 场景中唯一名称的节点, 节点类型: , 节点路径: WeaponRoulette.Icon + /// 场景中唯一名称的节点, 节点类型: , 节点路径: WeaponRoulette.Bg /// - public Icon S_Icon => L_Icon; + public Bg S_Bg => L_Bg; + + /// + /// 场景中唯一名称的节点, 节点类型: , 节点路径: WeaponRoulette.Control.RouletteBg.WeaponSlot.Sprite + /// + public Sprite S_Sprite => L_Control.L_RouletteBg.L_WeaponSlot.L_Sprite; + + /// + /// 场景中唯一名称的节点, 节点类型: , 节点路径: WeaponRoulette.Control.RouletteBg.WeaponSlot.Area2D.CollisionPolygon2D + /// + public CollisionPolygon2D S_CollisionPolygon2D => L_Control.L_RouletteBg.L_WeaponSlot.L_Area2D.L_CollisionPolygon2D; + + /// + /// 场景中唯一名称的节点, 节点类型: , 节点路径: WeaponRoulette.Control.RouletteBg.WeaponSlot.Area2D + /// + public Area2D S_Area2D => L_Control.L_RouletteBg.L_WeaponSlot.L_Area2D; + + /// + /// 场景中唯一名称的节点, 节点类型: , 节点路径: WeaponRoulette.Control.RouletteBg.WeaponSlot + /// + public WeaponSlot S_WeaponSlot => L_Control.L_RouletteBg.L_WeaponSlot; + + /// + /// 场景中唯一名称的节点, 节点类型: , 节点路径: WeaponRoulette.Control.RouletteBg + /// + public RouletteBg S_RouletteBg => L_Control.L_RouletteBg; + + /// + /// 场景中唯一名称的节点, 节点类型: , 节点路径: WeaponRoulette.Control + /// + public Control S_Control => L_Control; } diff --git a/DungeonShooting_Godot/src/game/ui/weaponRoulette/WeaponRoulettePanel.cs b/DungeonShooting_Godot/src/game/ui/weaponRoulette/WeaponRoulettePanel.cs index 504f694..1e17149 100644 --- a/DungeonShooting_Godot/src/game/ui/weaponRoulette/WeaponRoulettePanel.cs +++ b/DungeonShooting_Godot/src/game/ui/weaponRoulette/WeaponRoulettePanel.cs @@ -7,13 +7,28 @@ /// public partial class WeaponRoulettePanel : WeaponRoulette { + /// + /// 武器槽数量 + /// + public const int SlotCount = 6; //是否展开轮盘 private bool _pressRouletteFlag = false; + private bool _isMagnifyRoulette = false; public override void OnCreateUi() { + S_RouletteBg.Instance.Visible = false; + S_Bg.Instance.Visible = false; + + for (var i = 0; i < SlotCount; i++) + { + var angle = i * (360 / SlotCount); + var clone = S_WeaponSlot.CloneAndPut(); + clone.Instance.RotationDegrees = angle; + } + S_WeaponSlot.Instance.Visible = false; } public override void OnDestroyUi() @@ -27,5 +42,37 @@ { _pressRouletteFlag = false; } + + //按下地图按键 + if (InputManager.Roulette && !_isMagnifyRoulette) //打开轮盘 + { + if (UiManager.GetUiInstanceCount(UiManager.UiNames.PauseMenu) == 0) + { + ExpandRoulette(); + } + } + else if (!InputManager.Roulette && _isMagnifyRoulette) //缩小轮盘 + { + ShrinkRoulette(); + } + } + + private void ExpandRoulette() + { + World.Current.Pause = true; + _pressRouletteFlag = true; + _isMagnifyRoulette = true; + + S_RouletteBg.Instance.Visible = true; + S_Bg.Instance.Visible = true; + } + + private void ShrinkRoulette() + { + S_RouletteBg.Instance.Visible = false; + S_Bg.Instance.Visible = false; + + _isMagnifyRoulette = false; + World.Current.Pause = false; } }