1
1
mirror of https://github.com/Rundll86/Dog-Lynx-And-HCN.git synced 2026-06-22 19:42:30 +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
+3 -4
View File
@@ -48,12 +48,11 @@ process_mode = 4
[node name="PurpleCrystal" parent="weaponStore" index="0" instance=ExtResource("3_ms5sq")] [node name="PurpleCrystal" parent="weaponStore" index="0" instance=ExtResource("3_ms5sq")]
[node name="LGBT" parent="weaponStore" index="1" instance=ExtResource("4_pb8qn")] [node name="VectorStar" parent="weaponStore" index="1" instance=ExtResource("6_fvy5n")]
[node name="BigLaser" parent="weaponStore" index="2" instance=ExtResource("4_plqwu")] [node name="LGBT" parent="weaponStore" index="2" instance=ExtResource("4_pb8qn")]
[node name="VectorStar" parent="weaponStore" index="3" instance=ExtResource("6_fvy5n")] [node name="BigLaser" parent="weaponStore" index="3" instance=ExtResource("4_plqwu")]
debugRebuild = false
[node name="sprint" parent="sounds" index="0"] [node name="sprint" parent="sounds" index="0"]
stream = ExtResource("4_66s6c") stream = ExtResource("4_66s6c")
+1 -1
View File
@@ -9,4 +9,4 @@ func ai():
canDamageSelf = !(timeLived() >= traceTime) canDamageSelf = !(timeLived() >= traceTime)
PresetAIs.forward(self, rotation) PresetAIs.forward(self, rotation)
if timeLived() < traceTime: 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 *= 1.05
speed = clamp(speed, 0, 20) speed = clamp(speed, 0, 20)
if is_instance_valid(tracer) and timeLived() < maxTraceTime: 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) PresetAIs.forward(self, rotation)
func destroy(_b): func destroy(_b):
EffectController.create(preload("res://components/Effects/LGBTBoom.tscn"), position).shot() EffectController.create(preload("res://components/Effects/LGBTBoom.tscn"), position).shot()
+1 -1
View File
@@ -15,4 +15,4 @@ func ai():
else: else:
forwarded = true forwarded = true
if is_instance_valid(tracer): 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 current: int = 0
static var data: Array[Wave] = [ static var data: Array[Wave] = [
# entity, minCount, maxCount, isBoss, from, to, per # 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/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"), 0, 0, true, 8, INF, 6),
# create(preload("res://components/Characters/Chick.tscn"), 1, 1, true, 0, INF, 1), create(preload("res://components/Characters/Chick.tscn"), 1, 1, true, 0, INF, 1),
] ]
static func create( static func create(
+12 -10
View File
@@ -59,15 +59,16 @@ func _physics_process(_delta: float) -> void:
if destroying: return if destroying: return
if is_instance_valid(launcher) and (launcher.isPlayer() or is_instance_valid(launcher.currentFocusedBoss)): if is_instance_valid(launcher) and (launcher.isPlayer() or is_instance_valid(launcher.currentFocusedBoss)):
launcher.position -= Vector2.from_angle(rotation) * recoil launcher.position -= Vector2.from_angle(rotation) * recoil
PresetAIs.trace( var targetEntity = EntityTool.findClosetEntity(position, get_tree(),
self, !launcher.isPlayer(),
EntityTool.findClosetEntity(position, get_tree(), launcher.isPlayer(),
!launcher.isPlayer(), [launcher] )
launcher.isPlayer(), if is_instance_valid(targetEntity):
[launcher] PresetAIs.trace(
).position, self,
launcher.fields.get(FieldStore.Entity.BULLET_TRACE) / 10 targetEntity.getTrackingAnchor(),
) launcher.fields.get(FieldStore.Entity.BULLET_TRACE) / 10
)
ai() ai()
else: else:
tryDestroy() tryDestroy()
@@ -113,7 +114,8 @@ func tryRefract():
var value = launcher.fields.get(FieldStore.Entity.BULLET_REFRACTION) var value = launcher.fields.get(FieldStore.Entity.BULLET_REFRACTION)
var entity = EntityTool.findClosetEntity(position, get_tree(), !launcher.isPlayer(), launcher.isPlayer()) var entity = EntityTool.findClosetEntity(position, get_tree(), !launcher.isPlayer(), launcher.isPlayer())
for i in range(MathTool.shrimpRate(value)): 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(): func ai():
+3
View File
@@ -277,6 +277,9 @@ func playSound(type: String):
await cloned.finished await cloned.finished
cloned.queue_free() cloned.queue_free()
func getTrackingAnchor() -> Vector2:
return hurtbox.global_position
# 关于分组 # 关于分组
func isPlayer(): func isPlayer():
return is_in_group("players") return is_in_group("players")