From 81c84e4dc81e7b2aca0ca34bdd968b1beb072141 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=A8=E8=90=BD=E5=9F=BA=E5=9B=B4=E8=99=BE?= <3161880837@qq.com> Date: Sat, 6 Sep 2025 11:23:11 +0800 Subject: [PATCH] =?UTF-8?q?feat(UI):=20=E6=B7=BB=E5=8A=A0=E6=AD=A6?= =?UTF-8?q?=E5=99=A8=E9=9D=A2=E6=9D=BF=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 实现武器面板的打开关闭逻辑,包括: - 创建WeaponPanel脚本处理武器转移 - 在UIState中添加武器面板输入控制 - 更新UI场景添加武器面板节点 - 简化武器面板场景结构 --- components/Scenes/FullscreenPanels/Weapon.tscn | 17 ++++------------- components/Scenes/UI.tscn | 7 ++++++- scripts/Contents/Panels/GameOver.gd | 1 + scripts/Contents/Panels/WeaponPanel.gd | 13 +++++++++++++ scripts/Statemachine/UIState.gd | 10 ++++++++++ 5 files changed, 34 insertions(+), 14 deletions(-) create mode 100644 scripts/Contents/Panels/WeaponPanel.gd diff --git a/components/Scenes/FullscreenPanels/Weapon.tscn b/components/Scenes/FullscreenPanels/Weapon.tscn index 525432d..910ed8a 100644 --- a/components/Scenes/FullscreenPanels/Weapon.tscn +++ b/components/Scenes/FullscreenPanels/Weapon.tscn @@ -1,25 +1,16 @@ -[gd_scene load_steps=5 format=3 uid="uid://dekcqdhrjs07u"] +[gd_scene load_steps=3 format=3 uid="uid://dekcqdhrjs07u"] [ext_resource type="PackedScene" uid="uid://d3qojeqa3difn" path="res://components/Abstracts/FullscreenPanelBase.tscn" id="1_yodmq"] -[ext_resource type="PackedScene" uid="uid://c0n3igy4hucrg" path="res://components/Weapons/PurpleCrystal.tscn" id="2_5r0we"] -[ext_resource type="PackedScene" uid="uid://cxabqjo7skxev" path="res://components/Weapons/BigLaser.tscn" id="3_6xf37"] -[ext_resource type="PackedScene" uid="uid://wl8u5m52708w" path="res://components/Weapons/LGBT.tscn" id="4_s13oq"] +[ext_resource type="Script" path="res://scripts/Contents/Panels/WeaponPanel.gd" id="2_6alu1"] [node name="Weapon" instance=ExtResource("1_yodmq")] +script = ExtResource("2_6alu1") [node name="wrapper" parent="content" index="0"] theme_override_constants/separation = 50 [node name="box" type="HBoxContainer" parent="content/wrapper" index="0"] +unique_name_in_owner = true layout_mode = 2 theme_override_constants/separation = 20 alignment = 1 - -[node name="PurpleCrystal" parent="content/wrapper/box" index="0" instance=ExtResource("2_5r0we")] -layout_mode = 2 - -[node name="BigLaser" parent="content/wrapper/box" index="1" instance=ExtResource("3_6xf37")] -layout_mode = 2 - -[node name="???" parent="content/wrapper/box" index="2" instance=ExtResource("4_s13oq")] -layout_mode = 2 diff --git a/components/Scenes/UI.tscn b/components/Scenes/UI.tscn index 79f3c68..70364d7 100644 --- a/components/Scenes/UI.tscn +++ b/components/Scenes/UI.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=18 format=3 uid="uid://dfwg750a47ggx"] +[gd_scene load_steps=19 format=3 uid="uid://dfwg750a47ggx"] [ext_resource type="PackedScene" uid="uid://ofpg5s3j7esv" path="res://components/UI/BossBar.tscn" id="1_2pe58"] [ext_resource type="Script" path="res://scripts/Statemachine/UIState.gd" id="1_f00a6"] @@ -12,6 +12,7 @@ [ext_resource type="PackedScene" uid="uid://d1ulrvupa76ap" path="res://components/UI/ColorBar.tscn" id="9_44nw8"] [ext_resource type="StyleBox" uid="uid://ddnjus87wwlm8" path="res://styleboxes/leftPanel.tres" id="11_67ghp"] [ext_resource type="PackedScene" uid="uid://cksonrrx38k36" path="res://components/Scenes/FullscreenPanels/Pause.tscn" id="12_jkm6o"] +[ext_resource type="PackedScene" uid="uid://dekcqdhrjs07u" path="res://components/Scenes/FullscreenPanels/Weapon.tscn" id="13_bmc24"] [sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_ri8gw"] content_margin_left = 20.0 @@ -272,3 +273,7 @@ layout_mode = 1 [node name="Pause" parent="root/panels" instance=ExtResource("12_jkm6o")] layout_mode = 1 + +[node name="Weapon" parent="root/panels" instance=ExtResource("13_bmc24")] +visible = false +layout_mode = 1 diff --git a/scripts/Contents/Panels/GameOver.gd b/scripts/Contents/Panels/GameOver.gd index 703e5c0..179b82e 100644 --- a/scripts/Contents/Panels/GameOver.gd +++ b/scripts/Contents/Panels/GameOver.gd @@ -1,3 +1,4 @@ +@tool extends FullscreenPanelBase @onready var audio = $"%audio" diff --git a/scripts/Contents/Panels/WeaponPanel.gd b/scripts/Contents/Panels/WeaponPanel.gd new file mode 100644 index 0000000..f66626f --- /dev/null +++ b/scripts/Contents/Panels/WeaponPanel.gd @@ -0,0 +1,13 @@ +@tool +extends FullscreenPanelBase + +@onready var box = $"%box" + +func beforeOpen(): + for weapon in UIState.player.weapons: + UIState.player.weaponStore.remove_child(weapon) + box.add_child(weapon) +func afterClose(): + for weapon in box.get_children(): + box.remove_child(weapon) + UIState.player.weaponStore.add_child(weapon) diff --git a/scripts/Statemachine/UIState.gd b/scripts/Statemachine/UIState.gd index ede3cfa..bc0d852 100644 --- a/scripts/Statemachine/UIState.gd +++ b/scripts/Statemachine/UIState.gd @@ -49,6 +49,16 @@ func _physics_process(_delta): closeCurrentPanel() else: setPanel("Pause") + if Input.is_action_just_pressed("openWeapon"): + var canOpen = true + if currentPanel: + if currentPanel.name == "Weapon": + closeCurrentPanel() + canOpen = false + elif ["MakeFeed", "GameOver"].has(currentPanel.name): + canOpen = false + if canOpen: + setPanel("Weapon") static func setPanel(targetName: String = ""): currentPanel = null