From 06c2637ebbce639e155924d7fd2542052b4bf157 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: Sun, 25 Jan 2026 21:40:26 +0800 Subject: [PATCH] =?UTF-8?q?feat(UI):=20=E4=B8=BA=E6=8F=90=E7=A4=BA?= =?UTF-8?q?=E6=A1=86=E6=B7=BB=E5=8A=A0=E7=B1=BB=E5=9E=8B=E6=94=AF=E6=8C=81?= =?UTF-8?q?=E5=B9=B6=E6=94=B9=E8=BF=9B=E6=A0=B7=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增MessageType枚举定义提示类型(INFO/WARNING/ERROR) - 根据不同类型显示不同颜色样式 - 修改所有调用showTip的地方使用新的类型参数 - 移除自动销毁时间参数,统一使用固定显示时长 --- components/UI/TipBox.tscn | 11 ++++++++--- scripts/Contents/Wave.gd | 4 ++-- scripts/Statemachine/EntityBase.gd | 4 ++-- scripts/Statemachine/TipBox.gd | 18 +++++++++++++++++- scripts/Statemachine/UIState.gd | 11 ++++------- 5 files changed, 33 insertions(+), 15 deletions(-) diff --git a/components/UI/TipBox.tscn b/components/UI/TipBox.tscn index 542cc0e..05036b2 100644 --- a/components/UI/TipBox.tscn +++ b/components/UI/TipBox.tscn @@ -3,12 +3,12 @@ [ext_resource type="Script" uid="uid://c1gqcwr6say6f" path="res://scripts/Statemachine/TipBox.gd" id="1_7vuk3"] [ext_resource type="Theme" uid="uid://bje5cd08dyok7" path="res://themes/bigTextAndBold.tres" id="2_5pngc"] -[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_nooq4"] +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_5pngc"] content_margin_left = 10.0 content_margin_top = 5.0 content_margin_right = 10.0 content_margin_bottom = 5.0 -bg_color = Color(1, 0, 0, 1) +bg_color = Color(0, 0, 1, 1) corner_radius_top_right = 100 corner_radius_bottom_right = 100 @@ -104,8 +104,13 @@ _data = { [node name="TipBox" type="PanelContainer"] offset_right = 79.0 offset_bottom = 34.0 -theme_override_styles/panel = SubResource("StyleBoxFlat_nooq4") +theme_override_styles/panel = SubResource("StyleBoxFlat_5pngc") script = ExtResource("1_7vuk3") +colorMap = { +0: Color(0, 0.5265789, 1, 1), +1: Color(1, 0.48120707, 0, 1), +2: Color(1, 0, 0, 1) +} [node name="label" type="RichTextLabel" parent="."] unique_name_in_owner = true diff --git a/scripts/Contents/Wave.gd b/scripts/Contents/Wave.gd index a9b0ef0..8e4a8ac 100644 --- a/scripts/Contents/Wave.gd +++ b/scripts/Contents/Wave.gd @@ -109,7 +109,7 @@ static func next(waves: Array): wave = instance_from_id(wave.get_instance_id()) EntityBase.generate(ComponentManager.getCharacter(wave.entity), wave.entityPosition, true, wave.isBoss) current += 1 - UIState.showTip("第%d波开始!" % current, 500) + UIState.showTip("第%d波开始!" % current, TipBox.MessageType.INFO) showNextBossReminder() static func showNextBossReminder(): var nextBossInfo = getNextBossInfo() @@ -117,7 +117,7 @@ static func showNextBossReminder(): var bossName = nextBossInfo[0] var wavesLeft = nextBossInfo[1] if wavesLeft > 0: - UIState.showTip("Boss [b]%s[/b] 将在[b]%d[/b]波后到来!" % [bossName, wavesLeft], 500) + UIState.showTip("Boss [b]%s[/b] 将在[b]%d[/b]波后到来!" % [bossName, wavesLeft], TipBox.MessageType.WARNING) static func startWith(wave: int): return wave - 1 diff --git a/scripts/Statemachine/EntityBase.gd b/scripts/Statemachine/EntityBase.gd index 5d60e19..76e7b22 100644 --- a/scripts/Statemachine/EntityBase.gd +++ b/scripts/Statemachine/EntityBase.gd @@ -369,9 +369,9 @@ func tryDie(by: BulletBase = null): await die() died.emit() if isBoss: - UIState.showTip("[b]%s[/b] 已被打败!" % displayName, 500) + UIState.showTip("[b]%s[/b] 已被打败!" % displayName, TipBox.MessageType.INFO) elif isPlayer(): - UIState.showTip("[b]%s[/b] 似了😭。" % displayName, 500) + UIState.showTip("[b]%s[/b] 似了😭。" % displayName, TipBox.MessageType.ERROR) queue_free() func tryHeal(count: float): playSound("heal") diff --git a/scripts/Statemachine/TipBox.gd b/scripts/Statemachine/TipBox.gd index 11f943d..e5a2ef7 100644 --- a/scripts/Statemachine/TipBox.gd +++ b/scripts/Statemachine/TipBox.gd @@ -2,7 +2,19 @@ extends PanelContainer class_name TipBox +enum MessageType { + INFO, + WARNING, + ERROR, +} + @export var text: String = "nothing" +@export var messageType: MessageType = MessageType.INFO +@export var colorMap = { + MessageType.INFO: Color.BLUE, + MessageType.WARNING: Color.ORANGE, + MessageType.ERROR: Color.RED, +} @onready var label: RichTextLabel = $%label @onready var animator: AnimationPlayer = $%animator @@ -10,6 +22,9 @@ class_name TipBox func _ready(): label.text = text animator.play("show") + var styleBox = get_theme_stylebox("panel").duplicate() as StyleBoxFlat + styleBox.bg_color = colorMap[messageType] + add_theme_stylebox_override("panel", styleBox) func _process(_delta): label.text = text @@ -18,7 +33,8 @@ func destroy(): await animator.animation_finished queue_free() -static func create(applyText: String) -> TipBox: +static func create(applyText: String, applyMessageType: MessageType = MessageType.INFO) -> TipBox: var box = ComponentManager.getUIComponent("TipBox").instantiate() box.text = applyText + box.messageType = applyMessageType return box diff --git a/scripts/Statemachine/UIState.gd b/scripts/Statemachine/UIState.gd index 7dcaf16..b721b87 100644 --- a/scripts/Statemachine/UIState.gd +++ b/scripts/Statemachine/UIState.gd @@ -74,11 +74,8 @@ static func setPanel(targetName: String = "", args: Array = []): panel.hidePanel() static func closeCurrentPanel(): setPanel() -static func showTip(text: String, destroyAfter: float = -1): - var box = TipBox.create(text) +static func showTip(text: String, messageType: TipBox.MessageType = TipBox.MessageType.INFO): + var box = TipBox.create(text, messageType) tips.add_child(box) - if destroyAfter > 0: - await TickTool.millseconds(destroyAfter * len(text)) - box.destroy() - else: - return box + await TickTool.millseconds(500 * len(text)) + box.destroy()