basic/
basic.rs

1use hotwire::{WireLine, WireParams, WireRenderer};
2use sdl3::event::Event;
3use sdl3::pixels::Color;
4
5fn main() -> Result<(), Box<dyn std::error::Error>> {
6    // Initialize SDL3
7    let sdl = sdl3::init()?;
8    let video = sdl.video()?;
9
10    // Create window
11    let window = video
12        .window("Hotwire - Basic Example", 800, 600)
13        .position_centered()
14        .build()
15        .map_err(|e| e.to_string())?;
16
17    let canvas = window.into_canvas();
18    let mut renderer = WireRenderer::new(canvas);
19
20    // Create a horizontal drooping wire
21    let wire_line = WireLine::new(
22        100.0,
23        200.0,
24        700.0,
25        200.0,
26        WireParams {
27            sag: 80.0,
28            thickness: 4.0,
29            sway_speed: 1.0,
30            sway_amount: 3.0,
31            segment_density: 2.0,
32            color: Color::RGB(160, 160, 160),
33        },
34    );
35
36    let mut event_pump = sdl.event_pump()?;
37
38    'running: loop {
39        // Handle events
40        for event in event_pump.poll_iter() {
41            match event {
42                Event::Quit { .. } => break 'running,
43                _ => {}
44            }
45        }
46
47        // Clear canvas
48        renderer.canvas_mut().set_draw_color(Color::RGB(20, 20, 30));
49        renderer.canvas_mut().clear();
50
51        // Render wire line (static, no animation)
52        renderer.render(&wire_line, 0.0)?;
53
54        // Present
55        renderer.present();
56
57        // Small delay
58        std::thread::sleep(std::time::Duration::from_millis(16));
59    }
60
61    Ok(())
62}