use sevenx_engine::{
input::InputHandler,
particles::{BlendMode, ParticleConfig, ParticleSystem},
ui::render_text,
world::World,
Engine, EngineConfig, GameState, KeyCode,
};
struct ParticlesAdvanced {
fire_system: ParticleSystem,
magic_system: ParticleSystem,
snow_system: ParticleSystem,
spawn_timer: f32,
}
impl GameState for ParticlesAdvanced {
fn new() -> Self {
ParticlesAdvanced {
fire_system: ParticleSystem::new(500)
.with_blend_mode(BlendMode::Additive)
.with_drag(0.1),
magic_system: ParticleSystem::new(300)
.with_blend_mode(BlendMode::Additive)
.with_drag(0.05),
snow_system: ParticleSystem::new(200).with_drag(0.02),
spawn_timer: 0.0,
}
}
fn update(&mut self, dt: f32, input: &InputHandler, world: &mut World) {
if input.is_key_pressed(KeyCode::Digit1) {
let config = ParticleConfig::fire();
self.fire_system.emit_stream(400.0, 550.0, 50.0, dt, config);
}
if input.is_key_pressed(KeyCode::Digit2) {
let config = ParticleConfig::magic();
self.magic_system.emit_burst(400.0, 300.0, 30, config);
}
self.spawn_timer += dt;
if self.spawn_timer > 0.1 {
self.spawn_timer = 0.0;
let config = ParticleConfig::snow();
for _ in 0..3 {
use rand::Rng;
let mut rng = rand::thread_rng();
let x = rng.gen_range(0.0..800.0);
self.snow_system.emit_burst(x, -10.0, 1, config);
}
}
if input.is_key_pressed(KeyCode::Digit3) {
let config = ParticleConfig::blood();
self.fire_system.emit_burst(400.0, 300.0, 40, config);
}
if input.is_key_pressed(KeyCode::Digit4) {
let config = ParticleConfig::rain();
for _ in 0..5 {
use rand::Rng;
let mut rng = rand::thread_rng();
let x = rng.gen_range(0.0..800.0);
self.snow_system.emit_burst(x, -10.0, 1, config);
}
}
self.fire_system.update(dt, 50.0);
self.magic_system.update(dt, -100.0); self.snow_system.update(dt, 100.0);
}
fn draw(&mut self, _world: &World, pixels: &mut [u8]) {
self.snow_system.render(pixels, 0.0, 0.0, 800, 600);
self.fire_system.render(pixels, 0.0, 0.0, 800, 600);
self.magic_system.render(pixels, 0.0, 0.0, 800, 600);
render_text(
"1: FOGO | 2: MAGIA | 3: SANGUE | 4: CHUVA",
100,
20,
[255, 255, 255, 255],
pixels,
800,
);
let fire_count = format!("FOGO: {}", self.fire_system.count());
render_text(&fire_count, 10, 50, [255, 100, 0, 255], pixels, 800);
let magic_count = format!("MAGIA: {}", self.magic_system.count());
render_text(&magic_count, 10, 70, [200, 100, 255, 255], pixels, 800);
let snow_count = format!("NEVE: {}", self.snow_system.count());
render_text(&snow_count, 10, 90, [200, 200, 255, 255], pixels, 800);
}
}
fn main() {
println!("✨ Sistema de Partículas Avançado");
println!("1 - Fogo (segure)");
println!("2 - Magia");
println!("3 - Sangue");
println!("4 - Chuva");
let config = EngineConfig::new()
.with_title("SevenX Engine - Partículas Avançadas")
.with_size(800, 600)
.with_clear_color(10, 10, 20, 255);
Engine::with_config(config).run::<ParticlesAdvanced>();
}