params for invaders
This commit is contained in:
parent
f0787fa3a8
commit
52b1e14541
@ -1,5 +1,7 @@
|
|||||||
use uuid::Uuid;
|
use uuid::Uuid;
|
||||||
use rand::prelude::*;
|
use rand::prelude::*;
|
||||||
|
use rand::distributions::{Normal, WeightedIndex};
|
||||||
|
|
||||||
use std::fs::copy;
|
use std::fs::copy;
|
||||||
use std::fs::File;
|
use std::fs::File;
|
||||||
use std::io::prelude::*;
|
use std::io::prelude::*;
|
||||||
@ -31,23 +33,49 @@ fn invader_img_write(id: Uuid) -> Result<Uuid, Error> {
|
|||||||
let mut rng = thread_rng();
|
let mut rng = thread_rng();
|
||||||
let mut svg = Vec::new();
|
let mut svg = Vec::new();
|
||||||
|
|
||||||
|
// rounding ?
|
||||||
|
// filters ?
|
||||||
|
|
||||||
|
// distribution for lightness
|
||||||
|
// bellcurve around 50%
|
||||||
|
let l_dist = Normal::new(50.0, 10.0);
|
||||||
|
let s_dist = Normal::new(25.0, 10.0);
|
||||||
|
|
||||||
|
let mut colours = std::iter
|
||||||
|
::repeat_with(|| {
|
||||||
|
let h = rng.gen_range(0, 360);
|
||||||
|
let s = s_dist.sample(&mut rng) as u16;
|
||||||
|
let l = l_dist.sample(&mut rng) as u16;
|
||||||
|
format!("hsl({:}, {:}%, {:}%)", h, s, l)
|
||||||
|
})
|
||||||
|
.take(3)
|
||||||
|
.collect::<Vec<String>>();
|
||||||
|
|
||||||
|
colours.push("none".to_string());
|
||||||
|
|
||||||
|
// add up to 100 for %
|
||||||
|
// [3] is the transparent colour
|
||||||
|
let weights = [
|
||||||
|
5,
|
||||||
|
5,
|
||||||
|
65,
|
||||||
|
25,
|
||||||
|
];
|
||||||
|
let colour_dist = WeightedIndex::new(&weights)?;
|
||||||
|
|
||||||
write!(&mut svg, "<svg xmlns='http://www.w3.org/2000/svg' version='1.1' viewBox='-250 -250 1000 1000' width='500' height='500'><g>")?;
|
write!(&mut svg, "<svg xmlns='http://www.w3.org/2000/svg' version='1.1' viewBox='-250 -250 1000 1000' width='500' height='500'><g>")?;
|
||||||
for i in 0..50 {
|
for i in 0..50 {
|
||||||
let x = (i % 5) * 50;
|
let x = (i % 5) * 50;
|
||||||
let y = (i / 5) * 50;
|
let y = (i / 5) * 50;
|
||||||
|
|
||||||
let colour = match rng.gen_bool(0.5) {
|
let colour = &colours[colour_dist.sample(&mut rng)];
|
||||||
true => "whitesmoke",
|
|
||||||
false => "none",
|
|
||||||
};
|
|
||||||
write!(&mut svg, "<rect fill=\"{}\" x=\"{}\" y=\"{}\" width=\"50\" height=\"50\" />", colour, x, y)?;
|
write!(&mut svg, "<rect fill=\"{}\" x=\"{}\" y=\"{}\" width=\"50\" height=\"50\" />", colour, x, y)?;
|
||||||
write!(&mut svg, "<rect fill=\"{}\" x=\"{}\" y=\"{}\" width=\"50\" height=\"50\" />", colour, 450 - x, y)?;
|
write!(&mut svg, "<rect fill=\"{}\" x=\"{}\" y=\"{}\" width=\"50\" height=\"50\" />", colour, 450 - x, y)?;
|
||||||
}
|
}
|
||||||
|
|
||||||
write!(&mut svg, "</g></svg>")?;
|
write!(&mut svg, "</g></svg>")?;
|
||||||
|
|
||||||
// println!("{:?}", String::from_utf8(svg.clone())?);
|
|
||||||
|
|
||||||
let dest = format!("/var/lib/mnml/public/imgs/{}.svg", id);
|
let dest = format!("/var/lib/mnml/public/imgs/{}.svg", id);
|
||||||
println!("molecule dest={:?}", dest);
|
println!("molecule dest={:?}", dest);
|
||||||
|
|
||||||
@ -64,7 +92,9 @@ mod tests {
|
|||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn invader_img_test() {
|
fn invader_img_test() {
|
||||||
invader_img_write(Uuid::new_v4()).unwrap();
|
for i in 0..100 {
|
||||||
|
invader_img_write(Uuid::new_v4()).unwrap();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -123,4 +153,50 @@ mod tests {
|
|||||||
// newOpts.spotcolor = opts.spotcolor || createColor();
|
// newOpts.spotcolor = opts.spotcolor || createColor();
|
||||||
|
|
||||||
// return newOpts;
|
// return newOpts;
|
||||||
// }
|
// }
|
||||||
|
// ],
|
||||||
|
// - _ => vec![
|
||||||
|
// - (ItemAction::RerollStamina, 1),
|
||||||
|
// - (ItemAction::RerollPhysDamage, 1),
|
||||||
|
// - (ItemAction::RerollSpellDamage, 1),
|
||||||
|
// - (ItemAction::RerollSpeed, 1),
|
||||||
|
// - (ItemAction::RerollArmour, 1),
|
||||||
|
// - (ItemAction::RerollSpellShield, 1),
|
||||||
|
// - (ItemAction::RerollEvasion, 1),
|
||||||
|
// - ],
|
||||||
|
// + // _ => vec![
|
||||||
|
// + // (ItemAction::RerollStamina, 1),
|
||||||
|
// + // (ItemAction::RerollPhysDamage, 1),
|
||||||
|
// + // (ItemAction::RerollSpellDamage, 1),
|
||||||
|
// + // (ItemAction::RerollSpeed, 1),
|
||||||
|
// + // (ItemAction::RerollArmour, 1),
|
||||||
|
// + // (ItemAction::RerollSpellShield, 1),
|
||||||
|
// + // (ItemAction::RerollEvasion, 1),
|
||||||
|
// + // ],
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
|
// -pub fn item_drop(tx: &mut Transaction, account_id: Uuid, mode: GameMode) -> Result<Item, Error> {
|
||||||
|
// +pub fn item_drop(tx: &mut Transaction, account_id: Uuid, mode: GameMode) -> Result<(), Error> {
|
||||||
|
// let mut rng = thread_rng();
|
||||||
|
|
||||||
|
// - let actions = mode_drops(mode);
|
||||||
|
// + let log_normal = LogNormal::new(1.0, 1.0);
|
||||||
|
// + let num_drops = log_normal.sample(&mut rng).floor() as u16;
|
||||||
|
// +
|
||||||
|
// + println!("{:?} drops", num_drops);
|
||||||
|
|
||||||
|
// - let dist = WeightedIndex::new(actions.iter().map(|item| item.1)).unwrap();
|
||||||
|
// - let kind = actions[dist.sample(&mut rng)].0;
|
||||||
|
// - let item = Item::new(kind, account_id);
|
||||||
|
// + for _i in 0..num_drops {
|
||||||
|
// + let actions = mode_drops(mode);
|
||||||
|
|
||||||
|
// - println!("{:?} dropped {:?}", account_id, item);
|
||||||
|
// + let dist = WeightedIndex::new(actions.iter().map(|item| item.1)).unwrap();
|
||||||
|
// + let kind = actions[dist.sample(&mut rng)].0;
|
||||||
|
// + let item = Item::new(kind, account_id);
|
||||||
|
|
||||||
|
// - return item_create(item, tx, account_id);
|
||||||
|
// + println!("{:?} dropped {:?}", account_id, item);
|
||||||
|
// + item_create(item, tx, account_id)?;V
|
||||||
Loading…
x
Reference in New Issue
Block a user