extends BTCondition class_name BTCanThrow func tick(tick: Tick) -> int: var npc = tick.actor var bb = tick.blackboard var weapon = npc.get_meta("weapon") if npc.is_in_group("guard"): return FAILED if !weapon && !npc.is_in_group("guard"): return FAILED var enemy = bb.get("closest_enemy") if !enemy: return FAILED var enemy_pos = enemy.global_transform.origin var npc_pos = npc.global_transform.origin var space_state = npc.get_world().direct_space_state var result var up = npc.orientation.basis[1] * 0.9 var dir = (enemy_pos - npc_pos).normalized() * 10.0 result = space_state.intersect_ray(npc_pos + up, npc_pos + dir + up, [npc], 0xffff) if result.has("collider"): if result.collider == enemy: return OK return FAILED