pyxen.world.near()

Les entités dans un rayon autour d’un point, la plus proche d’abord.

world.near(x, y, radius, *components, without=None)

Renvoie les entités dont la position est à radius ou moins de (x, y), la plus proche d’abord. Deux à la même distance viennent toujours dans le même ordre. Les composants et without fonctionnent comme dans world.all() ; sans composant, toutes les entités comptent.

C’est rapide avec beaucoup d’entités : Pyxen les range dans une grille par position et ne regarde que là où est le cercle, si bien qu’un tir qui demande les ennemis proches coûte à peu près autant avec 50 ennemis qu’avec 5000.


Paramètres

ParamètreTypeDescription
xfloatLe x du point, en pixels du monde
yfloatLe y du point, en pixels du monde
radiusfloatLa distance au point, en pixels. 0 trouve ce qui est posé dessus
*componentsstrLes noms de composants qu’une entité doit tous avoir, comme dans world.all()
withouttupleLes noms de composants qu’une entité ne doit pas avoir

Un tir qui touche

Chaque tir blesse les ennemis qu’il touche, sans tester tous les ennemis du jeu :

for shot in world.all("shot"):
    for foe in world.near(shot.x, shot.y, 10, "foe"):
        foe.foe.hp -= 1
        if foe.foe.hp <= 0:
            world.destroy(foe)

Un ennemi détruit ici n’est plus jamais trouvé, ni par ce tir ni par le suivant.


Visée automatique

La première entité est la plus proche : next la prend, ou None quand aucune n’est à portée :

hero = world.get(name="hero")
target = next(world.near(hero.x, hero.y, 120, "foe", without=("dead",)), None)
if target is not None:
    fire_at(target.x, target.y)

Une tour choisit sa cible de la même façon, depuis sa propre position et sa portée.


Positions

La distance se mesure entre le point et la position de chaque entité dans le monde : son x et son y, à travers les positions, rotations et échelles de ses parents, là où elle est dessinée. Pour les entités à la racine, ou sous un parent en (0, 0) qui ne tourne ni ne change d’échelle (les ennemis d’un niveau, comme d’habitude), ce sont leurs x et y.

Une position écrite plus tôt dans la même image est vue tout de suite : déplacez un tir, puis demandez ce qui est près de lui.


Cas particuliers

  • Un rayon négatif ne trouve rien. math.inf trouve toutes les entités, la plus proche d’abord.
  • Le résultat dit où étaient les choses au moment de la demande : redemandez après qu’elles ont bougé.