From 68eb2fa1b431ccd0106b2f484787213c6b26770c Mon Sep 17 00:00:00 2001 From: ntr Date: Mon, 21 Oct 2019 17:01:10 +1100 Subject: [PATCH] wip --- server/src/img.rs | 93 +++++++++++++++++++++++++++++++++++++++++++++++ server/src/mtx.rs | 2 +- 2 files changed, 94 insertions(+), 1 deletion(-) diff --git a/server/src/img.rs b/server/src/img.rs index c10d8e57..5a707a1d 100644 --- a/server/src/img.rs +++ b/server/src/img.rs @@ -257,6 +257,94 @@ fn _hieroglyph() -> String { return s; } + +pub fn smiley(id: Uuid) -> Result { + let mut rng = thread_rng(); + let mut svg = Vec::new(); + + // distribution for lightness + // bellcurve around 75% + let l_dist = Normal::new(50.0, 10.0); + let s_dist = Normal::new(50.0, 20.0); + + + // basic layout is 2000x1000 box w/ 50 padding + // 2:1 for each x,y + + // left eye is top left + // x = 50 left padding + point offset + // y = 750 + 50 top padding + point offset + + // right eye is top right + // x = 50 left padding + 1500 + point offset + // y = 50 top padding + point offset + + // mouth is bottom centre + // x = 50 + 500 + xoffset + // y = 50 + 750 + yoffset + + write!(&mut svg, "")?; + + let n_points = rng.gen_range(3, 5); + let left_eye_path: String = std::iter::repeat(()) + .map(|()| { + let x = 50 + (rng.gen_range(0, 5) * 100); + let y = 50 + (rng.gen_range(0, 5) * 50); + format!("{} {}", x, y) + }) + .take(n_points) + .collect::>() + .join(","); + + // left eye + write!(&mut svg, + "", + left_eye_path)?; + + let n_points = rng.gen_range(3, 5); + let right_eye_path: String = std::iter::repeat(()) + .map(|()| { + let x = 50 + 1500 + (rng.gen_range(0, 5) * 100); + let y = 50 + (rng.gen_range(0, 5) * 50); + format!("{} {}", x, y) + }) + .take(n_points) + .collect::>() + .join(","); + + // right eye + write!(&mut svg, + "", + right_eye_path)?; + + let n_points = rng.gen_range(3, 5); + let mouth_path: String = std::iter::repeat(()) + .map(|()| { + let x = 50 + 500 + (rng.gen_range(0, 10) * 100); + let y = 50 + 750 + (rng.gen_range(0, 5) * 50); + format!("{} {}", x, y) + }) + .take(n_points) + .collect::>() + .join(","); + + // mouth + write!(&mut svg, + "", + mouth_path)?; + + write!(&mut svg, "")?; + + let dest = format!("/var/lib/mnml/public/imgs/{}.svg", id); + println!("/var/lib/mnml/public/imgs/{}.svg", id); + + let mut file = File::create(dest)?; + file.write_all(&svg)?; + + Ok(id) +} + + pub fn exists(id: Uuid) -> bool { std::path::Path::new(&format!("/var/lib/mnml/public/imgs/{}.svg", id)).exists() } @@ -283,6 +371,11 @@ mod tests { // shapes_write(Uuid::new_v4()).unwrap(); // } // } + + #[test] + fn smiley_test() { + smiley(Uuid::new_v4()).unwrap(); + } } diff --git a/server/src/mtx.rs b/server/src/mtx.rs index 239e1fe7..a6acd9a9 100644 --- a/server/src/mtx.rs +++ b/server/src/mtx.rs @@ -159,7 +159,7 @@ pub fn apply(tx: &mut Transaction, account: &Account, variant: MtxVariant, const match mtx.variant { MtxVariant::Invader => img::invader_write(construct.img)?, MtxVariant::Molecular => img::molecular_write(construct.img)?, - MtxVariant::Shapes => img::shapes_write(construct.img)?, + MtxVariant::Shapes => img::smiley(construct.img)?, _ => construct.img, };