From c5d21b68bac793e5864d98be8a32ec9751c7e131 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: Sat, 13 Sep 2025 19:55:21 +0800 Subject: [PATCH] =?UTF-8?q?refactor(Statemachine):=20=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E5=86=B7=E5=8D=B4=E8=AE=A1=E6=97=B6=E5=99=A8=E5=8F=8A=E6=94=BB?= =?UTF-8?q?=E5=87=BB=E5=86=B7=E5=8D=B4=E7=AE=A1=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 重构CooldownTimer类,添加初始化方法支持自定义冷却时间 将EntityBase中的单一冷却计时器改为基于攻击类型的映射管理 简化Wave类中的预设波次数据结构,移除未使用的测试波次 --- scripts/Contents/Wave.gd | 25 +++++++++++-------------- scripts/Statemachine/CooldownTimer.gd | 3 +++ scripts/Statemachine/EntityBase.gd | 8 +++++++- 3 files changed, 21 insertions(+), 15 deletions(-) diff --git a/scripts/Contents/Wave.gd b/scripts/Contents/Wave.gd index 22e4b56..97ac842 100644 --- a/scripts/Contents/Wave.gd +++ b/scripts/Contents/Wave.gd @@ -9,20 +9,17 @@ var to: float = 0 var per: int = 0 static var current: int = 0 -# entity, minCount, maxCount, isBoss, from, to, per -static var presetWaves = { - "normal": [ - create(preload("res://components/Characters/Hen.tscn"), 1, 5, false, 0, INF, 1), - create(preload("res://components/Characters/Chick.tscn"), 0, 0, true, 9, INF, 15), - create(preload("res://components/Characters/Bear.tscn"), 0, 0, true, 19, INF, 10), - ], - "testBoss": [ - create(preload("res://components/Characters/Chick.tscn"), 1, 1, true, 0, INF, 1), - create(preload("res://components/Characters/Bear.tscn"), 1, 1, true, 0, INF, 1), - create(preload("res://components/Characters/KukeMC.tscn"), 1, 1, true, 0, INF, 1), - ] -} -static var data = presetWaves["normal"] +static var WAVE_NORMAL = [ + Wave.create(preload("res://components/Characters/Hen.tscn"), 1, 5, false, 0, INF, 1), + Wave.create(preload("res://components/Characters/Chick.tscn"), 0, 0, true, 9, INF, 15), + Wave.create(preload("res://components/Characters/Bear.tscn"), 0, 0, true, 19, INF, 10), +] +static var WAVE_TESTBOSS = [ + # Wave.create(preload("res://components/Characters/Chick.tscn"), 1, 1, true, 0, INF, 1), + Wave.create(preload("res://components/Characters/Bear.tscn"), 1, 1, true, 0, INF, 1), + # Wave.create(preload("res://components/Characters/KukeMC.tscn"), 1, 1, true, 0, INF, 1), +] +static var data = WAVE_TESTBOSS static func create( entity_: PackedScene, diff --git a/scripts/Statemachine/CooldownTimer.gd b/scripts/Statemachine/CooldownTimer.gd index 8138e4d..332bd09 100644 --- a/scripts/Statemachine/CooldownTimer.gd +++ b/scripts/Statemachine/CooldownTimer.gd @@ -3,6 +3,9 @@ class_name CooldownTimer var cooldown: float = 100 var lastStart: int = 0 +func _init(cd: float = 100): + cooldown = cd + func isCooldowned(): return timeSinceLastStart() >= cooldown func start(): diff --git a/scripts/Statemachine/EntityBase.gd b/scripts/Statemachine/EntityBase.gd index 707999f..2964cfa 100644 --- a/scripts/Statemachine/EntityBase.gd +++ b/scripts/Statemachine/EntityBase.gd @@ -48,6 +48,9 @@ var fields = { var attackCooldownMap = { 0: 100 } +var attackCooldowner = { + 0: CooldownTimer.new() +} var inventory = { ItemStore.ItemType.BASEBALL: 500, ItemStore.ItemType.BASKETBALL: 500, @@ -88,7 +91,6 @@ var trailing: bool = false var lastDirection: int = 1 var currentFocusedBoss: EntityBase = null var charginup: bool = false -var cooldownTimer = CooldownTimer.new() var weapons: Array[Weapon] = [] func _ready(): @@ -228,6 +230,10 @@ func tryAttack(type: int, needChargeUp: bool = false): if isPlayer(): state = true else: + var cooldownTimer: CooldownTimer + if !attackCooldowner.has(type): + attackCooldowner[type] = CooldownTimer.new() + cooldownTimer = attackCooldowner[type] cooldownTimer.cooldown = attackCooldownMap.get(type, defaultCooldownUnit) state = cooldownTimer.start() if state: