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:
@@ -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"]
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -6,4 +6,4 @@ func register():
|
|||||||
damage = 5
|
damage = 5
|
||||||
|
|
||||||
func ai():
|
func ai():
|
||||||
PresetsAI.forward(self, rotation)
|
PresetAIs.forward(self, rotation)
|
||||||
|
|||||||
+1
-1
@@ -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,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()
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user