From fcd7a668809c49999ecbde18bb1768934907dae0 Mon Sep 17 00:00:00 2001 From: ntr Date: Sat, 14 Sep 2019 18:54:59 +1000 Subject: [PATCH 1/5] shapes --- server/src/img.rs | 105 +++++++++++++++++++++++++++------------------- server/src/mtx.rs | 6 ++- 2 files changed, 68 insertions(+), 43 deletions(-) diff --git a/server/src/img.rs b/server/src/img.rs index 4575924b..acd5ca69 100644 --- a/server/src/img.rs +++ b/server/src/img.rs @@ -84,7 +84,7 @@ pub fn invader_write(id: Uuid) -> Result { Ok(id) } -enum ConstructShape { +enum ConstructShapes { Square, Triangle, Circle, @@ -96,13 +96,13 @@ enum ConstructShape { } // default ? shape -pub fn construct(id: Uuid) -> Result { +pub fn shapes_write(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 l_dist = Normal::new(70.0, 10.0); let s_dist = Normal::new(25.0, 10.0); // 8 6 or 4 points in shape @@ -112,60 +112,81 @@ pub fn construct(id: Uuid) -> Result { // add up to 100 for % let shapes = [ - (ConstructShape::Square, 100), - // (ConstructShape::Triangle, 10), - // (ConstructShape::Circle, 10), - // (ConstructShape::Line, 10), - // (ConstructShape::V, 10), - // (ConstructShape::Tri, 3), - // (ConstructShape::Plus, 5), - // (ConstructShape::Blank, 1), + (ConstructShapes::Square, 10), + (ConstructShapes::Triangle, 10), + (ConstructShapes::Circle, 10), + (ConstructShapes::Line, 10), + (ConstructShapes::V, 10), + // (ConstructShapes::Tri, 3), + // (ConstructShapes::Plus, 5), + (ConstructShapes::Blank, 1), ]; let shape_dist = WeightedIndex::new(shapes.iter().map(|v| v.1))?; - let n_shapes = rng.gen_range(2, 10); + let n_shapes = rng.gen_range(4, 5); + let n_shapes = 4; write!(&mut svg, "")?; - for i in 0..n_shapes - 1 { + for i in 0..n_shapes { let h = rng.gen_range(0, 360); let s = s_dist.sample(&mut rng) as usize; let l = l_dist.sample(&mut rng) as usize; let colour = format!("hsl({:}, {:}%, {:}%)", h, s, l); - let fraction: f64 = (1.0 / n_shapes as f64) * i as f64; - let angle: f64 = (fraction * 180.0) / f64::consts::PI; + let scalar = rng.gen_range(50.0, 200.0); + let rotation = rng.gen_range(0, 180); + let angle: f64 = i as f64 * (1.0 / n_shapes as f64) * f64::consts::PI; + let x_translate = angle.cos() * scalar; + let y_translate = angle.sin() * scalar; match shapes[shape_dist.sample(&mut rng)].0 { - ConstructShape::Square => { - let size = rng.gen_range(5, 50); - let distance = rng.gen_range(50, 200); - let rotation = rng.gen_range(0, 180); - write!(&mut svg, "", - colour, size / 2, size / 2, size, size, rotation, distance, angle)?; - write!(&mut svg, "", - colour, size / 2, size / 2, size, size, rotation, distance, angle + 180.0)?; + ConstructShapes::Square => { + let size = rng.gen_range(20.0, 50.0); + write!(&mut svg, "", + fill = colour, x = size / 2.0, y = size / 2.0, width = size, height = size, x_t = x_translate, y_t = y_translate, rotation = rotation)?; + write!(&mut svg, "", + fill = colour, x = size / 2.0, y = size / 2.0, width = size, height = size, x_t = -x_translate, y_t = -y_translate, rotation = rotation)?; }, - ConstructShape::Triangle => { + ConstructShapes::Triangle => { + let h = rng.gen_range(20.0, 50.0); + let b = rng.gen_range(20.0, 50.0); + write!(&mut svg, "", + fill = colour, x = -b / 2.0, y = h / 2.0, x0 = -b / 2.0, y0 = -h / 2.0, x1 = 0, y1 = b / 2.0, x2 = b / 2.0, y2 = -h / 2.0, rotation = rotation, x_translate = x_translate, y_translate = y_translate)?; + write!(&mut svg, "", + fill = colour, x = -b / 2.0, y = h / 2.0, x0 = -b / 2.0, y0 = -h / 2.0, x1 = 0, y1 = b / 2.0, x2 = b / 2.0, y2 = -h / 2.0, rotation = rotation + 180, x_translate = -x_translate, y_translate = -y_translate)?; + }, + ConstructShapes::Circle => { + let r = rng.gen_range(10.0, 20.0); + write!(&mut svg, "", + fill = colour, r = r, x = x_translate, y = y_translate)?; + write!(&mut svg, "", + fill = colour, r = r, x = -x_translate, y = -y_translate)?; + }, + ConstructShapes::Line => { + let width = rng.gen_range(2.0, 8.0); + let height = rng.gen_range(20.0, 50.0); + write!(&mut svg, "", + fill = colour, x = width / 2.0, y = height / 2.0, width = width, height = height, x_t = x_translate, y_t = y_translate, rotation = rotation)?; + write!(&mut svg, "", + fill = colour, x = width / 2.0, y = height / 2.0, width = width, height = height, x_t = -x_translate, y_t = -y_translate, rotation = rotation)?; + }, + ConstructShapes::V => { + let h = rng.gen_range(20.0, 50.0); + let b = rng.gen_range(20.0, 50.0); + let width = rng.gen_range(2.0, 8.0); + + write!(&mut svg, "", + fill = colour, width = width, x = -b / 2.0, y = h / 2.0, x0 = -b / 2.0, y0 = -h / 2.0, x1 = 0, y1 = b / 2.0, x2 = b / 2.0, y2 = -h / 2.0, rotation = rotation, x_translate = x_translate, y_translate = y_translate)?; + write!(&mut svg, "", + fill = colour, width = width, x = -b / 2.0, y = h / 2.0, x0 = -b / 2.0, y0 = -h / 2.0, x1 = 0, y1 = b / 2.0, x2 = b / 2.0, y2 = -h / 2.0, rotation = rotation + 180, x_translate = -x_translate, y_translate = -y_translate)?; + }, + ConstructShapes::Tri => { }, - ConstructShape::Circle => { - - }, - ConstructShape::Line => { - - }, - ConstructShape::V => { - - }, - ConstructShape::Tri => { - - }, - ConstructShape::Plus => { - - }, - ConstructShape::Blank => { + ConstructShapes::Plus => { }, + ConstructShapes::Blank => (), } } @@ -214,9 +235,9 @@ mod tests { // } #[test] - fn construct_img_test() { + fn shapes_img_test() { for i in 0..100 { - construct(Uuid::new_v4()).unwrap(); + shapes_write(Uuid::new_v4()).unwrap(); } } } diff --git a/server/src/mtx.rs b/server/src/mtx.rs index e71a481b..4a28dc6b 100644 --- a/server/src/mtx.rs +++ b/server/src/mtx.rs @@ -14,8 +14,9 @@ use construct::{Construct, construct_select, construct_write, construct_spawn}; use names::{name as generate_name}; use img; -pub const FREE_MTX: [MtxVariant; 1] = [ +pub const FREE_MTX: [MtxVariant; 2] = [ MtxVariant::Rename, + MtxVariant::Shapes, ]; pub const SHOP_LISTINGS: [Listing; 2] = [ @@ -44,6 +45,7 @@ pub enum MtxVariant { Rename, Molecular, Invader, + Shapes, } impl MtxVariant { @@ -152,9 +154,11 @@ pub fn apply(tx: &mut Transaction, account: &Account, variant: MtxVariant, const MtxVariant::Rename => construct.new_name(name), _ => construct.new_img(), }; + match mtx.variant { MtxVariant::Invader => img::invader_write(construct.img)?, MtxVariant::Molecular => img::molecular_write(construct.img)?, + MtxVariant::Shapes => img::shapes_write(construct.img)?, _ => construct.img, }; From 443d39725f4986fb9862b574d51ba54768f2291f Mon Sep 17 00:00:00 2001 From: ntr Date: Sat, 14 Sep 2019 19:46:14 +1000 Subject: [PATCH 2/5] shapes migration --- ops/knexfile.SAMPLE.js | 12 ++--------- ops/migrations/20190914191207_shapes-mtx.js | 11 ++++++++++ ops/package.json | 2 +- server/src/construct.rs | 2 +- server/src/img.rs | 23 ++++++++++++++------- server/src/instance.rs | 6 +++--- server/src/mtx.rs | 1 + 7 files changed, 35 insertions(+), 22 deletions(-) create mode 100644 ops/migrations/20190914191207_shapes-mtx.js diff --git a/ops/knexfile.SAMPLE.js b/ops/knexfile.SAMPLE.js index 9004afd4..32cf7b5b 100644 --- a/ops/knexfile.SAMPLE.js +++ b/ops/knexfile.SAMPLE.js @@ -1,11 +1,9 @@ -// Update with your config settings. - -const local = { +module.exports = { client: 'postgresql', connection: { database: 'mnml', user: 'mnml', - password: process.env.MNML_PG_PASSWORD, + password: 'gggggggggg', }, pool: { min: 2, @@ -15,9 +13,3 @@ const local = { tableName: 'knex_migrations' } }; - - -module.exports = { - development: local, - production: local, -}; diff --git a/ops/migrations/20190914191207_shapes-mtx.js b/ops/migrations/20190914191207_shapes-mtx.js new file mode 100644 index 00000000..4d7f5e3c --- /dev/null +++ b/ops/migrations/20190914191207_shapes-mtx.js @@ -0,0 +1,11 @@ +const uuidv4 = require('uuid/v4'); + +// give everybody the shapes mtx +exports.up = async knex => { + await knex.raw(` + INSERT INTO mtx (id, account, variant) + SELECT uuid_generate_v4() as id, id as account, 'Shapes' + FROM accounts; + `); +}; +exports.down = async () => {}; \ No newline at end of file diff --git a/ops/package.json b/ops/package.json index 805c3f1a..098d9a1a 100755 --- a/ops/package.json +++ b/ops/package.json @@ -17,6 +17,6 @@ "pg": "^7.4.3", "request": "^2.88.0", "sdftosvg": "0.0.4", - "uuid": "^3.3.2" + "uuid": "^3.3.3" } } diff --git a/server/src/construct.rs b/server/src/construct.rs index c7a4f35c..2d0e4fe8 100644 --- a/server/src/construct.rs +++ b/server/src/construct.rs @@ -891,7 +891,7 @@ pub fn construct_spawn(tx: &mut Transaction, account: Uuid, name: String, team: let _returned = result.iter().next().ok_or(err_msg("no row returned"))?; - img::molecular_write(construct.img)?; + img::shapes_write(construct.img)?; info!("spawned construct account={:} name={:?}", account, construct.name); return Ok(construct); diff --git a/server/src/img.rs b/server/src/img.rs index acd5ca69..87f2e732 100644 --- a/server/src/img.rs +++ b/server/src/img.rs @@ -102,8 +102,8 @@ pub fn shapes_write(id: Uuid) -> Result { // distribution for lightness // bellcurve around 75% - let l_dist = Normal::new(70.0, 10.0); - let s_dist = Normal::new(25.0, 10.0); + let l_dist = Normal::new(50.0, 10.0); + let s_dist = Normal::new(75.0, 10.0); // 8 6 or 4 points in shape // 1 head point @@ -123,17 +123,27 @@ pub fn shapes_write(id: Uuid) -> Result { ]; let shape_dist = WeightedIndex::new(shapes.iter().map(|v| v.1))?; - let n_shapes = rng.gen_range(4, 5); - let n_shapes = 4; + let n_shapes_items = [ + (2, 1), + (3, 5), + (4, 10), + (5, 10), + ]; + let num_dist = WeightedIndex::new(n_shapes_items.iter().map(|v| v.1))?; + let n_shapes = num_dist.sample(&mut rng) as usize; write!(&mut svg, "")?; - for i in 0..n_shapes { + for i in 0..n_shapes + 1 { let h = rng.gen_range(0, 360); let s = s_dist.sample(&mut rng) as usize; let l = l_dist.sample(&mut rng) as usize; let colour = format!("hsl({:}, {:}%, {:}%)", h, s, l); - let scalar = rng.gen_range(50.0, 200.0); + let scalar = match i == n_shapes { + true => 0.0, + false => rng.gen_range(50.0, 200.0), + }; + let rotation = rng.gen_range(0, 180); let angle: f64 = i as f64 * (1.0 / n_shapes as f64) * f64::consts::PI; let x_translate = angle.cos() * scalar; @@ -193,7 +203,6 @@ pub fn shapes_write(id: Uuid) -> Result { write!(&mut svg, "")?; let dest = format!("/var/lib/mnml/public/imgs/{}.svg", id); - println!("default dest={:?}", dest); let mut file = File::create(dest)?; file.write_all(&svg)?; diff --git a/server/src/instance.rs b/server/src/instance.rs index 4f8d8804..0d230dbf 100644 --- a/server/src/instance.rs +++ b/server/src/instance.rs @@ -712,7 +712,7 @@ pub fn instance_practice(tx: &mut Transaction, account: &Account) -> Result Result, Error> { // generate bot imgs for the client to see for c in bot.constructs.iter() { - img::molecular_write(c.img)?; + img::shapes_write(c.img)?; }; let bot2 = bot_player(); // generate bot imgs for the client to see for c in bot2.constructs.iter() { - img::molecular_write(c.img)?; + img::shapes_write(c.img)?; }; diff --git a/server/src/mtx.rs b/server/src/mtx.rs index 4a28dc6b..3352d100 100644 --- a/server/src/mtx.rs +++ b/server/src/mtx.rs @@ -63,6 +63,7 @@ impl TryFrom for MtxVariant { "Rename" => Ok(MtxVariant::Rename), "Molecular" => Ok(MtxVariant::Molecular), "Invader" => Ok(MtxVariant::Invader), + "Shapes" => Ok(MtxVariant::Shapes), _ => Err(format_err!("mtx variant not found variant={:?}", v)), } } From 64dc9001c7f12d58c83fd0edb296d93e2726a6a2 Mon Sep 17 00:00:00 2001 From: ntr Date: Sat, 14 Sep 2019 19:47:04 +1000 Subject: [PATCH 3/5] v1.4.4 --- VERSION | 2 +- acp/package.json | 2 +- client/package.json | 2 +- ops/package.json | 2 +- server/Cargo.toml | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/VERSION b/VERSION index 3c80e4f0..e1df5de7 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -1.4.3 \ No newline at end of file +1.4.4 \ No newline at end of file diff --git a/acp/package.json b/acp/package.json index f7b4ba07..da7908ae 100644 --- a/acp/package.json +++ b/acp/package.json @@ -1,6 +1,6 @@ { "name": "mnml-client", - "version": "1.4.3", + "version": "1.4.4", "description": "", "main": "index.js", "scripts": { diff --git a/client/package.json b/client/package.json index 081153f9..2897558c 100644 --- a/client/package.json +++ b/client/package.json @@ -1,6 +1,6 @@ { "name": "mnml-client", - "version": "1.4.3", + "version": "1.4.4", "description": "", "main": "index.js", "scripts": { diff --git a/ops/package.json b/ops/package.json index 098d9a1a..642d45e1 100755 --- a/ops/package.json +++ b/ops/package.json @@ -1,6 +1,6 @@ { "name": "mnml-ops", - "version": "1.4.3", + "version": "1.4.4", "description": "", "main": "index.js", "scripts": { diff --git a/server/Cargo.toml b/server/Cargo.toml index 0a21651d..67096284 100644 --- a/server/Cargo.toml +++ b/server/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "mnml" -version = "1.4.3" +version = "1.4.4" authors = ["ntr "] [dependencies] From 6b545fd2c599c388779a60ed788106d22c2954b5 Mon Sep 17 00:00:00 2001 From: ntr Date: Sat, 14 Sep 2019 20:26:38 +1000 Subject: [PATCH 4/5] worklog --- WORKLOG.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/WORKLOG.md b/WORKLOG.md index 03ff4cbc..298e6f99 100644 --- a/WORKLOG.md +++ b/WORKLOG.md @@ -9,17 +9,19 @@ * treats * constructs jiggle when clicked + * client animation bpm * background colour changes depending on time of day * hit animation wobble * combat text scale + translate * susbcriber gold name in instance * bot game grind -* stress test * msg pane * game invites +* audio + ## SOON *SERVER* * modules From 8b1ddbc57e5d101b4d755c844ecc4a01d5604d98 Mon Sep 17 00:00:00 2001 From: ntr Date: Sat, 14 Sep 2019 23:51:29 +1000 Subject: [PATCH 5/5] fix shapes img --- server/src/img.rs | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/server/src/img.rs b/server/src/img.rs index 87f2e732..e3584c20 100644 --- a/server/src/img.rs +++ b/server/src/img.rs @@ -62,7 +62,7 @@ pub fn invader_write(id: Uuid) -> Result { ]; let colour_dist = WeightedIndex::new(&weights)?; - write!(&mut svg, "")?; + write!(&mut svg, "")?; for i in 0..50 { let x = (i % 5) * 50; let y = (i / 5) * 50; @@ -103,7 +103,7 @@ pub fn shapes_write(id: Uuid) -> Result { // distribution for lightness // bellcurve around 75% let l_dist = Normal::new(50.0, 10.0); - let s_dist = Normal::new(75.0, 10.0); + let s_dist = Normal::new(50.0, 20.0); // 8 6 or 4 points in shape // 1 head point @@ -124,7 +124,8 @@ pub fn shapes_write(id: Uuid) -> Result { let shape_dist = WeightedIndex::new(shapes.iter().map(|v| v.1))?; let n_shapes_items = [ - (2, 1), + (1, 1), + (2, 2), (3, 5), (4, 10), (5, 10), @@ -132,7 +133,7 @@ pub fn shapes_write(id: Uuid) -> Result { let num_dist = WeightedIndex::new(n_shapes_items.iter().map(|v| v.1))?; let n_shapes = num_dist.sample(&mut rng) as usize; - write!(&mut svg, "")?; + write!(&mut svg, "")?; for i in 0..n_shapes + 1 { let h = rng.gen_range(0, 360); let s = s_dist.sample(&mut rng) as usize; @@ -203,6 +204,7 @@ pub fn shapes_write(id: Uuid) -> Result { 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)?;