Skip to content

Suivi de Leader et Comportement de Nuée

ComposantSpécification
Interface Membrenet.dasik.social.api.group.GroupMember
Objectif IA (Goal)net.dasik.social.ai.goal.FollowLeaderGoal
Types de NuéeFlockType.TERRESTRIAL, FlockType.AERIAL
Stratégies BoidsTerrestrialFlockingStrategy, AerialFlockingStrategy

🕊️ Présentation & Algorithme de Guidage

Dasik Library intègre une implémentation optimisée du modèle de nuée Boids (conçu par Craig Reynolds), adaptée aux contraintes de calcul spatial de Minecraft. Les entités implémentant GroupMember coordonnent leurs déplacements collectifs, le suivi d'un chef de meute et l'évitement mutuel.

Formule de la Force de Direction Résultante

La force directrice totale $\vec{F}_{\text{steer}}$ appliquée à l'entité est donnée par :

$$\vec{F}{\text{steer}} = (w{\text{sep}} \cdot \vec{V}{\text{separation}}) + (w{\text{coh}} \cdot \vec{V}{\text{cohesion}}) + (w{\text{ali}} \cdot \vec{V}_{\text{alignment}})$$

Où :

  • $\vec{V}_{\text{separation}}$ repousse les entités proches pour prévenir les collisions.
  • $\vec{V}_{\text{cohesion}}$ attire l'entité vers le centre de masse du groupe.
  • $\vec{V}_{\text{alignment}}$ aligne le vecteur de déplacement sur celui des voisins.
  • $w_{\text{sep}}, w_{\text{coh}}, w_{\text{ali}}$ représentent les coefficients définis dans GroupParameters.

⚙️ Spécification de GroupParameters

java
public record GroupParameters(
    float cohesionRadius, 
    float separationRadius, 
    float maxSpeed, 
    boolean canTeleport, 
    float teleportDistance,
    float startDistance,
    float stopDistance,
    float alignmentWeight,
    float cohesionWeight,
    float separationWeight
) {
    public static final GroupParameters DEFAULT_AERIAL = new GroupParameters(
        3.0f, 1.0f, 0.4f, true, 144.0f, 6.0f, 2.0f, 0.05f, 0.05f, 0.1f
    );
    public static final GroupParameters DEFAULT_TERRESTRIAL = new GroupParameters(
        5.0f, 1.5f, 1.2f, true, 144.0f, 6.0f, 2.0f, 0.0f, 0.0f, 0.0f
    );
}

💻 Exemple de Code Développeur

java
public class CustomBirdEntity extends PathfinderMob implements GroupMember {
    private LivingEntity leader;

    @Override
    protected void registerGoals() {
        super.registerGoals();
        this.goalSelector.addGoal(4, new FollowLeaderGoal<>(this, GroupParameters.DEFAULT_AERIAL, 32.0D));
    }

    @Override public LivingEntity getLeader() { return this.leader; }
    @Override public void setLeader(LivingEntity leader) { this.leader = leader; }
    @Override public FlockType getFlockType() { return FlockType.AERIAL; }
}

🔗 Pages Liées

Official documentation & web portal for Dasik Igaijinn mods.