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