From 49172a00881ad2af50542c707e65df6f327f19a3 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, 7 Sep 2025 14:23:58 +0800 Subject: [PATCH] =?UTF-8?q?feat(=E4=BC=A4=E5=AE=B3=E7=B3=BB=E7=BB=9F):=20?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=AE=8C=E7=BE=8E=E9=97=AA=E9=81=BF=E6=9C=BA?= =?UTF-8?q?=E5=88=B6=E5=92=8C=E5=AF=B9=E5=BA=94=E6=98=BE=E7=A4=BA=E6=95=88?= =?UTF-8?q?=E6=9E=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增完美闪避判定逻辑,当移动速度达到阈值时触发 - 添加黄色字体颜色用于显示完美闪避文本 - 完美闪避时获得双倍能量奖励并显示"PERFECT MISS" - 普通闪避仍显示"MISS"并给予基础能量奖励 --- scripts/Statemachine/DamageLabel.gd | 9 +++++++-- scripts/Statemachine/EntityBase.gd | 10 ++++++++-- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/scripts/Statemachine/DamageLabel.gd b/scripts/Statemachine/DamageLabel.gd index 4a82244..f64d177 100644 --- a/scripts/Statemachine/DamageLabel.gd +++ b/scripts/Statemachine/DamageLabel.gd @@ -6,6 +6,7 @@ class_name DamageLabel @export var color1: Color = Color(1, 0, 0, 1) @export var color2: Color = Color(0, 1, 0, 1) @export var color3: Color = Color(0.5, 0.5, 0.5, 1) +@export var color4: Color = Color.YELLOW @onready var label: Label = $"%label" @onready var animator: AnimationPlayer = $"%animator" @@ -21,8 +22,12 @@ func _ready(): label.label_settings.font_color = color2 label.text = "+%s%s" % [damageValue, "!!!" if crit else ""] else: - label.label_settings.font_color = color3 - label.text = "MISS" + if crit: + label.label_settings.font_color = color4 + label.text = "PERFECT MISS" + else: + label.label_settings.font_color = color3 + label.text = "MISS" animator.play("show") await animator.animation_finished queue_free() diff --git a/scripts/Statemachine/EntityBase.gd b/scripts/Statemachine/EntityBase.gd index 592af55..2f0af26 100644 --- a/scripts/Statemachine/EntityBase.gd +++ b/scripts/Statemachine/EntityBase.gd @@ -173,9 +173,15 @@ func takeDamage(bullet: BulletBase, crit: bool): hurtAnimator.play("hurt") var baseDamage: float = bullet.damage * bullet.launcher.fields.get(FieldStore.Entity.DAMAGE_MULTIPILER) * randf_range(1 - GameRule.damageOffset, 1 + GameRule.damageOffset) var damage = baseDamage + baseDamage * int(crit) * fields.get(FieldStore.Entity.CRIT_DAMAGE) + var perfectMiss = false if sprinting: playSound("miss") - storeEnergy(damage * 0.35) + if velocity.length() > (displace(velocity, true) * sprintMultiplier * 0.9).length(): + perfectMiss = true + if perfectMiss: + storeEnergy(damage * 2) + else: + storeEnergy(damage * 0.35) damage = 0 else: playSound("hurt") @@ -184,7 +190,7 @@ func takeDamage(bullet: BulletBase, crit: bool): hit.emit(damage, bullet, crit) healthChanged.emit(health) health -= damage - DamageLabel.create(damage, crit, damageAnchor.global_position + MathTool.randv2_range(GameRule.damageLabelSpawnOffset)) + DamageLabel.create(damage, crit || perfectMiss, damageAnchor.global_position + MathTool.randv2_range(GameRule.damageLabelSpawnOffset)) if isBoss and bullet.launcher.isPlayer(): bullet.launcher.setBoss(self) if health <= 0: