1use hotwire::{WireLine, WireParams, WireRenderer};
2use sdl3::event::Event;
3use sdl3::pixels::Color;
4use std::time::Instant;
5
6fn main() -> Result<(), Box<dyn std::error::Error>> {
7 let sdl = sdl3::init()?;
9 let video = sdl.video()?;
10
11 let window = video
13 .window("Hotwire - Animated Example", 800, 600)
14 .position_centered()
15 .build()
16 .map_err(|e| e.to_string())?;
17
18 let canvas = window.into_canvas();
19 let mut renderer = WireRenderer::new(canvas);
20
21 let lines = vec![
23 WireLine::new(
24 100.0,
25 150.0,
26 700.0,
27 150.0,
28 WireParams {
29 sag: 60.0,
30 thickness: 3.0,
31 sway_speed: 1.0,
32 sway_amount: 4.0,
33 segment_density: 2.0,
34 color: Color::RGB(200, 180, 160),
35 },
36 ),
37 WireLine::new(
38 150.0,
39 250.0,
40 650.0,
41 280.0,
42 WireParams {
43 sag: 80.0,
44 thickness: 4.0,
45 sway_speed: 1.5,
46 sway_amount: 6.0,
47 segment_density: 2.5,
48 color: Color::RGB(180, 180, 180),
49 },
50 ),
51 WireLine::new(
52 200.0,
53 380.0,
54 600.0,
55 400.0,
56 WireParams {
57 sag: 50.0,
58 thickness: 2.5,
59 sway_speed: 0.8,
60 sway_amount: 3.0,
61 segment_density: 2.0,
62 color: Color::RGB(160, 140, 120),
63 },
64 ),
65 ];
66
67 let mut event_pump = sdl.event_pump()?;
68 let start_time = Instant::now();
69
70 'running: loop {
71 for event in event_pump.poll_iter() {
73 match event {
74 Event::Quit { .. } => break 'running,
75 _ => {}
76 }
77 }
78
79 let time = start_time.elapsed().as_secs_f32();
81
82 renderer.canvas_mut().set_draw_color(Color::RGB(20, 20, 30));
84 renderer.canvas_mut().clear();
85
86 for line in &lines {
88 renderer.render(line, time)?;
89 }
90
91 renderer.present();
93
94 std::thread::sleep(std::time::Duration::from_millis(16));
96 }
97
98 Ok(())
99}