def is_single(data: LogicData) -> bool: if data.config.single == Define.FORCE_SINGLE: return True elif data.config.single == Define.FORCE_MULTI: return False cnt = 0 mch_aoe = sector(data.me.pos.x, data.me.pos.y, 12, mch_aoe_angle, data.me.target_radian(data.target)) for enemy in data.valid_enemies: if mch_aoe.intersects(enemy.hitbox): cnt += 1 if cnt > 2: return False return True
def count_enemy(data: LogicData, skill_type: int): if data.config.single == Define.FORCE_SINGLE: return 1 if data.config.single == Define.FORCE_MULTI: return 3 if skill_type == 1: aoe = circle(data.me.pos.x, data.me.pos.y, 5) # 转圈圈 elif skill_type == 2: aoe = sector(data.me.pos.x, data.me.pos.y, 8, sam_sector_angle, data.me.target_radian(data.target)) # 五剑阵风 else: aoe = rotated_rect(data.me.pos.x, data.me.pos.y, 2, 10, data.me.target_radian(data.target)) # 红莲 return sum(map(lambda x: aoe.intersects(x.hitbox), data.valid_enemies))
def get_nearest(me_pos, target, mode, dis=3): radius = target.HitboxRadius + dis - 0.5 if mode == SIDE: area1 = sector(target.pos.x, target.pos.y, radius, angle, target.pos.r + math.pi / 2) area2 = sector(target.pos.x, target.pos.y, radius, angle, target.pos.r - math.pi / 2) area = cascaded_union([area1, area2]) elif mode == FRONT: area = sector(target.pos.x, target.pos.y, radius, angle, target.pos.r) elif mode == BACK: area = sector(target.pos.x, target.pos.y, radius, angle, target.pos.r - math.pi) else: area = target.hitbox area = area.difference(Point(target.pos.x, target.pos.y).buffer(0.5)) me = Point(me_pos.x, me_pos.y) if area.contains(me): return None p1 = nearest_points(area, me)[0] return p1.x, p1.y
def count_enemy(data: LogicData, skill_type: int): """ :param skill_type: 0:冲击疾风震雷 1:六分 2:画圆斩 """ if data.config.single == Define.FORCE_SINGLE: return 1 if data.config.single == Define.FORCE_MULTI: return 3 if skill_type == 0: aoe = circle(data.target.pos.x, data.target.pos.y, 5) # 冲击疾风震雷 elif skill_type == 1: aoe = circle(data.target.pos.x, data.target.pos.y, 6) # 六分 else: aoe = sector(data.me.pos.x, data.me.pos.y, 8, rdm_aoe_angle, data.me.target_radian(data.target)) # 画圆斩 return sum(map(lambda x: aoe.intersects(x.hitbox), data.valid_enemies))
def is_single(data: LogicData, skill_type: int) -> bool: if data.config.single == Define.FORCE_SINGLE: return True if data.config.single == Define.FORCE_MULTI: return False if skill_type == 0: aoe = sector(data.me.pos.x, data.me.pos.y, 12, bard_aoe_angle, data.me.target_radian(data.target)) # 连珠箭 elif skill_type == 1: aoe = circle(data.me.pos.x, data.me.pos.y, 5) # 影噬箭 elif skill_type == 2: aoe = circle(data.me.pos.x, data.me.pos.y, 8) # 死亡箭雨 else: aoe = circle(data.me.pos.x, data.me.pos.y, 25) # 死亡箭雨 cnt = 0 for enemy in data.valid_enemies: if aoe.intersects(enemy.hitbox): cnt += 1 if cnt > 1: return False return True