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:
@@ -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(
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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):
|
||||
|
||||
@@ -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)
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user