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

refactor(追踪系统): 统一使用getTrackingAnchor方法获取追踪目标位置

修改多个子弹脚本和EntityBase,使用统一的getTrackingAnchor方法获取追踪目标位置
在BulletBase中增加目标有效性检查
调整Wave配置和Rooster武器顺序
This commit is contained in:
2025-09-06 14:11:14 +08:00
parent 95db9deb3c
commit 936b2ba200
7 changed files with 24 additions and 20 deletions
+1 -1
View File
@@ -9,4 +9,4 @@ func ai():
canDamageSelf = !(timeLived() >= traceTime)
PresetAIs.forward(self, rotation)
if timeLived() < traceTime:
PresetAIs.trace(self, launcher.currentFocusedBoss.position, 0.05)
PresetAIs.trace(self, launcher.currentFocusedBoss.getTrackingAnchor(), 0.05)
+1 -1
View File
@@ -11,7 +11,7 @@ func ai():
speed *= 1.05
speed = clamp(speed, 0, 20)
if is_instance_valid(tracer) and timeLived() < maxTraceTime:
PresetAIs.trace(self, tracer.position, clamp(speed / 50 * tracePower, 0, 1))
PresetAIs.trace(self, tracer.getTrackingAnchor(), clamp(speed / 50 * tracePower, 0, 1))
PresetAIs.forward(self, rotation)
func destroy(_b):
EffectController.create(preload("res://components/Effects/LGBTBoom.tscn"), position).shot()
+1 -1
View File
@@ -15,4 +15,4 @@ func ai():
else:
forwarded = true
if is_instance_valid(tracer):
rotation = position.angle_to_point(tracer.position)
rotation = position.angle_to_point(tracer.getTrackingAnchor())
+3 -3
View File
@@ -11,9 +11,9 @@ var per: int = 0
static var current: int = 0
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, 6),
# create(preload("res://components/Characters/Chick.tscn"), 1, 1, true, 0, INF, 1),
# 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, 6),
create(preload("res://components/Characters/Chick.tscn"), 1, 1, true, 0, INF, 1),
]
static func create(
+12 -10
View File
@@ -59,15 +59,16 @@ func _physics_process(_delta: float) -> void:
if destroying: return
if is_instance_valid(launcher) and (launcher.isPlayer() or is_instance_valid(launcher.currentFocusedBoss)):
launcher.position -= Vector2.from_angle(rotation) * recoil
PresetAIs.trace(
self,
EntityTool.findClosetEntity(position, get_tree(),
!launcher.isPlayer(),
launcher.isPlayer(),
[launcher]
).position,
launcher.fields.get(FieldStore.Entity.BULLET_TRACE) / 10
)
var targetEntity = EntityTool.findClosetEntity(position, get_tree(),
!launcher.isPlayer(),
launcher.isPlayer(),
[launcher] )
if is_instance_valid(targetEntity):
PresetAIs.trace(
self,
targetEntity.getTrackingAnchor(),
launcher.fields.get(FieldStore.Entity.BULLET_TRACE) / 10
)
ai()
else:
tryDestroy()
@@ -113,7 +114,8 @@ func tryRefract():
var value = launcher.fields.get(FieldStore.Entity.BULLET_REFRACTION)
var entity = EntityTool.findClosetEntity(position, get_tree(), !launcher.isPlayer(), launcher.isPlayer())
for i in range(MathTool.shrimpRate(value)):
refract(entity, i, value, value - floor(value))
if is_instance_valid(entity):
refract(entity, i, value, value - floor(value))
# 抽象方法
func ai():
+3
View File
@@ -277,6 +277,9 @@ func playSound(type: String):
await cloned.finished
cloned.queue_free()
func getTrackingAnchor() -> Vector2:
return hurtbox.global_position
# 关于分组
func isPlayer():
return is_in_group("players")