Skip to content

Pengikut Pemimpin & Flocking Boids

KomponenSpesifikasi
Antarmuka Anggotanet.dasik.social.api.group.GroupMember
AI Goalnet.dasik.social.ai.goal.FollowLeaderGoal
Tipe KawananFlockType.TERRESTRIAL, FlockType.AERIAL
Strategi BoidsTerrestrialFlockingStrategy, AerialFlockingStrategy

🕊️ Gambaran Umum & Matematika Pengemudian

Dasik Library menyertakan implementasi model kawanan Boids (oleh Craig Reynolds) yang telah dioptimalkan secara khusus untuk navigasi dalam dunia Minecraft. Entitas yang mengimplementasikan GroupMember mengoordinasikan pergerakan rombongan, mengikuti pemimpin, dan menjaga jarak formasi.

Rumus Vektor Kemudi Gabungan

Gaya kemudi total $\vec{F}_{\text{steer}}$ yang diterapkan pada entitas dihitung sebagai:

$$\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}})$$

Di mana:

  • $\vec{V}_{\text{separation}}$ menolak entitas sekitar agar tidak bertabrakan.
  • $\vec{V}_{\text{cohesion}}$ menarik entitas menuju pusat massa rombongan.
  • $\vec{V}_{\text{alignment}}$ menyelaraskan arah hadap dengan tetangga kelompok.
  • $w_{\text{sep}}, w_{\text{coh}}, w_{\text{ali}}$ adalah koefisien bobot dalam GroupParameters.

⚙️ Spesifikasi 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
    );
}

💻 Contoh Kode Pengembang

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; }
}

🔗 Halaman Terkait

Official documentation & web portal for Dasik Igaijinn mods.