1
1
mirror of https://github.com/Rundll86/Dog-Lynx-And-HCN.git synced 2026-06-11 14:17:13 +08:00

feat(UI): 添加游戏开始界面和难度选择功能

实现游戏开始界面,包含难度选择滑块和开始按钮
修改游戏规则初始难度为10并调整掉落物品数量计算
添加游戏开始条件检查,确保运行时间超过3秒且没有敌人时显示制作饲料界面
This commit is contained in:
2025-09-12 22:08:55 +08:00
parent 90f7f28649
commit 3171c39915
7 changed files with 83 additions and 7 deletions
@@ -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 = "开始"
+7 -1
View File
@@ -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
+16
View File
@@ -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
+4 -3
View File
@@ -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
+1
View File
@@ -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):
+1 -1
View File
@@ -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) # 伤害随机浮动比例
+1 -2
View File
@@ -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():