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" ...@@ -51,7 +51,7 @@ version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3f2a05fd1bd10b2527e20a2cd32d8873d115b8b39fe219ee25f42a8aca6ba278" checksum = "3f2a05fd1bd10b2527e20a2cd32d8873d115b8b39fe219ee25f42a8aca6ba278"
dependencies = [ dependencies = [
"num-traits", "num-traits 0.2.14",
] ]
[[package]] [[package]]
...@@ -198,7 +198,7 @@ dependencies = [ ...@@ -198,7 +198,7 @@ dependencies = [
"coreaudio-rs", "coreaudio-rs",
"lazy_static", "lazy_static",
"libc", "libc",
"num-traits", "num-traits 0.2.14",
"stdweb", "stdweb",
"thiserror", "thiserror",
"winapi", "winapi",
...@@ -280,9 +280,15 @@ version = "0.22.3" ...@@ -280,9 +280,15 @@ version = "0.22.3"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "536d206ede9fae5a338a1576623b04fd2459f6086e551d374ebf10e9b78bb4df" checksum = "536d206ede9fae5a338a1576623b04fd2459f6086e551d374ebf10e9b78bb4df"
dependencies = [ 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]] [[package]]
name = "fuchsia-cprng" name = "fuchsia-cprng"
version = "0.1.1" version = "0.1.1"
...@@ -365,10 +371,19 @@ dependencies = [ ...@@ -365,10 +371,19 @@ dependencies = [
"jpeg-decoder", "jpeg-decoder",
"num-iter", "num-iter",
"num-rational", "num-rational",
"num-traits", "num-traits 0.2.14",
"png", "png",
] ]
[[package]]
name = "itertools"
version = "0.7.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0d47946d458e94a1b7bcabbf6521ea7c037062c81f534615abcad76e84d4970d"
dependencies = [
"either",
]
[[package]] [[package]]
name = "jpeg-decoder" name = "jpeg-decoder"
version = "0.1.22" version = "0.1.22"
...@@ -443,7 +458,7 @@ checksum = "edb987cd391542608ca8d43c0cd5ec44ebe4a0957eb89769a316c99d7fe14537" ...@@ -443,7 +458,7 @@ checksum = "edb987cd391542608ca8d43c0cd5ec44ebe4a0957eb89769a316c99d7fe14537"
dependencies = [ dependencies = [
"arrayvec", "arrayvec",
"euclid", "euclid",
"num-traits", "num-traits 0.2.14",
] ]
[[package]] [[package]]
...@@ -475,6 +490,15 @@ dependencies = [ ...@@ -475,6 +490,15 @@ dependencies = [
"libc", "libc",
] ]
[[package]]
name = "matrixmultiply"
version = "0.1.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dcad67dcec2d58ff56f6292582377e6921afdf3bfbd533e26fb8900ae575e002"
dependencies = [
"rawpointer",
]
[[package]] [[package]]
name = "memchr" name = "memchr"
version = "2.4.0" version = "2.4.0"
...@@ -518,6 +542,18 @@ dependencies = [ ...@@ -518,6 +542,18 @@ dependencies = [
"adler32", "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]] [[package]]
name = "nom" name = "nom"
version = "5.1.2" version = "5.1.2"
...@@ -528,6 +564,15 @@ dependencies = [ ...@@ -528,6 +564,15 @@ dependencies = [
"version_check", "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]] [[package]]
name = "num-integer" name = "num-integer"
version = "0.1.44" version = "0.1.44"
...@@ -535,7 +580,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" ...@@ -535,7 +580,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d2cc698a63b549a70bc047073d2949cce27cd1c7b0a4a862d08a8031bc2801db" checksum = "d2cc698a63b549a70bc047073d2949cce27cd1c7b0a4a862d08a8031bc2801db"
dependencies = [ dependencies = [
"autocfg", "autocfg",
"num-traits", "num-traits 0.2.14",
] ]
[[package]] [[package]]
...@@ -546,7 +591,7 @@ checksum = "b2021c8337a54d21aca0d59a92577a029af9431cb59b909b03252b9c164fad59" ...@@ -546,7 +591,7 @@ checksum = "b2021c8337a54d21aca0d59a92577a029af9431cb59b909b03252b9c164fad59"
dependencies = [ dependencies = [
"autocfg", "autocfg",
"num-integer", "num-integer",
"num-traits", "num-traits 0.2.14",
] ]
[[package]] [[package]]
...@@ -557,7 +602,16 @@ checksum = "12ac428b1cb17fce6f731001d307d351ec70a6d202fc2e60f7d4c5e42d8f4f07" ...@@ -557,7 +602,16 @@ checksum = "12ac428b1cb17fce6f731001d307d351ec70a6d202fc2e60f7d4c5e42d8f4f07"
dependencies = [ dependencies = [
"autocfg", "autocfg",
"num-integer", "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]] [[package]]
...@@ -603,6 +657,17 @@ dependencies = [ ...@@ -603,6 +657,17 @@ dependencies = [
"ttf-parser", "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]] [[package]]
name = "peeking_take_while" name = "peeking_take_while"
version = "0.1.2" version = "0.1.2"
...@@ -673,6 +738,12 @@ version = "0.4.2" ...@@ -673,6 +738,12 @@ version = "0.4.2"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9c33a3c44ca05fa6f1807d8e6743f3824e8509beca625669633be0acbdf509dc" checksum = "9c33a3c44ca05fa6f1807d8e6743f3824e8509beca625669633be0acbdf509dc"
[[package]]
name = "rawpointer"
version = "0.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ebac11a9d2e11f2af219b8b8d833b76b1ea0e054aa0e8d8e9e4cbde353bdf019"
[[package]] [[package]]
name = "rayon" name = "rayon"
version = "1.5.0" version = "1.5.0"
...@@ -745,6 +816,7 @@ dependencies = [ ...@@ -745,6 +816,7 @@ dependencies = [
name = "rusttest" name = "rusttest"
version = "0.1.0" version = "0.1.0"
dependencies = [ dependencies = [
"pathfinding",
"rand", "rand",
"tetra", "tetra",
] ]
...@@ -805,7 +877,7 @@ version = "0.6.1" ...@@ -805,7 +877,7 @@ version = "0.6.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bd5ac56c121948b4879bba9e519852c211bcdd8f014efff766441deff0b91bdb" checksum = "bd5ac56c121948b4879bba9e519852c211bcdd8f014efff766441deff0b91bdb"
dependencies = [ dependencies = [
"num-traits", "num-traits 0.2.14",
] ]
[[package]] [[package]]
...@@ -860,7 +932,7 @@ dependencies = [ ...@@ -860,7 +932,7 @@ dependencies = [
"hashbrown", "hashbrown",
"image", "image",
"lyon_tessellation", "lyon_tessellation",
"num-traits", "num-traits 0.2.14",
"rodio", "rodio",
"sdl2", "sdl2",
"vek", "vek",
...@@ -922,7 +994,7 @@ checksum = "a016e3cc1cffdb0af42d2a0a1b9483a0768e75ccbd4fc07c5d2439d434185617" ...@@ -922,7 +994,7 @@ checksum = "a016e3cc1cffdb0af42d2a0a1b9483a0768e75ccbd4fc07c5d2439d434185617"
dependencies = [ dependencies = [
"approx", "approx",
"num-integer", "num-integer",
"num-traits", "num-traits 0.2.14",
"rustc_version", "rustc_version",
"static_assertions", "static_assertions",
] ]
......
...@@ -9,3 +9,4 @@ edition = "2018" ...@@ -9,3 +9,4 @@ edition = "2018"
[dependencies] [dependencies]
tetra = "0.6" tetra = "0.6"
rand = "0.5.0" 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::config;
use crate::game_state::enemy::Enemy; use crate::game_state::enemy::Enemy;
use crate::game_state::tile::Tile; use crate::game_state::tile::Tile;
use rand::{thread_rng, Rng}; 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]; type Board = [[Tile; config::BOARD_HEIGHT]; config::BOARD_WIDTH];
...@@ -44,9 +54,10 @@ impl Level { ...@@ -44,9 +54,10 @@ impl Level {
// Board // Board
impl Level { impl Level {
fn create_board(enemy_count: usize) -> Board { fn create_board(enemy_count: usize) -> Board {
let board = [[Tile::Empty; config::BOARD_HEIGHT]; config::BOARD_WIDTH]; let board = [[Tile::Wall; config::BOARD_HEIGHT]; config::BOARD_WIDTH];
let with_walls = Level::add_walls(board); //let with_walls = Level::add_walls(board);
let with_player = Level::add_player(with_walls); 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); let with_enemies = Level::add_enemies(enemy_count, with_player);
return with_enemies; return with_enemies;
} }
...@@ -65,6 +76,15 @@ impl Level { ...@@ -65,6 +76,15 @@ impl Level {
board 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 { fn add_player(board: Board) -> Board {
Level::add_entity(Tile::Player, board) Level::add_entity(Tile::Player, board)
} }
...@@ -103,3 +123,122 @@ impl Level { ...@@ -103,3 +123,122 @@ impl Level {
result 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.
Please register or to comment