1
1
mirror of https://github.com/Rundll86/Dog-Lynx-And-HCN.git synced 2026-06-11 06:07:12 +08:00

feat(子弹系统): 完善乾坤剑和格挡子弹的逻辑

添加乾坤剑的追踪和攻击逻辑,包括命中目标后的效果
调整格挡子弹的伤害值和生成气的逻辑
优化子弹动画和碰撞箱设置
为乾坤剑添加基础伤害和穿透属性
This commit is contained in:
2026-03-19 22:58:50 +08:00
parent cc4b91797d
commit 97ac580347
6 changed files with 82 additions and 62 deletions
+7 -5
View File
@@ -3,17 +3,19 @@ class_name ParrierBullet
@export var parryRate: float = 1
func hitBullet(bullet: BulletBase):
if BulletTool.canDamage(bullet, launcher):
func hitBullet(bullet: BulletBase): # 当前子弹与其他子弹相撞
if BulletTool.canDamage(bullet, launcher): # 其他子弹可以使当前子弹的发射者受伤吗?
if MathTool.rate(parryRate):
var eff = EffectController.create(ComponentManager.getEffect("Parry"), position + (bullet.position - position).normalized() * 150)
# 生成格挡特效
var eff = EffectController.create(ComponentManager.getEffect("Parry"), position + (bullet.position - position).normalized() * 150) # 从子弹位置,面向其他子弹的方向前进150
eff.modulate = bullet.modulate.blend(bullet.texture.modulate)
eff.shot()
# 摧毁其他子弹
bullet.tryDestroy()
var cycler = launcher.getOrCreateCycleTimer("parry", 2000, 100)
if len(cycler.bullets) < 5:
if len(cycler.bullets) < 5: # 玩家最多只能拥有5点气
for b in BulletBase.generate(
ComponentManager.getBullet("ParryBall"),
ComponentManager.getBullet("ParryBall"), # 生成气的子弹
launcher,
position,
0
+6 -3
View File
@@ -6,10 +6,13 @@ var cycler: CycleTimer
func spawn():
cycler = launcher.getOrCreateCycleTimer("parry")
cycler.host(self )
launcher.sprintMultiplier += 1
func destroy(_beacuseMap: bool):
launcher.sprintMultiplier -= 1
func ai():
PresetBulletAI.selfRotate(self , 5)
hitbox.disabled = !launcher.sprinting
func succeedToHit(_dmg: float, entity: EntityBase):
hitbox.disabled = !launcher.sprinting # 玩家在冲刺时气的碰撞箱才生效
func succeedToHit(_dmg: float, entity: EntityBase): # 当撞到敌人时
for bullet in BulletBase.generate(
ComponentManager.getBullet("QKSword"),
launcher,
@@ -19,4 +22,4 @@ func succeedToHit(_dmg: float, entity: EntityBase):
if bullet is QKSwordBullet:
bullet.position = entity.texture.global_position + MathTool.sampleInRing(50, 200)
bullet.tracer = entity
bullet.look_at(entity.position)
bullet.look_at(entity.getTrackingAnchor()) # 生成的乾坤剑面向敌人
+14 -3
View File
@@ -2,9 +2,20 @@ extends BulletBase
class_name QKSwordBullet
var tracer: EntityBase
var attackedTracer: bool = false
func ai():
if is_instance_valid(tracer):
look_at(tracer.position)
if is_instance_valid(tracer) && !attackedTracer:
look_at(tracer.getTrackingAnchor())
if timeLived() > 1000:
PresetBulletAI.forward(self , rotation)
PresetBulletAI.forward(self , rotation) # 前进
hitbox.disabled = false
else:
hitbox.disabled = true
func succeedToHit(_dmg: float, entity: EntityBase):
if entity == tracer:
attackedTracer = true # 只需要命中一次目标就不需要继续前进了
EffectController.create(
ComponentManager.getEffect("CatBoom"),
entity.texture.global_position
).shot()