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

feat(战斗系统): 添加小鸡冲刺攻击技能及相关特效

实现小鸡的冲刺攻击能力,包括:
1. 新增ChickSprint子弹类型及场景
2. 为EntityBase添加拖尾粒子效果
3. 添加攻击蓄力特效和音效
4. 调整小鸡的攻击冷却时间和冲刺倍率
5. 优化TickTool工具类添加until方法
6. 修改世界背景z-index避免遮挡

调整战斗平衡性:
1. 降低默认冲刺倍率
2. 修改测试波次配置
3. 增加新的攻击方式选项
This commit is contained in:
2025-08-29 13:56:31 +08:00
parent 5525bcd7bc
commit 327afcc721
14 changed files with 195 additions and 11 deletions
+14 -4
View File
@@ -55,7 +55,7 @@ var inventoryMax = {
@export var defaultCooldownUnit: float = 100
@export var isBoss: bool = false
@export var displayName: String = "未知实体"
@export var sprintMultiplier: float = 4
@export var sprintMultiplier: float = 3
@export var drops: Array[ItemStore.ItemType] = []
@export var dropCounts: Array[Vector2] = []
@export var appleCount: Vector2i = Vector2(0, 2) # 死亡后掉落的苹果数量
@@ -67,15 +67,18 @@ var inventoryMax = {
@onready var sounds: Node2D = $"%sounds"
@onready var hurtAnimator: AnimationPlayer = $"%hurtAnimator"
@onready var damageAnchor: Node2D = $"%damageAnchor"
@onready var trailParticle: GPUParticles2D = $"%trailParticle"
var statebar: EntityStateBar
var health: float = 0
var energy: float = 0
var sprinting: bool = false
var trailing: bool = false
var lastDirection: int = 1
var lastAttack: int = 0
var currentFocusedBoss: EntityBase = null
var charginup: bool = false
func _ready():
register()
@@ -127,10 +130,11 @@ func _physics_process(_delta: float) -> void:
sprinting = false
else:
velocity = Vector2.ZERO
if isPlayer() or is_instance_valid(currentFocusedBoss):
if (isPlayer() or is_instance_valid(currentFocusedBoss)) and not charginup:
ai()
move_and_slide()
storeEnergy(0.01 * fields.get(FieldStore.Entity.ENERGY_REGENERATION))
trailParticle.emitting = trailing
# 通用方法
func applyLevel():
@@ -187,16 +191,22 @@ func startCooldown(type: int):
if state:
lastAttack = WorldManager.getTime()
return state
func tryAttack(type: int):
func tryAttack(type: int, needChargeUp: bool = false):
var state = startCooldown(type)
if state:
if attack(type):
if needChargeUp:
charginup = true
await EffectController.create(preload("res://components/Effects/AttackStar.tscn"), damageAnchor.global_position).shot()
charginup = false
else:
playSound("attack" + str(type))
attack(type)
return state
func trySprint():
playSound("sprint")
sprint()
sprinting = true
await TickTool.until(func(): return !sprinting)
func tryDie(by: BulletBase):
for drop in range(min(len(drops), len(dropCounts))):
var item = drops[drop]