use ectoplasm::tokio; use ectoplasm::url::Url; use ectoplasm::RemoteCanvas; use num_complex::Complex32; use rand::Rng; #[tokio::main] async fn main() { let server_url = Url::parse("wss://ghost.life").unwrap(); let mut remote_canvas = RemoteCanvas::new(server_url).await.unwrap(); remote_canvas.fetch().await; let mut rng = rand::thread_rng(); let dist = num_complex::ComplexDistribution::new( rand::distributions::Uniform::new(-1.5, 0.5), rand::distributions::Uniform::new(-1.0, 1.0), ); loop { let c = rng.sample(dist); let mut z = Complex32::new(0.0, 0.0); for _ in 0..200 { let w = z * z + c; if w.re < -1.5 || w.re > 0.5 || w.im < -1.0 || w.im > 1.0 { break; } z = w; } let (cx, cy) = complex_to_coords(c); let (zx, zy) = complex_to_coords(z); let index = remote_canvas.get_pixel(zx, zy).await; remote_canvas.set_pixel(cx, cy, index).await; } } fn complex_to_coords(c: Complex32) -> (u8, u8) { let x = (128.0 * (c.re + 1.5)) as u8; let y = (128.0 * (c.im + 1.0)) as u8; (x, y) }