use hotline::{FireLine, FireParams, FireRenderer};
use sdl3::event::Event;
use sdl3::pixels::Color;
use std::time::Instant;
fn main() -> Result<(), Box<dyn std::error::Error>> {
let sdl = sdl3::init()?;
let video = sdl.video()?;
let window = video
.window("Hotline - Animated Example", 800, 600)
.position_centered()
.build()
.map_err(|e| e.to_string())?;
let canvas = window.into_canvas();
let mut renderer = FireRenderer::new(canvas);
let lines = vec![
FireLine::new(
100.0,
200.0,
700.0,
200.0,
FireParams {
flame_height: 60.0,
intensity: 1.0,
flicker_speed: 2.0,
particle_density: 1.0,
flame_width: 20.0,
},
),
FireLine::new(
150.0,
350.0,
650.0,
350.0,
FireParams {
flame_height: 80.0,
intensity: 1.2,
flicker_speed: 3.0,
particle_density: 1.2,
flame_width: 30.0,
},
),
FireLine::new(
200.0,
500.0,
600.0,
500.0,
FireParams {
flame_height: 50.0,
intensity: 0.8,
flicker_speed: 1.5,
particle_density: 0.8,
flame_width: 15.0,
},
),
];
let mut event_pump = sdl.event_pump()?;
let start_time = Instant::now();
'running: loop {
for event in event_pump.poll_iter() {
match event {
Event::Quit { .. } => break 'running,
_ => {}
}
}
let time = start_time.elapsed().as_secs_f32();
renderer.canvas_mut().set_draw_color(Color::RGB(0, 0, 0));
renderer.canvas_mut().clear();
for line in &lines {
renderer.render(line, time)?;
}
renderer.present();
std::thread::sleep(std::time::Duration::from_millis(16));
}
Ok(())
}