aboutsummaryrefslogtreecommitdiff
path: root/src/world.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/world.rs')
-rw-r--r--src/world.rs77
1 files changed, 40 insertions, 37 deletions
diff --git a/src/world.rs b/src/world.rs
index 37eb8a3..507e6b8 100644
--- a/src/world.rs
+++ b/src/world.rs
@@ -1,5 +1,5 @@
use crate::entities::{Character, Enemy, Entity};
-use crate::tiling::{TileGrid, TileType, Tileable};
+use crate::tiling::{Tile, TileGrid, TileType, Tileable};
use rand::Rng;
use std::cmp::{min, PartialEq};
use std::fmt;
@@ -59,19 +59,19 @@ impl Tileable for Room {
// Set the walls
for x in self.start.0..=endx {
- grid.set_empty_tile(x, self.start.1, TileType::Wall);
- grid.set_empty_tile(x, endy, TileType::Wall);
+ grid.set_empty_tile(x, self.start.1, Tile::from(TileType::Wall));
+ grid.set_empty_tile(x, endy, Tile::from(TileType::Wall));
}
for y in self.start.1..endy {
- grid.set_empty_tile(self.start.0, y, TileType::Wall);
- grid.set_empty_tile(endx, y, TileType::Wall);
+ grid.set_empty_tile(self.start.0, y, Tile::from(TileType::Wall));
+ grid.set_empty_tile(endx, y, Tile::from(TileType::Wall));
}
// Fill the room
for x in (self.start.0 + 1)..endx {
for y in (self.start.1 + 1)..endy {
- grid.set_tile(x, y, TileType::Floor);
+ grid.set_tile(x, y, Tile::from(TileType::Floor));
}
}
@@ -176,34 +176,34 @@ impl Corridor {
let x = self.start.0;
let endy = self.start.1 + self.length;
for y in self.start.1..endy {
- grid.set_empty_tile(x - 1, y, TileType::Wall);
- grid.set_tile(x, y, TileType::Floor);
- grid.set_empty_tile(x + 1, y, TileType::Wall);
+ grid.set_empty_tile(x - 1, y, Tile::from(TileType::Wall));
+ grid.set_tile(x, y, Tile::from(TileType::Floor));
+ grid.set_empty_tile(x + 1, y, Tile::from(TileType::Wall));
}
// Wall ends
- grid.set_empty_tile(x - 1, self.start.1, TileType::Wall);
- grid.set_empty_tile(x, self.start.1, TileType::Wall);
- grid.set_empty_tile(x + 1, self.start.1, TileType::Wall);
- grid.set_empty_tile(x - 1, endy, TileType::Wall);
- grid.set_empty_tile(x, endy, TileType::Wall);
- grid.set_empty_tile(x + 1, endy, TileType::Wall);
+ grid.set_empty_tile(x - 1, self.start.1, Tile::from(TileType::Wall));
+ grid.set_empty_tile(x, self.start.1, Tile::from(TileType::Wall));
+ grid.set_empty_tile(x + 1, self.start.1, Tile::from(TileType::Wall));
+ grid.set_empty_tile(x - 1, endy, Tile::from(TileType::Wall));
+ grid.set_empty_tile(x, endy, Tile::from(TileType::Wall));
+ grid.set_empty_tile(x + 1, endy, Tile::from(TileType::Wall));
}
fn tile_horizontal(&self, grid: &mut TileGrid) {
let y = self.start.1;
let endx = self.start.0 + self.length;
for x in self.start.0..endx {
- grid.set_empty_tile(x, y - 1, TileType::Wall);
- grid.set_tile(x, y, TileType::Floor);
- grid.set_empty_tile(x, y + 1, TileType::Wall);
+ grid.set_empty_tile(x, y - 1, Tile::from(TileType::Wall));
+ grid.set_tile(x, y, Tile::from(TileType::Floor));
+ grid.set_empty_tile(x, y + 1, Tile::from(TileType::Wall));
}
// Wall ends
- grid.set_empty_tile(self.start.0, y - 1, TileType::Wall);
- grid.set_empty_tile(self.start.0, y, TileType::Wall);
- grid.set_empty_tile(self.start.0, y + 1, TileType::Wall);
- grid.set_empty_tile(endx, y - 1, TileType::Wall);
- grid.set_empty_tile(endx, y, TileType::Wall);
- grid.set_empty_tile(endx, y + 1, TileType::Wall);
+ grid.set_empty_tile(self.start.0, y - 1, Tile::from(TileType::Wall));
+ grid.set_empty_tile(self.start.0, y, Tile::from(TileType::Wall));
+ grid.set_empty_tile(self.start.0, y + 1, Tile::from(TileType::Wall));
+ grid.set_empty_tile(endx, y - 1, Tile::from(TileType::Wall));
+ grid.set_empty_tile(endx, y, Tile::from(TileType::Wall));
+ grid.set_empty_tile(endx, y + 1, Tile::from(TileType::Wall));
}
}
@@ -310,8 +310,8 @@ impl Level {
corridor.tile(&mut grid)?;
}
- grid.set_tile(self.entrance.0, self.entrance.1, TileType::StairsUp);
- grid.set_tile(self.exit.0, self.exit.1, TileType::StairsDown);
+ grid.set_tile(self.entrance.0, self.entrance.1, Tile::from(TileType::StairsUp));
+ grid.set_tile(self.exit.0, self.exit.1, Tile::from(TileType::StairsDown));
Ok(grid)
}
@@ -426,17 +426,20 @@ impl Generatable for Level {
let room = &self.rooms[rng.gen_range(0, self.rooms.len() - 1)];
// Create the enemy
- self.entities.push(Box::<Character>::new(Enemy::new(
- String::from("snake"),
- 2 * self.depth as i32,
- (2.0 * self.depth as f32 * 0.6).round() as i32,
- (20.0 * self.depth as f32 * 0.2).max(80.0).round() as i32,
- 0,
- (
- room.start.0 + rng.gen_range(0, room.width),
- room.start.1 + rng.gen_range(0, room.height),
- ),
- )));
+ self.entities.push(Box::<Character>::new(
+ Enemy::new(
+ String::from("snake"),
+ 2 * self.depth as i32,
+ (2.0 * self.depth as f32 * 0.6).round() as i32,
+ (20.0 * self.depth as f32 * 0.2).max(80.0).round() as i32,
+ 0,
+ (
+ room.start.0 + rng.gen_range(0, room.width),
+ room.start.1 + rng.gen_range(0, room.height),
+ ),
+ "s",
+ )
+ ));
}
}
}