Weapons
Weapons
Types d’armes
- Projectile : Tire des projectiles en ligne (droite ou multi-directions)
- AoE : Zone d’effet instantanée ou persistante
- Orbital : Objets tournant autour du joueur avec trajectoires non-linéaires
Structure Rust
#[derive(Deserialize, Clone)]
struct WeaponConfig {
name: String,
levels: Vec<WeaponLevel>,
}
#[derive(Deserialize, Clone)]
struct WeaponLevel {
level: u8,
stats: WeaponStats,
attack: WeaponAttack,
}
#[derive(Deserialize, Clone)]
struct WeaponStats {
damage: f32,
energy_cost: f32,
fire_rate: f32,
}
#[derive(Deserialize, Clone)]
enum WeaponAttack {
Projectile {
sprite: String,
speed: f32,
lifetime: f32,
trajectories: Vec<Trajectory>,
on_hit: Option<OnHitEffect>,
},
Aoe {
sprite: String,
radius: f32,
duration: f32,
},
Orbital {
sprite: String,
count: u32,
damage: f32,
orbit_pattern: OrbitPattern,
},
}
#[derive(Deserialize, Clone)]
struct Trajectory {
angle_offset: f32,
}
#[derive(Deserialize, Clone)]
enum OnHitEffect {
Explosion { radius: f32, damage: f32 },
Pierce { max_targets: u32 },
Slow { duration: f32, percentage: f32 },
}
#[derive(Deserialize, Clone)]
enum OrbitPattern {
Circle {
radius: f32,
rotation_speed: f32,
clockwise: bool,
},
Spiral {
min_radius: f32,
max_radius: f32,
rotation_speed: f32,
expansion_speed: f32,
},
FigureEight {
width: f32,
height: f32,
period: f32,
},
Ellipse {
width: f32,
height: f32,
rotation_speed: f32,
},
}
Évolution par niveaux
Chaque niveau peut modifier :
- Stats (damage, energy_cost, fire_rate)
- Type d’attaque complet (Projectile → AoE, etc.)
- Nombre de trajectoires/projectiles
- Pattern orbital
- Effets on_hit
Notes
- Armes en tir automatique (fire_rate > 0)
- Orbitaux permanents (fire_rate = 0, coût énergie par seconde)
- 2 slots d’armes maximum
- Slots définitifs pendant la run