Skip to main content

Crate ai_duel

Crate ai_duel 

Source
Expand description

Plugin Bevy pour un duel joueur / IA.

Deux combattants (ou plus, avec plusieurs ennemis), de la santé, des factions pour savoir qui peut blesser qui, et une IA simple qui fonce sur le joueur et attaque dès qu’elle est à portée.

§Ce que le plugin gère

  • le comportement de l’IA ;
  • les animations (course / attaque) ;
  • la hitbox d’attaque, les dégâts et l’invulnérabilité après un coup ;
  • la mort des combattants.

§Ce qu’il ne gère pas

  • le chargement des assets : vous devez construire la ressource FighterAssets ;
  • l’input du joueur : appelez start_attack depuis votre propre système, planifié .before(AiDuelSet).

§Organisation du code

ModuleContenu
componentsconfiguration, assets, composants
systemssystèmes exécutés par le plugin
racine (lib)plugin, AiDuelSet, spawn_fighter, start_attack

§Exemple minimal

use bevy::prelude::*;
use ai_duel::prelude::*;

fn main() {
    App::new()
        .add_plugins(DefaultPlugins)
        .add_plugins(AiDuelPlugin)
        .add_systems(Startup, setup)
        .run();
}

fn setup(
    mut commands: Commands,
    asset_server: Res<AssetServer>,
    mut layouts: ResMut<Assets<TextureAtlasLayout>>,
    config: Res<AiDuelConfig>,
) {
    commands.spawn(Camera2d);

    let assets = FighterAssets {
        run_sheet: asset_server.load("run.png"),
        run_layout: layouts.add(TextureAtlasLayout::from_grid(
            UVec2::new(96, 80), 8, 1, None, None)),
        attack_sheet: asset_server.load("attack.png"),
        attack_layout: layouts.add(TextureAtlasLayout::from_grid(
            UVec2::new(96, 80), 6, 1, None, None)),
    };

    // le joueur, à gauche
    spawn_fighter(&mut commands, &assets, &config,
        Vec3::new(-250.0, 0.0, 0.0), Faction::Player, None);

    // un ennemi piloté par l'IA, à droite
    spawn_fighter(&mut commands, &assets, &config,
        Vec3::new(250.0, 0.0, 0.0), Faction::Enemy,
        Some(AiController::default()));

    commands.insert_resource(assets);
}

Re-exports§

pub use components::*;

Modules§

components
Ressources, composants et configuration du plugin.
prelude
Import pratique : use ai_duel::prelude::*;.
systems
Les systèmes ajoutés par AiDuelPlugin.

Structs§

AiDuelPlugin
À ajouter après DefaultPlugins. Enregistre la configuration par défaut (AiDuelConfig) et tous les systèmes du duel.
AiDuelSet
Ensemble de systèmes du duel, exécutés dans l’ordre cooldowns → IA → animation → hitbox → collisions → santé → mort.

Functions§

spawn_fighter
Spawne un combattant complet (sprite, vie, hurtbox, cooldown, état…) et sa hitbox en enfant, inactive au départ.
start_attack
Bascule un combattant en attaque : change l’animation et remet le compteur de frame à zéro. Ne fait rien s’il attaque déjà (une attaque n’est pas interruptible).