mirror of
https://github.com/Rundll86/Dog-Lynx-And-HCN.git
synced 2026-05-28 23:11:54 +08:00
3dd5f06bbe
添加新角色MTY(猫头鹰)及其专属子弹MTYSprint - 实现MTY角色的基本属性和AI行为 - 添加MTYSprint子弹类型及碰撞检测 - 在Wave.gd中添加MTY的生成配置 - 扩展BulletTool工具类添加查找最近子弹功能
32 lines
1.2 KiB
GDScript
32 lines
1.2 KiB
GDScript
class_name BulletTool
|
|
|
|
static func fromArea(area: Area2D) -> BulletBase:
|
|
if area is BulletBase:
|
|
return area as BulletBase
|
|
else:
|
|
return null
|
|
static func canDamage(bullet: BulletBase, target: EntityBase) -> bool:
|
|
if !bullet or !target or !bullet.launcher: return false
|
|
if target.currentInvinsible: return false
|
|
if !bullet.canDamageSelf && target == bullet.launcher: return false
|
|
if !GameRule.allowFriendlyFire:
|
|
if target.isPlayer() == bullet.launcher.isPlayer() and bullet.launcher.currentFocusedBoss != target: return false
|
|
return true
|
|
static func findClosetBullet(to: Vector2, fromTree: SceneTree) -> BulletBase:
|
|
var result: BulletBase = null
|
|
var lastDistance = INF
|
|
for bullet in fromTree.get_nodes_in_group("bullets"):
|
|
if to.distance_to(bullet.position) < lastDistance:
|
|
lastDistance = to.distance_to(bullet.position)
|
|
result = bullet
|
|
return result
|
|
static func findClosetBulletCanDamage(to: Vector2, fromTree: SceneTree, target: EntityBase) -> BulletBase:
|
|
var result: BulletBase = null
|
|
var lastDistance = INF
|
|
for bullet in fromTree.get_nodes_in_group("bullets"):
|
|
if canDamage(bullet, target):
|
|
if to.distance_to(bullet.position) < lastDistance:
|
|
lastDistance = to.distance_to(bullet.position)
|
|
result = bullet
|
|
return result
|