1
1
mirror of https://github.com/Rundll86/Dog-Lynx-And-HCN.git synced 2026-07-07 10:42:13 +08:00

refactor(bullets): 重命名PresetsAI为PresetAIs并添加地图碰撞检测

将子弹AI预设类从PresetsAI重命名为PresetAIs
为BulletBase添加autoDestroyOnHitMap选项控制地图碰撞销毁
修改多个子弹脚本使用新的PresetAIs类名
为ChickSprint子弹添加地图碰撞伤害逻辑
This commit is contained in:
2025-08-29 18:34:58 +08:00
parent b8887d8d0c
commit a7e05cff65
10 changed files with 24 additions and 13 deletions
@@ -208,6 +208,7 @@ height = 2000.0
[node name="LaserSummoner" instance=ExtResource("1_pnxoq")] [node name="LaserSummoner" instance=ExtResource("1_pnxoq")]
script = ExtResource("2_nk2p8") script = ExtResource("2_nk2p8")
autoSpawnAnimation = true autoSpawnAnimation = true
autoDestroyOnHitMap = false
freeAfterSpawn = true freeAfterSpawn = true
[node name="texture" parent="." index="0"] [node name="texture" parent="." index="0"]
+1 -1
View File
@@ -90,7 +90,7 @@ libraries = {
"": SubResource("AnimationLibrary_44ixa") "": SubResource("AnimationLibrary_44ixa")
} }
[node name="map" type="StaticBody2D" parent="."] [node name="map" type="StaticBody2D" parent="." groups=["map"]]
[node name="background" type="Sprite2D" parent="map"] [node name="background" type="Sprite2D" parent="map"]
z_index = -100 z_index = -100
+1 -1
View File
@@ -5,4 +5,4 @@ func register():
penerate = 1 penerate = 1
func ai(): func ai():
rotation_degrees += 1 rotation_degrees += 1
PresetsAI.lockLauncher(self, launcher, true) PresetAIs.lockLauncher(self, launcher, true)
+4 -1
View File
@@ -6,6 +6,9 @@ func register():
damage = 20 damage = 20
penerate = 1 penerate = 1
func ai(): func ai():
PresetsAI.lockLauncher(self, launcher, true) PresetAIs.lockLauncher(self, launcher, true)
if !launcher.sprinting: if !launcher.sprinting:
tryDestroy() tryDestroy()
func destroy(beacuseMap: bool):
if beacuseMap:
launcher.takeDamage(self, 0.5)
+2 -2
View File
@@ -7,6 +7,6 @@ func register():
damage = 2 damage = 2
func ai(): func ai():
canDamageSelf = !(timeLived() >= traceTime) canDamageSelf = !(timeLived() >= traceTime)
PresetsAI.forward(self, rotation) PresetAIs.forward(self, rotation)
if timeLived() < traceTime: if timeLived() < traceTime:
PresetsAI.trace(self, launcher.currentFocusedBoss.position, 0.05) PresetAIs.trace(self, launcher.currentFocusedBoss.position, 0.05)
+1 -1
View File
@@ -6,4 +6,4 @@ func register():
damage = 5 damage = 5
func ai(): func ai():
PresetsAI.forward(self, rotation) PresetAIs.forward(self, rotation)
@@ -1,4 +1,4 @@
class_name PresetsAI class_name PresetAIs
static func lockLauncher(bullet: BulletBase, launcher: EntityBase, onTexture: bool = false): static func lockLauncher(bullet: BulletBase, launcher: EntityBase, onTexture: bool = false):
bullet.position = launcher.texture.global_position if onTexture else launcher.position bullet.position = launcher.texture.global_position if onTexture else launcher.position
+2 -2
View File
@@ -2,6 +2,6 @@ extends BulletBase
class_name PurpleCrystal class_name PurpleCrystal
func ai(): func ai():
PresetsAI.forward(self, rotation) PresetAIs.forward(self, rotation)
func destroy(): func destroy(_beacuseMap: bool):
EffectController.create(preload("res://components/Effects/PurpleCrystalExplosion.tscn"), global_position).shot() EffectController.create(preload("res://components/Effects/PurpleCrystalExplosion.tscn"), global_position).shot()
+1 -1
View File
@@ -4,4 +4,4 @@ class_name Star
func register(): func register():
damage = 1 damage = 1
func ai(): func ai():
PresetsAI.forward(self, rotation) PresetAIs.forward(self, rotation)
+10 -3
View File
@@ -12,6 +12,7 @@ class_name BulletBase
@export var autoSpawnAnimation: bool = false @export var autoSpawnAnimation: bool = false
@export var autoLoopAnimation: bool = false @export var autoLoopAnimation: bool = false
@export var autoDestroyAnimation: bool = false @export var autoDestroyAnimation: bool = false
@export var autoDestroyOnHitMap: bool = true
@export var freeAfterSpawn: bool = false @export var freeAfterSpawn: bool = false
@export var knockback: float = 0 # 击退力,物理引擎单位 @export var knockback: float = 0 # 击退力,物理引擎单位
@export var recoil: float = 0 # 后坐力,物理引擎单位 @export var recoil: float = 0 # 后坐力,物理引擎单位
@@ -39,6 +40,12 @@ func _ready():
tryDestroy() tryDestroy()
if autoLoopAnimation: if autoLoopAnimation:
animator.play("loop") animator.play("loop")
body_entered.connect(
func(body):
if body.is_in_group("map"):
if autoDestroyOnHitMap:
tryDestroy(true)
)
func _process(_delta: float) -> void: func _process(_delta: float) -> void:
if destroying: return if destroying: return
if lifeTime > 0: if lifeTime > 0:
@@ -74,10 +81,10 @@ func timeLived():
func dotLoop(): func dotLoop():
if await applyDot(): if await applyDot():
await dotLoop() await dotLoop()
func tryDestroy(): func tryDestroy(becauseMap: bool = false):
if destroying: return if destroying: return
destroying = true destroying = true
await destroy() await destroy(becauseMap)
if autoDestroyAnimation: if autoDestroyAnimation:
animator.play("destroy") animator.play("destroy")
await animator.animation_finished await animator.animation_finished
@@ -86,7 +93,7 @@ func tryDestroy():
# 抽象方法 # 抽象方法
func ai(): func ai():
pass pass
func destroy(): func destroy(_beacuseMap: bool):
pass pass
func spawn(): func spawn():
pass pass