diff --git a/world/src/site2/plot/workshop.rs b/world/src/site2/plot/workshop.rs index 1568e9cf8f..f489d83d18 100644 --- a/world/src/site2/plot/workshop.rs +++ b/world/src/site2/plot/workshop.rs @@ -1,5 +1,8 @@ use super::*; -use crate::Land; +use crate::{ + util::{RandomField, Sampler}, + Land, +}; use common::terrain::{Block, BlockKind, SpriteKind}; use rand::prelude::*; use vek::*; @@ -108,62 +111,35 @@ impl Structure for Workshop { ); } } - let ( - crafting_bench_pos, - forge_pos, - spinning_wheel_pos, - cauldron_pos, - cooking_pot_pos, - tanning_rack_pos, - loom_pos, - anvil_pos, - dismantling_bench_pos, - ) = ( - Vec2::new(center.x + 3, center.y - 2).with_z(base), - Vec2::new(center.x + 3, center.y + 2).with_z(base), - Vec2::new(center.x - 3, center.y).with_z(base), - Vec2::new(center.x, center.y + 3).with_z(base), - Vec2::new(center.x, center.y - 3).with_z(base), - Vec2::new(center.x + 6, center.y).with_z(base), - Vec2::new(center.x - 6, center.y).with_z(base), - Vec2::new(center.x, center.y - 6).with_z(base), - Vec2::new(center.x, center.y + 6).with_z(base), - ); - /* - //painter-rng to randomize distribution - let ( - crafting_bench_pos, - forge_pos, - spinning_wheel_pos, - cauldron_pos, - cooking_pot_pos, - tanning_rack_pos, - loom_pos, - anvil_pos, - dismantling_bench_pos, - ) = [ - Vec2::new(center.x + 3, center.y - 2).with_z(base), - Vec2::new(center.x + 3, center.y + 2).with_z(base), - Vec2::new(center.x - 3, center.y).with_z(base), - Vec2::new(center.x, center.y + 3).with_z(base), - Vec2::new(center.x, center.y - 3).with_z(base), - Vec2::new(center.x + 6, center.y).with_z(base), - Vec2::new(center.x - 6, center.y).with_z(base), - Vec2::new(center.x, center.y - 6).with_z(base), - Vec2::new(center.x, center.y + 6).with_z(base), - ] - .choose_multiple(&mut rng, 9) - .collect_tuple() - .unwrap(); - */ - painter.sprite(crafting_bench_pos, SpriteKind::CraftingBench); - painter.sprite(forge_pos, SpriteKind::Forge); - painter.sprite(spinning_wheel_pos, SpriteKind::SpinningWheel); - painter.sprite(tanning_rack_pos, SpriteKind::TanningRack); - painter.sprite(cooking_pot_pos, SpriteKind::CookingPot); - painter.sprite(cauldron_pos, SpriteKind::Cauldron); - painter.sprite(loom_pos, SpriteKind::Loom); - painter.sprite(anvil_pos, SpriteKind::Anvil); - painter.sprite(dismantling_bench_pos, SpriteKind::DismantlingBench); + let positions = [ + Vec2::new(center.x + 3, center.y - 2), + Vec2::new(center.x + 3, center.y + 2), + Vec2::new(center.x - 3, center.y), + Vec2::new(center.x, center.y + 3), + Vec2::new(center.x, center.y - 3), + Vec2::new(center.x + 6, center.y), + Vec2::new(center.x - 6, center.y), + Vec2::new(center.x, center.y - 6), + Vec2::new(center.x, center.y + 6), + ]; + let mut stations = vec![ + SpriteKind::CraftingBench, + SpriteKind::Forge, + SpriteKind::SpinningWheel, + SpriteKind::TanningRack, + SpriteKind::CookingPot, + SpriteKind::Cauldron, + SpriteKind::Loom, + SpriteKind::Anvil, + SpriteKind::DismantlingBench, + ]; + if stations.len() == positions.len() { + for position in positions { + let cr_station = stations.swap_remove( + RandomField::new(0).get(position.with_z(base)) as usize % stations.len(), + ); + painter.sprite(position.with_z(base), cr_station); + } + } } }