From c16a1ee73ce326c7ee140107da83dff3745fa8b5 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, 5 Sep 2025 22:29:40 +0800 Subject: [PATCH] =?UTF-8?q?refactor(Statemachine):=20=E5=BC=95=E5=85=A5Coo?= =?UTF-8?q?ldownTimer=E7=B1=BB=E9=87=8D=E6=9E=84=E6=94=BB=E5=87=BB?= =?UTF-8?q?=E5=86=B7=E5=8D=B4=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 将攻击冷却逻辑从EntityBase中提取到独立的CooldownTimer类 简化EntityBase代码并提高可维护性 --- scripts/Statemachine/CooldownTimer.gd | 12 ++++++++++++ scripts/Statemachine/EntityBase.gd | 15 ++++++--------- 2 files changed, 18 insertions(+), 9 deletions(-) create mode 100644 scripts/Statemachine/CooldownTimer.gd diff --git a/scripts/Statemachine/CooldownTimer.gd b/scripts/Statemachine/CooldownTimer.gd new file mode 100644 index 0000000..a5d4835 --- /dev/null +++ b/scripts/Statemachine/CooldownTimer.gd @@ -0,0 +1,12 @@ +class_name CooldownTimer + +var cooldown: float = 100 +var lastStart: int = 0 + +func isCooldowned(): + return WorldManager.getTime() - lastStart >= cooldown +func startCooldown(): + var state = isCooldowned() + if state: + lastStart = WorldManager.getTime() + return state diff --git a/scripts/Statemachine/EntityBase.gd b/scripts/Statemachine/EntityBase.gd index 60d3cb6..6ecab32 100644 --- a/scripts/Statemachine/EntityBase.gd +++ b/scripts/Statemachine/EntityBase.gd @@ -64,6 +64,7 @@ var inventoryMax = { @export var dropCounts: Array[Vector2] = [] @export var appleCount: Vector2i = Vector2(0, 2) # 死亡后掉落的苹果数量 @export var level: int = 1 +@export var weapons: Array[Weapon] = [] @onready var animatree: AnimationTree = $"%animatree" @onready var texture: AnimatedSprite2D = $"%texture" @@ -80,9 +81,9 @@ var sprinting: bool = false var trailing: bool = false var lastDirection: int = 1 -var lastAttack: int = 0 var currentFocusedBoss: EntityBase = null var charginup: bool = false +var cooldownTimer = CooldownTimer.new() func _ready(): register() @@ -188,15 +189,11 @@ func useEnergy(value: float): energy -= value energyChanged.emit(energy) return state -func isCooldowned(type: int): - return WorldManager.getTime() - lastAttack >= attackCooldownMap.get(type, defaultCooldownUnit) / fields.get(FieldStore.Entity.ATTACK_SPEED) -func startCooldown(type: int): - var state = isCooldowned(type) - if state: - lastAttack = WorldManager.getTime() - return state func tryAttack(type: int, needChargeUp: bool = false): - var state = startCooldown(type) + var state + if !isPlayer(): + cooldownTimer.cooldown = attackCooldownMap.get(type, defaultCooldownUnit) + state = cooldownTimer.startCooldown() if state: if needChargeUp: charginup = true