diff --git a/DungeonShooting_Godot/prefab/ui/WeaponRoulette.tscn b/DungeonShooting_Godot/prefab/ui/WeaponRoulette.tscn index 77d62b4..100d134 100644 --- a/DungeonShooting_Godot/prefab/ui/WeaponRoulette.tscn +++ b/DungeonShooting_Godot/prefab/ui/WeaponRoulette.tscn @@ -1,9 +1,10 @@ -[gd_scene load_steps=7 format=3 uid="uid://dbjpknb3d5gfw"] +[gd_scene load_steps=8 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://e6krxgte01j3" path="res://resource/sprite/ui/roulette/RouletteBg.png" id="2_k6gjh"] [ext_resource type="Script" path="res://src/game/ui/weaponRoulette/WeaponSlot.cs" id="3_8v011"] [ext_resource type="Shader" path="res://resource/material/Outline.gdshader" id="4_p348k"] +[ext_resource type="Texture2D" uid="uid://dmm8jw06bhffh" path="res://resource/sprite/ui/commonIcon/Lock.png" id="6_7mog3"] [sub_resource type="ShaderMaterial" id="ShaderMaterial_i1wmw"] resource_local_to_scene = true @@ -21,7 +22,7 @@ grow_horizontal = 2 grow_vertical = 2 script = ExtResource("1_1uvbk") -metadata/_edit_vertical_guides_ = [960.0] +metadata/_edit_vertical_guides_ = [960.0, 1220.0] [node name="Bg" type="ColorRect" parent="."] layout_mode = 1 @@ -53,27 +54,41 @@ [node name="WeaponSlotNode" type="Node2D" parent="Control/RouletteBg"] script = ExtResource("3_8v011") -[node name="Control" type="Control" parent="Control/RouletteBg/WeaponSlotNode"] +[node name="SlotUi" type="Control" parent="Control/RouletteBg/WeaponSlotNode"] layout_mode = 3 anchors_preset = 0 offset_left = 65.25 offset_right = 66.25 offset_bottom = 1.0 -[node name="WeaponIcon" type="Sprite2D" parent="Control/RouletteBg/WeaponSlotNode/Control"] -material = SubResource("ShaderMaterial_i1wmw") - -[node name="AmmoLabel" type="Label" parent="Control/RouletteBg/WeaponSlotNode/Control"] +[node name="WeaponUi" type="Control" parent="Control/RouletteBg/WeaponSlotNode/SlotUi"] layout_mode = 1 anchors_preset = 8 anchor_left = 0.5 anchor_top = 0.5 anchor_right = 0.5 anchor_bottom = 0.5 -offset_left = -15.25 -offset_top = 4.5 -offset_right = 104.75 -offset_bottom = 44.5 +offset_left = -0.5 +offset_top = -0.5 +offset_right = 0.5 +offset_bottom = 0.5 +grow_horizontal = 2 +grow_vertical = 2 + +[node name="WeaponIcon" type="Sprite2D" parent="Control/RouletteBg/WeaponSlotNode/SlotUi/WeaponUi"] +material = SubResource("ShaderMaterial_i1wmw") + +[node name="AmmoLabel" type="Label" parent="Control/RouletteBg/WeaponSlotNode/SlotUi/WeaponUi"] +layout_mode = 1 +anchors_preset = 8 +anchor_left = 0.5 +anchor_top = 0.5 +anchor_right = 0.5 +anchor_bottom = 0.5 +offset_left = -15.375 +offset_top = 8.5 +offset_right = 104.625 +offset_bottom = 48.5 grow_horizontal = 2 grow_vertical = 2 scale = Vector2(0.25, 0.25) @@ -81,6 +96,10 @@ horizontal_alignment = 1 vertical_alignment = 1 +[node name="LockSprite" type="Sprite2D" parent="Control/RouletteBg/WeaponSlotNode/SlotUi"] +scale = Vector2(0.25, 0.25) +texture = ExtResource("6_7mog3") + [node name="SlotAreaNode" type="Area2D" parent="Control/RouletteBg/WeaponSlotNode"] collision_layer = 0 collision_mask = 8192 diff --git a/DungeonShooting_Godot/src/game/activity/role/player/Player.cs b/DungeonShooting_Godot/src/game/activity/role/player/Player.cs index 5f82093..6153367 100644 --- a/DungeonShooting_Godot/src/game/activity/role/player/Player.cs +++ b/DungeonShooting_Godot/src/game/activity/role/player/Player.cs @@ -74,7 +74,7 @@ _brushData2 = new BrushImageData(ExcelConfig.LiquidMaterial_Map["0001"]); - WeaponPack.SetCapacity(20); + WeaponPack.SetCapacity(10); } private void DebugSet() diff --git a/DungeonShooting_Godot/src/game/ui/weaponRoulette/WeaponRoulette.cs b/DungeonShooting_Godot/src/game/ui/weaponRoulette/WeaponRoulette.cs index 55700e6..b903858 100644 --- a/DungeonShooting_Godot/src/game/ui/weaponRoulette/WeaponRoulette.cs +++ b/DungeonShooting_Godot/src/game/ui/weaponRoulette/WeaponRoulette.cs @@ -65,7 +65,7 @@ } /// - /// 类型: , 路径: WeaponRoulette.Control.RouletteBg.WeaponSlotNode.Control.WeaponIcon + /// 类型: , 路径: WeaponRoulette.Control.RouletteBg.WeaponSlotNode.SlotUi.WeaponUi.WeaponIcon /// public class WeaponIcon : UiNode { @@ -74,7 +74,7 @@ } /// - /// 类型: , 路径: WeaponRoulette.Control.RouletteBg.WeaponSlotNode.Control.AmmoLabel + /// 类型: , 路径: WeaponRoulette.Control.RouletteBg.WeaponSlotNode.SlotUi.WeaponUi.AmmoLabel /// public class AmmoLabel : UiNode { @@ -83,12 +83,12 @@ } /// - /// 类型: , 路径: WeaponRoulette.Control.RouletteBg.WeaponSlotNode.Control + /// 类型: , 路径: WeaponRoulette.Control.RouletteBg.WeaponSlotNode.SlotUi.WeaponUi /// - public class Control_1 : UiNode + public class WeaponUi : UiNode { /// - /// 使用 Instance 属性获取当前节点实例对象, 节点类型: , 节点路径: WeaponRoulette.Control.RouletteBg.WeaponSlotNode.WeaponIcon + /// 使用 Instance 属性获取当前节点实例对象, 节点类型: , 节点路径: WeaponRoulette.Control.RouletteBg.WeaponSlotNode.SlotUi.WeaponIcon /// public WeaponIcon L_WeaponIcon { @@ -101,7 +101,7 @@ private WeaponIcon _L_WeaponIcon; /// - /// 使用 Instance 属性获取当前节点实例对象, 节点类型: , 节点路径: WeaponRoulette.Control.RouletteBg.WeaponSlotNode.AmmoLabel + /// 使用 Instance 属性获取当前节点实例对象, 节点类型: , 节点路径: WeaponRoulette.Control.RouletteBg.WeaponSlotNode.SlotUi.AmmoLabel /// public AmmoLabel L_AmmoLabel { @@ -113,8 +113,52 @@ } private AmmoLabel _L_AmmoLabel; - public Control_1(WeaponRoulettePanel uiPanel, Godot.Control node) : base(uiPanel, node) { } - public override Control_1 Clone() => new (UiPanel, (Godot.Control)Instance.Duplicate()); + public WeaponUi(WeaponRoulettePanel uiPanel, Godot.Control node) : base(uiPanel, node) { } + public override WeaponUi Clone() => new (UiPanel, (Godot.Control)Instance.Duplicate()); + } + + /// + /// 类型: , 路径: WeaponRoulette.Control.RouletteBg.WeaponSlotNode.SlotUi.LockSprite + /// + public class LockSprite : UiNode + { + public LockSprite(WeaponRoulettePanel uiPanel, Godot.Sprite2D node) : base(uiPanel, node) { } + public override LockSprite Clone() => new (UiPanel, (Godot.Sprite2D)Instance.Duplicate()); + } + + /// + /// 类型: , 路径: WeaponRoulette.Control.RouletteBg.WeaponSlotNode.SlotUi + /// + public class SlotUi : UiNode + { + /// + /// 使用 Instance 属性获取当前节点实例对象, 节点类型: , 节点路径: WeaponRoulette.Control.RouletteBg.WeaponSlotNode.WeaponUi + /// + public WeaponUi L_WeaponUi + { + get + { + if (_L_WeaponUi == null) _L_WeaponUi = new WeaponUi(UiPanel, Instance.GetNode("WeaponUi")); + return _L_WeaponUi; + } + } + private WeaponUi _L_WeaponUi; + + /// + /// 使用 Instance 属性获取当前节点实例对象, 节点类型: , 节点路径: WeaponRoulette.Control.RouletteBg.WeaponSlotNode.LockSprite + /// + public LockSprite L_LockSprite + { + get + { + if (_L_LockSprite == null) _L_LockSprite = new LockSprite(UiPanel, Instance.GetNode("LockSprite")); + return _L_LockSprite; + } + } + private LockSprite _L_LockSprite; + + public SlotUi(WeaponRoulettePanel uiPanel, Godot.Control node) : base(uiPanel, node) { } + public override SlotUi Clone() => new (UiPanel, (Godot.Control)Instance.Duplicate()); } /// @@ -154,17 +198,17 @@ public class WeaponSlotNode : UiNode { /// - /// 使用 Instance 属性获取当前节点实例对象, 节点类型: , 节点路径: WeaponRoulette.Control.RouletteBg.Control + /// 使用 Instance 属性获取当前节点实例对象, 节点类型: , 节点路径: WeaponRoulette.Control.RouletteBg.SlotUi /// - public Control_1 L_Control + public SlotUi L_SlotUi { get { - if (_L_Control == null) _L_Control = new Control_1(UiPanel, Instance.GetNode("Control")); - return _L_Control; + if (_L_SlotUi == null) _L_SlotUi = new SlotUi(UiPanel, Instance.GetNode("SlotUi")); + return _L_SlotUi; } } - private Control_1 _L_Control; + private SlotUi _L_SlotUi; /// /// 使用 Instance 属性获取当前节点实例对象, 节点类型: , 节点路径: WeaponRoulette.Control.RouletteBg.SlotAreaNode @@ -353,14 +397,29 @@ public Bg S_Bg => L_Bg; /// - /// 场景中唯一名称的节点, 节点类型: , 节点路径: WeaponRoulette.Control.RouletteBg.WeaponSlotNode.Control.WeaponIcon + /// 场景中唯一名称的节点, 节点类型: , 节点路径: WeaponRoulette.Control.RouletteBg.WeaponSlotNode.SlotUi.WeaponUi.WeaponIcon /// - public WeaponIcon S_WeaponIcon => L_Control.L_RouletteBg.L_WeaponSlotNode.L_Control.L_WeaponIcon; + public WeaponIcon S_WeaponIcon => L_Control.L_RouletteBg.L_WeaponSlotNode.L_SlotUi.L_WeaponUi.L_WeaponIcon; /// - /// 场景中唯一名称的节点, 节点类型: , 节点路径: WeaponRoulette.Control.RouletteBg.WeaponSlotNode.Control.AmmoLabel + /// 场景中唯一名称的节点, 节点类型: , 节点路径: WeaponRoulette.Control.RouletteBg.WeaponSlotNode.SlotUi.WeaponUi.AmmoLabel /// - public AmmoLabel S_AmmoLabel => L_Control.L_RouletteBg.L_WeaponSlotNode.L_Control.L_AmmoLabel; + public AmmoLabel S_AmmoLabel => L_Control.L_RouletteBg.L_WeaponSlotNode.L_SlotUi.L_WeaponUi.L_AmmoLabel; + + /// + /// 场景中唯一名称的节点, 节点类型: , 节点路径: WeaponRoulette.Control.RouletteBg.WeaponSlotNode.SlotUi.WeaponUi + /// + public WeaponUi S_WeaponUi => L_Control.L_RouletteBg.L_WeaponSlotNode.L_SlotUi.L_WeaponUi; + + /// + /// 场景中唯一名称的节点, 节点类型: , 节点路径: WeaponRoulette.Control.RouletteBg.WeaponSlotNode.SlotUi.LockSprite + /// + public LockSprite S_LockSprite => L_Control.L_RouletteBg.L_WeaponSlotNode.L_SlotUi.L_LockSprite; + + /// + /// 场景中唯一名称的节点, 节点类型: , 节点路径: WeaponRoulette.Control.RouletteBg.WeaponSlotNode.SlotUi + /// + public SlotUi S_SlotUi => L_Control.L_RouletteBg.L_WeaponSlotNode.L_SlotUi; /// /// 场景中唯一名称的节点, 节点类型: , 节点路径: WeaponRoulette.Control.RouletteBg.WeaponSlotNode.SlotAreaNode.CollisionPolygon2D @@ -403,6 +462,11 @@ public ColorRect S_ColorRect => L_Control.L_ColorRect; /// + /// 场景中唯一名称的节点, 节点类型: , 节点路径: WeaponRoulette.Control + /// + public Control S_Control => L_Control; + + /// /// 场景中唯一名称的节点, 节点类型: , 节点路径: WeaponRoulette.MouseArea.CollisionShape2D /// public CollisionShape2D S_CollisionShape2D => L_MouseArea.L_CollisionShape2D; diff --git a/DungeonShooting_Godot/src/game/ui/weaponRoulette/WeaponRoulettePanel.cs b/DungeonShooting_Godot/src/game/ui/weaponRoulette/WeaponRoulettePanel.cs index 4fdbdaa..a910eeb 100644 --- a/DungeonShooting_Godot/src/game/ui/weaponRoulette/WeaponRoulettePanel.cs +++ b/DungeonShooting_Godot/src/game/ui/weaponRoulette/WeaponRoulettePanel.cs @@ -43,8 +43,9 @@ var sectorPolygon = Utils.CreateSectorPolygon(0, 100, 360f / SlotCount, 4); collisionPolygon2D.Polygon = sectorPolygon; clone.Instance.RotationDegrees = angle; - clone.L_Control.Instance.RotationDegrees = -angle; - clone.L_Control.L_WeaponIcon.Instance.Material = (Material)S_WeaponSlotNode.L_Control.L_WeaponIcon.Instance.Material.Duplicate(); + clone.L_SlotUi.Instance.RotationDegrees = -angle; + clone.L_SlotUi.L_WeaponUi.L_WeaponIcon.Instance.Material = + (Material)S_WeaponSlotNode.L_SlotUi.L_WeaponUi.L_WeaponIcon.Instance.Material.Duplicate(); _slotNodes.Add(clone); } @@ -200,7 +201,7 @@ { foreach (var slotNode in _slotNodes) { - slotNode.L_Control.Instance.Visible = false; + slotNode.L_SlotUi.Instance.Visible = false; } return; @@ -210,28 +211,34 @@ for (var i = 0; i < _slotNodes.Count; i++) { var slotNode = _slotNodes[i]; - slotNode.L_Control.Instance.Visible = true; + slotNode.L_SlotUi.Instance.Visible = true; + slotNode.L_SlotUi.L_LockSprite.Instance.Visible = false; + var weaponIndex = i + _pageIndex * SlotCount; if (weapons.Length > weaponIndex) { var weapon = weapons[weaponIndex]; - if (weapon != null) + if (weapon != null) //有武器 { - slotNode.L_Control.Instance.Visible = true; - slotNode.L_Control.L_WeaponIcon.Instance.Texture = weapon.GetDefaultTexture(); - slotNode.L_Control.L_AmmoLabel.Instance.Text = + slotNode.L_SlotUi.L_WeaponUi.Instance.Visible = true; + slotNode.L_SlotUi.L_WeaponUi.L_WeaponIcon.Instance.Texture = weapon.GetDefaultTexture(); + slotNode.L_SlotUi.L_WeaponUi.L_AmmoLabel.Instance.Text = (weapon.CurrAmmo + weapon.ResidueAmmo).ToString() + "/" + weapon.Attribute.MaxAmmoCapacity; slotNode.Instance.SetWeapon(weapon); + slotNode.L_SlotAreaNode.Instance.Monitoring = true; } - else + else //已经解锁,但是没有武器 { - slotNode.L_Control.Instance.Visible = false; + slotNode.L_SlotUi.L_WeaponUi.Instance.Visible = false; + slotNode.L_SlotAreaNode.Instance.Monitoring = false; slotNode.Instance.ClearWeapon(); } } - else + else //未解锁 { - slotNode.L_Control.Instance.Visible = false; + slotNode.L_SlotUi.L_LockSprite.Instance.Visible = true; + slotNode.L_SlotUi.L_WeaponUi.Instance.Visible = false; + slotNode.L_SlotAreaNode.Instance.Monitoring = false; slotNode.Instance.ClearWeapon(); } } diff --git a/DungeonShooting_Godot/src/game/ui/weaponRoulette/WeaponSlot.cs b/DungeonShooting_Godot/src/game/ui/weaponRoulette/WeaponSlot.cs index 1d2341d..976a0b2 100644 --- a/DungeonShooting_Godot/src/game/ui/weaponRoulette/WeaponSlot.cs +++ b/DungeonShooting_Godot/src/game/ui/weaponRoulette/WeaponSlot.cs @@ -32,12 +32,12 @@ { _node.UiPanel.ActiveWeapon = _weapon; _node.Instance.Scale = new Vector2(1.1f, 1.1f); - _node.L_Control.L_WeaponIcon.Instance.Material.SetShaderMaterialParameter(ShaderParamNames.OutlineColor, Colors.White); + _node.L_SlotUi.L_WeaponUi.L_WeaponIcon.Instance.Material.SetShaderMaterialParameter(ShaderParamNames.OutlineColor, Colors.White); } private void OnAreaExited(Area2D other) { _node.Instance.Scale = Vector2.One; - _node.L_Control.L_WeaponIcon.Instance.Material.SetShaderMaterialParameter(ShaderParamNames.OutlineColor, Colors.Black); + _node.L_SlotUi.L_WeaponUi.L_WeaponIcon.Instance.Material.SetShaderMaterialParameter(ShaderParamNames.OutlineColor, Colors.Black); } } \ No newline at end of file