1
1
mirror of https://github.com/Rundll86/Dog-Lynx-And-HCN.git synced 2026-07-02 16:22:14 +08:00

refactor(Statemachine): 优化冷却计时器及攻击冷却管理

重构CooldownTimer类,添加初始化方法支持自定义冷却时间
将EntityBase中的单一冷却计时器改为基于攻击类型的映射管理
简化Wave类中的预设波次数据结构,移除未使用的测试波次
This commit is contained in:
2025-09-13 19:55:21 +08:00
parent 3171c39915
commit c5d21b68ba
3 changed files with 21 additions and 15 deletions
+11 -14
View File
@@ -9,20 +9,17 @@ var to: float = 0
var per: int = 0 var per: int = 0
static var current: int = 0 static var current: int = 0
# entity, minCount, maxCount, isBoss, from, to, per static var WAVE_NORMAL = [
static var presetWaves = { Wave.create(preload("res://components/Characters/Hen.tscn"), 1, 5, false, 0, INF, 1),
"normal": [ Wave.create(preload("res://components/Characters/Chick.tscn"), 0, 0, true, 9, INF, 15),
create(preload("res://components/Characters/Hen.tscn"), 1, 5, false, 0, INF, 1), Wave.create(preload("res://components/Characters/Bear.tscn"), 0, 0, true, 19, INF, 10),
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), static var WAVE_TESTBOSS = [
], # Wave.create(preload("res://components/Characters/Chick.tscn"), 1, 1, true, 0, INF, 1),
"testBoss": [ Wave.create(preload("res://components/Characters/Bear.tscn"), 1, 1, true, 0, INF, 1),
create(preload("res://components/Characters/Chick.tscn"), 1, 1, true, 0, INF, 1), # Wave.create(preload("res://components/Characters/KukeMC.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 = WAVE_TESTBOSS
]
}
static var data = presetWaves["normal"]
static func create( static func create(
entity_: PackedScene, entity_: PackedScene,
+3
View File
@@ -3,6 +3,9 @@ class_name CooldownTimer
var cooldown: float = 100 var cooldown: float = 100
var lastStart: int = 0 var lastStart: int = 0
func _init(cd: float = 100):
cooldown = cd
func isCooldowned(): func isCooldowned():
return timeSinceLastStart() >= cooldown return timeSinceLastStart() >= cooldown
func start(): func start():
+7 -1
View File
@@ -48,6 +48,9 @@ var fields = {
var attackCooldownMap = { var attackCooldownMap = {
0: 100 0: 100
} }
var attackCooldowner = {
0: CooldownTimer.new()
}
var inventory = { var inventory = {
ItemStore.ItemType.BASEBALL: 500, ItemStore.ItemType.BASEBALL: 500,
ItemStore.ItemType.BASKETBALL: 500, ItemStore.ItemType.BASKETBALL: 500,
@@ -88,7 +91,6 @@ var trailing: bool = false
var lastDirection: int = 1 var lastDirection: int = 1
var currentFocusedBoss: EntityBase = null var currentFocusedBoss: EntityBase = null
var charginup: bool = false var charginup: bool = false
var cooldownTimer = CooldownTimer.new()
var weapons: Array[Weapon] = [] var weapons: Array[Weapon] = []
func _ready(): func _ready():
@@ -228,6 +230,10 @@ func tryAttack(type: int, needChargeUp: bool = false):
if isPlayer(): if isPlayer():
state = true state = true
else: else:
var cooldownTimer: CooldownTimer
if !attackCooldowner.has(type):
attackCooldowner[type] = CooldownTimer.new()
cooldownTimer = attackCooldowner[type]
cooldownTimer.cooldown = attackCooldownMap.get(type, defaultCooldownUnit) cooldownTimer.cooldown = attackCooldownMap.get(type, defaultCooldownUnit)
state = cooldownTimer.start() state = cooldownTimer.start()
if state: if state: