1
1
mirror of https://github.com/Rundll86/Dog-Lynx-And-HCN.git synced 2026-05-28 06:51:54 +08:00

refactor(Statemachine): 重构实体状态栏和Boss栏逻辑

将EntityStateBar的_ready逻辑移到EntityBase中统一管理
修改BossBar的更新逻辑从_physics_process改为_process
调整Wave配置中Boss的出现波次从8改为1
This commit is contained in:
2025-08-28 07:28:11 +08:00
parent 8e4b560e82
commit ef03aa2922
4 changed files with 19 additions and 12 deletions
+1 -1
View File
@@ -13,7 +13,7 @@ static var countBoost: float = 0.1 # 每波增加的敌人数量百分比,指
static var data: Array[Wave] = [
# entity, minCount, maxCount, isBoss, from, to, per
create(preload("res://components/Characters/Hen.tscn"), 1, 5, false, 0, INF, 1),
create(preload("res://components/Characters/Chick.tscn"), 0, 0, true, 8, INF, 4)
create(preload("res://components/Characters/Chick.tscn"), 0, 0, true, 1, INF, 4)
]
static func create(
+3 -1
View File
@@ -4,7 +4,9 @@ class_name BossBar
@onready var nameLabel: Label = $"%name"
@onready var valueLabel: Label = $"%value"
func _physics_process(_delta):
func _ready():
if is_instance_valid(entity):
nameLabel.text = entity.displayName
func _process(_delta):
if is_instance_valid(entity):
valueLabel.text = "%.2f" % (entity.health / entity.fields[FieldStore.Entity.MAX_HEALTH] * 100)
+15 -2
View File
@@ -51,10 +51,10 @@ var inventoryMax = {
@onready var animatree: AnimationTree = $"%animatree"
@onready var texture: AnimatedSprite2D = $"%texture"
@onready var hurtbox: Area2D = $"%hurtbox"
@onready var statebar: EntityStateBar = $"%statebar"
@onready var sounds: Node2D = $"%sounds"
@onready var hurtAnimator: AnimationPlayer = $"%hurtAnimator"
@onready var damageAnchor: Node2D = $"%damageAnchor"
var statebar: EntityStateBar
var health: float = 0
@export var energy: float = 0
@@ -65,8 +65,13 @@ var lastAttack: int = 0
var currentFocusedBoss: EntityBase = null
func _ready():
var selfStatebar: EntityStateBar = $"%statebar"
if isBoss:
selfStatebar.hide()
else:
statebar = selfStatebar
statebar.entity = self
health = fields.get(FieldStore.Entity.MAX_HEALTH)
statebar.visible = !isBoss
if isPlayer():
UIState.player = self
hurtbox.body_entered.connect(
@@ -88,6 +93,14 @@ func _ready():
)
else:
currentFocusedBoss = get_tree().get_nodes_in_group("players")[0]
healthChanged.connect(
func(newHealth):
if is_instance_valid(statebar) or UIState.bossbar.entity == self:
if isBoss:
statebar = UIState.bossbar
statebar.healthBar.maxValue = fields.get(FieldStore.Entity.MAX_HEALTH)
statebar.healthBar.setCurrent(newHealth)
)
healthChanged.emit(health)
energyChanged.emit(energy)
func _process(_delta):
-8
View File
@@ -4,11 +4,3 @@ class_name EntityStateBar
@export var entity: EntityBase
@onready var healthBar: ColorBar = $"%health"
func _ready():
if is_instance_valid(entity):
entity.healthChanged.connect(
func(health) -> void:
healthBar.maxValue = entity.fields.get(FieldStore.Entity.MAX_HEALTH)
healthBar.setCurrent(health)
)