From 3171c399151a083e6b6b64d8b75150763d281ab5 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: Fri, 12 Sep 2025 22:08:55 +0800 Subject: [PATCH] =?UTF-8?q?feat(UI):=20=E6=B7=BB=E5=8A=A0=E6=B8=B8?= =?UTF-8?q?=E6=88=8F=E5=BC=80=E5=A7=8B=E7=95=8C=E9=9D=A2=E5=92=8C=E9=9A=BE?= =?UTF-8?q?=E5=BA=A6=E9=80=89=E6=8B=A9=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 实现游戏开始界面,包含难度选择滑块和开始按钮 修改游戏规则初始难度为10并调整掉落物品数量计算 添加游戏开始条件检查,确保运行时间超过3秒且没有敌人时显示制作饲料界面 --- .../Scenes/FullscreenPanels/Starter.tscn | 53 +++++++++++++++++++ components/Scenes/UI.tscn | 8 ++- scripts/Contents/Panels/Starter.gd | 16 ++++++ scripts/Statemachine/EntityBase.gd | 7 +-- scripts/Statemachine/UIState.gd | 1 + scripts/Tools/GameRule.gd | 2 +- scripts/Tools/WorldManager.gd | 3 +- 7 files changed, 83 insertions(+), 7 deletions(-) create mode 100644 components/Scenes/FullscreenPanels/Starter.tscn create mode 100644 scripts/Contents/Panels/Starter.gd diff --git a/components/Scenes/FullscreenPanels/Starter.tscn b/components/Scenes/FullscreenPanels/Starter.tscn new file mode 100644 index 0000000..2876039 --- /dev/null +++ b/components/Scenes/FullscreenPanels/Starter.tscn @@ -0,0 +1,53 @@ +[gd_scene load_steps=4 format=3 uid="uid://c0r1i5tdbwljj"] + +[ext_resource type="PackedScene" uid="uid://d3qojeqa3difn" path="res://components/Abstracts/FullscreenPanelBase.tscn" id="1_o0yse"] +[ext_resource type="Script" path="res://scripts/Contents/Panels/Starter.gd" id="2_ic0aq"] + +[sub_resource type="LabelSettings" id="LabelSettings_ch0dv"] +font_size = 45 +outline_size = 2 + +[node name="Starter" instance=ExtResource("1_o0yse")] +offset_top = 0.0 +offset_bottom = 0.0 +script = ExtResource("2_ic0aq") + +[node name="wrapper" parent="content" index="1"] +theme_override_constants/separation = 30 + +[node name="title" type="Label" parent="content/wrapper" index="0"] +layout_mode = 2 +size_flags_horizontal = 4 +text = "公鸡大战狗熊" +label_settings = SubResource("LabelSettings_ch0dv") + +[node name="starter" type="VBoxContainer" parent="content/wrapper" index="1"] +layout_mode = 2 +theme_override_constants/separation = 10 + +[node name="diffs" type="HBoxContainer" parent="content/wrapper/starter" index="0"] +layout_mode = 2 +alignment = 1 + +[node name="tip" type="Label" parent="content/wrapper/starter/diffs" index="0"] +layout_mode = 2 +text = "选择难度:" + +[node name="diffEdit" type="HSlider" parent="content/wrapper/starter/diffs" index="1"] +unique_name_in_owner = true +custom_minimum_size = Vector2(100, 0) +layout_mode = 2 +size_flags_vertical = 4 +max_value = 10.0 +value = 1.0 + +[node name="levelShow" type="Label" parent="content/wrapper/starter/diffs" index="2"] +unique_name_in_owner = true +layout_mode = 2 +text = "1/10" + +[node name="startBtn" type="Button" parent="content/wrapper/starter" index="1"] +unique_name_in_owner = true +layout_mode = 2 +size_flags_horizontal = 4 +text = "开始" diff --git a/components/Scenes/UI.tscn b/components/Scenes/UI.tscn index 481dc63..7b303dd 100644 --- a/components/Scenes/UI.tscn +++ b/components/Scenes/UI.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=24 format=3 uid="uid://dfwg750a47ggx"] +[gd_scene load_steps=25 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"] @@ -13,6 +13,7 @@ [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"] [ext_resource type="PackedScene" uid="uid://w2o3klbsssq3" path="res://components/Scenes/FullscreenPanels/Thanks.tscn" id="14_gp8lx"] +[ext_resource type="PackedScene" uid="uid://c0r1i5tdbwljj" path="res://components/Scenes/FullscreenPanels/Starter.tscn" id="14_pjwgj"] [sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_12otr"] @@ -310,3 +311,8 @@ offset_bottom = 0.0 [node name="Thanks" parent="root/panels" instance=ExtResource("14_gp8lx")] visible = false layout_mode = 1 + +[node name="Starter" parent="root/panels" instance=ExtResource("14_pjwgj")] +visible = false +z_index = 2 +layout_mode = 1 diff --git a/scripts/Contents/Panels/Starter.gd b/scripts/Contents/Panels/Starter.gd new file mode 100644 index 0000000..b377f1f --- /dev/null +++ b/scripts/Contents/Panels/Starter.gd @@ -0,0 +1,16 @@ +@tool +extends FullscreenPanelBase + +@onready var diffEdit: HSlider = $"%diffEdit" +@onready var startBtn: Button = $"%startBtn" +@onready var levelShow: Label = $"%levelShow" + +func _ready(): + startBtn.pressed.connect( + func(): + Wave.next() + UIState.closeCurrentPanel() + ) +func _physics_process(_delta): + levelShow.text = "%s/10" % diffEdit.value + GameRule.difficulty = diffEdit.value diff --git a/scripts/Statemachine/EntityBase.gd b/scripts/Statemachine/EntityBase.gd index 7237a00..707999f 100644 --- a/scripts/Statemachine/EntityBase.gd +++ b/scripts/Statemachine/EntityBase.gd @@ -255,7 +255,7 @@ func tryDie(by: BulletBase): var item = drops[drop] var count = ceil(randf_range(dropCounts[drop].x, dropCounts[drop].y)) for i in range(count): - ItemDropped.generate(item, randi_range(0, int(sqrt(count))), position + MathTool.randv2_range(GameRule.itemDroppedSpawnOffset)) + ItemDropped.generate(item, randi_range(1, int(sqrt(count) + GameRule.difficulty)), position + MathTool.randv2_range(GameRule.itemDroppedSpawnOffset)) if MathTool.rate( GameRule.appleDropRate + by.launcher.fields.get(FieldStore.Entity.DROP_APPLE_RATE) + @@ -268,10 +268,11 @@ func tryDie(by: BulletBase): fields[FieldStore.Entity.MAX_HEALTH] * randf_range(1 - GameRule.beachballOffset, 1 + GameRule.beachballOffset), position + MathTool.randv2_range(GameRule.itemDroppedSpawnOffset) ) + if isPlayer(): + if UIState.player == self: + UIState.setPanel("GameOver", [displayName, by.launcher.displayName]) EffectController.create(preload("res://components/Effects/DeadBlood.tscn"), texture.global_position).shot() await die() - if isPlayer() and UIState.player == self: - UIState.setPanel("GameOver", [displayName, by.launcher.displayName]) func tryHeal(count: float): if inventory[ItemStore.ItemType.APPLE] > 0 and health < fields.get(FieldStore.Entity.MAX_HEALTH): inventory[ItemStore.ItemType.APPLE] -= 1 diff --git a/scripts/Statemachine/UIState.gd b/scripts/Statemachine/UIState.gd index c84ebac..bfe4647 100644 --- a/scripts/Statemachine/UIState.gd +++ b/scripts/Statemachine/UIState.gd @@ -19,6 +19,7 @@ func _ready(): energyPercent = $"%percent" itemCollect = $"%itemCollect" skillIconContainer = $"%skillContainer" + setPanel("Starter") func _process(_delta): bossbar.visible = !!bossbar.entity func _physics_process(_delta): diff --git a/scripts/Tools/GameRule.gd b/scripts/Tools/GameRule.gd index 88c4450..117cb05 100644 --- a/scripts/Tools/GameRule.gd +++ b/scripts/Tools/GameRule.gd @@ -1,7 +1,7 @@ class_name GameRule static var deadReasons: Array = JsonTool.parseJson("res://resources/constants/deadReasons.json") -static var difficulty: float = 1 # 难度倍数,可以写小数 +static var difficulty: float = 10 # 难度倍数,可以写小数 static var allowFriendlyFire: bool = false # 是否允许友军伤害 static var bulletSpeedMultiplier: float = 1 # 子弹速度倍率 static var damageOffset: float = MathTool.percent(20) # 伤害随机浮动比例 diff --git a/scripts/Tools/WorldManager.gd b/scripts/Tools/WorldManager.gd index 96485ef..30d0526 100644 --- a/scripts/Tools/WorldManager.gd +++ b/scripts/Tools/WorldManager.gd @@ -8,10 +8,9 @@ static var runningTime: int = 0 func _ready(): tree = get_tree() rootNode = self - print(GameRule.deadReasons) func _physics_process(delta): runningTime += delta * 1000 - if EntityBase.mobCount() == 0: + if EntityBase.mobCount() == 0 and runningTime > 3000: UIState.setPanel("MakeFeed") static func getTime():