Skip to content
Snippets Groups Projects
Commit 392098ed authored by radow's avatar radow
Browse files

rooms and most pathcarving done, not working

parent 392d1155
No related branches found
No related tags found
No related merge requests found
......@@ -51,7 +51,7 @@ version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3f2a05fd1bd10b2527e20a2cd32d8873d115b8b39fe219ee25f42a8aca6ba278"
dependencies = [
"num-traits",
"num-traits 0.2.14",
]
[[package]]
......@@ -198,7 +198,7 @@ dependencies = [
"coreaudio-rs",
"lazy_static",
"libc",
"num-traits",
"num-traits 0.2.14",
"stdweb",
"thiserror",
"winapi",
......@@ -280,9 +280,15 @@ version = "0.22.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "536d206ede9fae5a338a1576623b04fd2459f6086e551d374ebf10e9b78bb4df"
dependencies = [
"num-traits",
"num-traits 0.2.14",
]
[[package]]
name = "fixedbitset"
version = "0.1.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "86d4de0081402f5e88cdac65c8dcdcc73118c1a7a465e2a05f0da05843a8ea33"
[[package]]
name = "fuchsia-cprng"
version = "0.1.1"
......@@ -365,10 +371,19 @@ dependencies = [
"jpeg-decoder",
"num-iter",
"num-rational",
"num-traits",
"num-traits 0.2.14",
"png",
]
[[package]]
name = "itertools"
version = "0.7.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0d47946d458e94a1b7bcabbf6521ea7c037062c81f534615abcad76e84d4970d"
dependencies = [
"either",
]
[[package]]
name = "jpeg-decoder"
version = "0.1.22"
......@@ -443,7 +458,7 @@ checksum = "edb987cd391542608ca8d43c0cd5ec44ebe4a0957eb89769a316c99d7fe14537"
dependencies = [
"arrayvec",
"euclid",
"num-traits",
"num-traits 0.2.14",
]
[[package]]
......@@ -475,6 +490,15 @@ dependencies = [
"libc",
]
[[package]]
name = "matrixmultiply"
version = "0.1.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dcad67dcec2d58ff56f6292582377e6921afdf3bfbd533e26fb8900ae575e002"
dependencies = [
"rawpointer",
]
[[package]]
name = "memchr"
version = "2.4.0"
......@@ -518,6 +542,18 @@ dependencies = [
"adler32",
]
[[package]]
name = "ndarray"
version = "0.10.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "545bf78fe4fe823e05c3fa49d9669f45c1034a278b8d8b446767dffa32628db7"
dependencies = [
"itertools",
"matrixmultiply",
"num-complex",
"num-traits 0.1.43",
]
[[package]]
name = "nom"
version = "5.1.2"
......@@ -528,6 +564,15 @@ dependencies = [
"version_check",
]
[[package]]
name = "num-complex"
version = "0.1.43"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b288631d7878aaf59442cffd36910ea604ecd7745c36054328595114001c9656"
dependencies = [
"num-traits 0.2.14",
]
[[package]]
name = "num-integer"
version = "0.1.44"
......@@ -535,7 +580,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d2cc698a63b549a70bc047073d2949cce27cd1c7b0a4a862d08a8031bc2801db"
dependencies = [
"autocfg",
"num-traits",
"num-traits 0.2.14",
]
[[package]]
......@@ -546,7 +591,7 @@ checksum = "b2021c8337a54d21aca0d59a92577a029af9431cb59b909b03252b9c164fad59"
dependencies = [
"autocfg",
"num-integer",
"num-traits",
"num-traits 0.2.14",
]
[[package]]
......@@ -557,7 +602,16 @@ checksum = "12ac428b1cb17fce6f731001d307d351ec70a6d202fc2e60f7d4c5e42d8f4f07"
dependencies = [
"autocfg",
"num-integer",
"num-traits",
"num-traits 0.2.14",
]
[[package]]
name = "num-traits"
version = "0.1.43"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "92e5113e9fd4cc14ded8e499429f396a20f98c772a47cc8622a736e1ec843c31"
dependencies = [
"num-traits 0.2.14",
]
[[package]]
......@@ -603,6 +657,17 @@ dependencies = [
"ttf-parser",
]
[[package]]
name = "pathfinding"
version = "0.2.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a5f36f8620acbd680768c49e000a66977875c778de910708cf51edfdafb12634"
dependencies = [
"fixedbitset",
"ndarray",
"num-traits 0.1.43",
]
[[package]]
name = "peeking_take_while"
version = "0.1.2"
......@@ -673,6 +738,12 @@ version = "0.4.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9c33a3c44ca05fa6f1807d8e6743f3824e8509beca625669633be0acbdf509dc"
[[package]]
name = "rawpointer"
version = "0.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ebac11a9d2e11f2af219b8b8d833b76b1ea0e054aa0e8d8e9e4cbde353bdf019"
[[package]]
name = "rayon"
version = "1.5.0"
......@@ -745,6 +816,7 @@ dependencies = [
name = "rusttest"
version = "0.1.0"
dependencies = [
"pathfinding",
"rand",
"tetra",
]
......@@ -805,7 +877,7 @@ version = "0.6.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bd5ac56c121948b4879bba9e519852c211bcdd8f014efff766441deff0b91bdb"
dependencies = [
"num-traits",
"num-traits 0.2.14",
]
[[package]]
......@@ -860,7 +932,7 @@ dependencies = [
"hashbrown",
"image",
"lyon_tessellation",
"num-traits",
"num-traits 0.2.14",
"rodio",
"sdl2",
"vek",
......@@ -922,7 +994,7 @@ checksum = "a016e3cc1cffdb0af42d2a0a1b9483a0768e75ccbd4fc07c5d2439d434185617"
dependencies = [
"approx",
"num-integer",
"num-traits",
"num-traits 0.2.14",
"rustc_version",
"static_assertions",
]
......
......@@ -9,3 +9,4 @@ edition = "2018"
[dependencies]
tetra = "0.6"
rand = "0.5.0"
pathfinding = "0.2.2"
use pathfinding::astar;
use std::hash::{Hash, Hasher};
use std::cmp;
use std::cmp::Ordering;
use std::usize;
use crate::game_state::config;
use crate::game_state::enemy::Enemy;
use crate::game_state::tile::Tile;
use rand::{thread_rng, Rng};
use tetra::math::Vec2;
use super::config::BOARD_HEIGHT;
use super::config::BOARD_WIDTH;
type Board = [[Tile; config::BOARD_HEIGHT]; config::BOARD_WIDTH];
......@@ -44,9 +54,10 @@ impl Level {
// Board
impl Level {
fn create_board(enemy_count: usize) -> Board {
let board = [[Tile::Empty; config::BOARD_HEIGHT]; config::BOARD_WIDTH];
let with_walls = Level::add_walls(board);
let with_player = Level::add_player(with_walls);
let board = [[Tile::Wall; config::BOARD_HEIGHT]; config::BOARD_WIDTH];
//let with_walls = Level::add_walls(board);
let with_rooms = Level::add_rooms(board);
let with_player = Level::add_player(with_rooms);
let with_enemies = Level::add_enemies(enemy_count, with_player);
return with_enemies;
}
......@@ -65,6 +76,15 @@ impl Level {
board
}
fn add_rooms(board: Board) -> Board{
let mut board = board.clone();
for n in 0..config::ROOM_NUMBER{
let r = Room::new();
board = r.carve(board);
}
board
}
fn add_player(board: Board) -> Board {
Level::add_entity(Tile::Player, board)
}
......@@ -102,4 +122,123 @@ impl Level {
result
}
}
struct Room{
x:usize,
y:usize,
w:usize,
h:usize,
}
impl Room{
fn new() -> Room{
let x = thread_rng().gen_range(1, config::BOARD_WIDTH-2);
let y = thread_rng().gen_range(1, config::BOARD_HEIGHT-2);
let w = thread_rng().gen_range(1, cmp::min(6, BOARD_WIDTH-x));
let h = thread_rng().gen_range(1, cmp::min(6, BOARD_HEIGHT-y));
Room{x,y,w,h,}
}
fn carve(&self, board:Board)->Board{
let mut board = board.clone();
for x in self.x .. self.x+self.w{
for y in self.y .. self.y+self.h{
board[x][y] = Tile::Empty;
}
}
board
}
}
struct Path{
start: Vec2<usize>,
goal: Vec2<usize>,
}
impl Path{
fn new(start: Vec2<usize>, goal: Vec2<usize>) -> Path{
Path{start, goal}
}
fn carve(&self, board: Board)->Board{
let start: Node = Node::new(board, self.start);
let goal: Node = Node::new(board, self.goal);
let result = astar(&start, |p:Node|p.get_neighbours(), |p:Node|p.distance(&goal), |p:Node|p==goal);
}
}
#[derive(Clone, Debug)]
struct Node{
board:Board,
pos: Vec2<usize>,
}
impl Node{
fn new(board:Board, pos: Vec2<usize>)->Node{
Node{board, pos}
}
fn distance(&self, other: &Node)-> usize{
((self.pos.x as i32 - other.pos.x as i32).abs() + (self.pos.y as i32 -other.pos.y as i32).abs()) as usize
}
fn get_neighbours(&self)->Vec<(Node, usize)>{
let neighbours:Vec<(Node,usize)> = Vec::new();
if self.pos.x>0{
let newpos: Vec2<usize> = Vec2::new(self.pos.x-1,self.pos.y);
let tuple:(Node,usize) = (Node::new(self.board, newpos), Node::get_value(self.board, newpos));
neighbours.push(tuple);
}
if self.pos.x<config::BOARD_WIDTH{
let newpos: Vec2<usize> = Vec2::new(self.pos.x+1,self.pos.y);
let tuple:(Node,usize) = (Node::new(self.board, newpos), Node::get_value(self.board, newpos));
neighbours.push(tuple);
}
if self.pos.y>0{
let newpos: Vec2<usize> = Vec2::new(self.pos.x,self.pos.y-1);
let tuple:(Node,usize) = (Node::new(self.board, newpos), Node::get_value(self.board, newpos));
neighbours.push(tuple);
}
if self.pos.y<config::BOARD_HEIGHT{
let newpos: Vec2<usize> = Vec2::new(self.pos.x,self.pos.y+1);
let tuple:(Node,usize) = (Node::new(self.board, newpos), Node::get_value(self.board, newpos));
neighbours.push(tuple);
}
neighbours
}
fn get_value(board: Board, tile:Vec2<usize>)->usize{
let mut value:usize = 0;
match board[tile.x][tile.y] {
Tile::Empty => value = 1,
_ => value = 100,
}
value
}
}
impl PartialEq for Node {
fn eq(&self, other: &Self) -> bool {
self.pos == other.pos
}
}
impl Eq for Node {}
impl Ord for Node {
fn cmp(&self, other: &Self) -> Ordering {
self.pos.cmp(&other.pos)
}
}
impl PartialOrd for Node {
fn partial_cmp(&self, other: &Self) -> Option<Ordering> {
Some(self.cmp(other))
}
}
impl Hash for Node {
fn hash<H: Hasher>(&self, state: &mut H) {
self.pos.hash(state);
}
}
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment