Browse Source

Extract map

master
Garrit Franke 3 years ago
parent
commit
9ee1064126
  1. 41
      src/main.rs
  2. 22
      src/map.rs

41
src/main.rs

@ -4,54 +4,29 @@
//////////////////////////////////////////////////////////////
rltk::add_wasm_support!();
mod map;
use map::TileType;
use rltk::prelude::*;
#[derive(PartialEq, Copy, Clone)]
enum TileType {
Wall,
Floor,
}
// Just like example 3, but we're adding an additional vector: visible
struct State {
map: Vec<TileType>,
map: Vec<map::TileType>,
world_pos: (i32, i32),
player_position: usize,
visible: Vec<bool>,
}
impl State {
pub fn new() -> State {
let seed = RandomNumberGenerator::new().rand::<u64>();
// Same as example 3, but we've added the visible tiles
let mut state = State {
map: vec![TileType::Floor; 80 * 50],
let state = State {
world_pos: (0, 0),
map: map::new_chunk(seed),
player_position: (25 * 80) + 40, // Equivalent to point2d_to_index(40, 25) but we haven't initialized it yet
visible: vec![false; 80 * 50],
};
for x in 0..80 {
let wall1_pos = state.point2d_to_index(Point::new(x, 0));
let wall2_pos = state.point2d_to_index(Point::new(x, 49));
state.map[wall1_pos] = TileType::Wall;
state.map[wall2_pos] = TileType::Wall;
}
for y in 0..50 {
let wall1_pos = state.point2d_to_index(Point::new(0, y));
let wall2_pos = state.point2d_to_index(Point::new(79, y));
state.map[wall1_pos] = TileType::Wall;
state.map[wall2_pos] = TileType::Wall;
}
let mut rng = RandomNumberGenerator::new();
for _ in 0..400 {
let x = rng.range(1, 79);
let y = rng.range(1, 49);
let idx = state.point2d_to_index(Point::new(x, y));
if state.player_position != idx {
state.map[idx] = TileType::Wall;
}
}
state
}

22
src/map.rs

@ -0,0 +1,22 @@
use rltk::RandomNumberGenerator;
#[derive(PartialEq, Copy, Clone)]
pub enum TileType {
Wall,
Floor,
}
pub fn new_chunk(seed: u64) -> Vec<TileType> {
let mut map = vec![TileType::Floor; 80 * 50];
let count = map.len();
// TODO: Lift seed to game state and pass to this method
let mut rng = RandomNumberGenerator::seeded(seed);
// Place obstacles
for _ in 0..20 {
map[rng.range(0, count)] = TileType::Wall;
}
map
}
Loading…
Cancel
Save