1
1
mirror of https://github.com/Rundll86/Dog-Lynx-And-HCN.git synced 2026-05-28 23:11:54 +08:00
Files
Dog-Lynx-And-HCN/scripts/Tools/EntityTool.gd
T
fallingshrimp ec795e534e feat(战斗系统): 添加KukeMC召唤机制及子实体管理
为KukeMC添加召唤子实体KukeChild的功能,并在血量低于25%时自动清除所有子实体并恢复血量
在EntityBase中添加tryKill方法统一处理实体销毁逻辑
在EntityTool中添加按类查找实体的工具方法
2025-09-19 22:11:29 +08:00

34 lines
1.3 KiB
GDScript

class_name EntityTool
static func fromHurtbox(node: Node) -> EntityBase:
if node is Area2D:
var texture = node.get_parent()
if texture is AnimatedSprite2D:
var entity = texture.get_parent()
if entity is EntityBase:
return entity as EntityBase
return null
static func findClosetEntity(to: Vector2, fromTree: SceneTree, player: bool = false, mob: bool = false, excludes: Array[EntityBase] = []) -> EntityBase:
var result = null
var lastDistance = INF
var nodes = []
if player:
nodes += fromTree.get_nodes_in_group("players")
if mob:
nodes += fromTree.get_nodes_in_group("mobs")
for entity in nodes:
if entity is EntityBase and entity not in excludes:
if to.distance_to(entity.position) < lastDistance:
lastDistance = to.distance_to(entity.position)
result = entity
return result
static func findClosetPlayer(to: Vector2, fromTree: SceneTree, excludes: Array[EntityBase] = []) -> EntityBase:
return findClosetEntity(to, fromTree, true, false, excludes)
static func findEntityByClass(cls: String, fromTree: SceneTree) -> Array[EntityBase]:
var results: Array[EntityBase] = []
var nodes = fromTree.get_nodes_in_group("mobs") + fromTree.get_nodes_in_group("players")
for entity in nodes:
if entity.get_class() == cls:
results.append(entity)
return results