Avoid use of `thread_rng` outside of main

master
Alex Bethel 2022-01-15 14:57:24 -06:00
parent aa7361df6b
commit dd584d2d19
2 changed files with 7 additions and 6 deletions

View File

@ -1,7 +1,7 @@
use std::fmt::Display; use std::fmt::Display;
use pancurses::Window; use pancurses::Window;
use rand::{thread_rng, Rng}; use rand::Rng;
use specs::prelude::*; use specs::prelude::*;
use crate::{ use crate::{
@ -79,15 +79,15 @@ impl DungeonLevel {
} }
/// Creates a new level and registers it with the given world. /// Creates a new level and registers it with the given world.
pub fn generate_level(world: &mut World) -> LevelExits { pub fn generate_level(world: &mut World, rng: &mut impl Rng) -> LevelExits {
let level = rooms::generate_level(100, &mut thread_rng(), 1, 1); let level = rooms::generate_level(100, rng, 1, 1);
world.insert(level.clone()); // inefficient but whatever world.insert(level.clone()); // inefficient but whatever
// Spawn some zombies in the world. // Spawn some zombies in the world.
for _ in 0..20 { for _ in 0..20 {
let (x, y) = ( let (x, y) = (
thread_rng().gen_range(0..LEVEL_SIZE.0 as _), rng.gen_range(0..LEVEL_SIZE.0 as _),
thread_rng().gen_range(0..LEVEL_SIZE.1 as _), rng.gen_range(0..LEVEL_SIZE.1 as _),
); );
if level.tile(x, y).is_navigable() { if level.tile(x, y).is_navigable() {
world world

View File

@ -5,6 +5,7 @@ use level::DungeonLevel;
use pancurses::{endwin, initscr, noecho, Window}; use pancurses::{endwin, initscr, noecho, Window};
use player::player_turn; use player::player_turn;
use rand::thread_rng;
use specs::prelude::*; use specs::prelude::*;
use systems::{MobSystem, TimeSystem}; use systems::{MobSystem, TimeSystem};
@ -20,7 +21,7 @@ fn main() {
register_all(&mut world); register_all(&mut world);
let level = DungeonLevel::generate_level(&mut world); let level = DungeonLevel::generate_level(&mut world, &mut thread_rng());
let spawn_pos = level.upstairs[0]; let spawn_pos = level.upstairs[0];
world.insert(level); world.insert(level);