lappy sync
This commit is contained in:
parent
419e16fb4d
commit
8eccea69f6
73
src/main.rs
73
src/main.rs
@ -34,6 +34,9 @@ pub use gui::*;
|
|||||||
mod gamelog;
|
mod gamelog;
|
||||||
pub use gamelog::*;
|
pub use gamelog::*;
|
||||||
|
|
||||||
|
mod spawner;
|
||||||
|
use spawner::*;
|
||||||
|
|
||||||
pub struct State {
|
pub struct State {
|
||||||
pub ecs: World
|
pub ecs: World
|
||||||
}
|
}
|
||||||
@ -128,73 +131,23 @@ fn main() -> rltk::BError {
|
|||||||
let (player_x, player_y) = map.rooms[0].center();
|
let (player_x, player_y) = map.rooms[0].center();
|
||||||
|
|
||||||
gs.ecs.insert(Point::new(player_x, player_y));
|
gs.ecs.insert(Point::new(player_x, player_y));
|
||||||
let player_entity = gs.ecs
|
let player_entity = spawner::player(&mut gs.ecs, player_x, player_y);
|
||||||
.create_entity()
|
|
||||||
.with(Position {
|
|
||||||
x: player_x,
|
|
||||||
y: player_y,
|
|
||||||
})
|
|
||||||
.with(Renderable {
|
|
||||||
glyph: rltk::to_cp437('@'),
|
|
||||||
fg: RGB::named(rltk::YELLOW),
|
|
||||||
bg: RGB::named(rltk::BLACK),
|
|
||||||
})
|
|
||||||
.with(Player {})
|
|
||||||
.with(Viewshed {
|
|
||||||
visible_tiles: Vec::new(),
|
|
||||||
range: 8,
|
|
||||||
dirty: true,
|
|
||||||
})
|
|
||||||
.with(Name {
|
|
||||||
name: "Player".to_string(),
|
|
||||||
})
|
|
||||||
.with(CombatStats{max_hp: 30, hp: 30, defence: 2, power: 5})
|
|
||||||
.build();
|
|
||||||
|
|
||||||
gs.ecs.insert(player_entity);
|
gs.ecs.insert(rltk::RandomNumberGenerator::new());
|
||||||
let mut rng = rltk::RandomNumberGenerator::new();
|
|
||||||
for (i, room) in map.rooms.iter().skip(1).enumerate() {
|
|
||||||
let (x, y) = room.center();
|
|
||||||
|
|
||||||
let glyph: rltk::FontCharType;
|
for room in map.rooms.iter().skip(1) {
|
||||||
let name: String;
|
let(x,y) = room.center();
|
||||||
let roll = rng.roll_dice(1, 2);
|
spawner::random_monster(&mut gs.ecs, x, y);
|
||||||
match roll {
|
|
||||||
1 => {
|
|
||||||
glyph = rltk::to_cp437('g');
|
|
||||||
name = "Goblin".to_string()
|
|
||||||
}
|
|
||||||
_ => {
|
|
||||||
glyph = rltk::to_cp437('o');
|
|
||||||
name = "Orc".to_string()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
gs.ecs
|
|
||||||
.create_entity()
|
|
||||||
.with(Position { x, y })
|
|
||||||
.with(Renderable {
|
|
||||||
glyph: glyph,
|
|
||||||
fg: RGB::named(rltk::RED),
|
|
||||||
bg: RGB::named(rltk::BLACK),
|
|
||||||
})
|
|
||||||
.with(Viewshed {
|
|
||||||
visible_tiles: Vec::new(),
|
|
||||||
range: 8,
|
|
||||||
dirty: true,
|
|
||||||
})
|
|
||||||
.with(Monster {})
|
|
||||||
.with(Name {
|
|
||||||
name: format!("{} #{}", &name, i),
|
|
||||||
})
|
|
||||||
.with(BlocksTile{})
|
|
||||||
.with(CombatStats{max_hp: 16, hp: 16, defence: 1, power: 4})
|
|
||||||
.build();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
gs.ecs.insert(map);
|
gs.ecs.insert(map);
|
||||||
|
gs.ecs.insert(player_entity);
|
||||||
gs.ecs.insert(RunState::PreRun);
|
gs.ecs.insert(RunState::PreRun);
|
||||||
gs.ecs.insert(gamelog::GameLog{ entries : vec!["Welcome to my rougelike".to_string()]});
|
gs.ecs.insert(gamelog::GameLog{ entries : vec!["Welcome to my rougelike".to_string()]});
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Main loop runner
|
// Main loop runner
|
||||||
rltk::main_loop(context, gs)
|
rltk::main_loop(context, gs)
|
||||||
}
|
}
|
||||||
|
|||||||
@ -3,9 +3,9 @@ use rltk::{Algorithm2D, BaseMap, Point, RandomNumberGenerator, Rltk, RGB};
|
|||||||
use specs::prelude::*;
|
use specs::prelude::*;
|
||||||
use std::cmp::{max, min};
|
use std::cmp::{max, min};
|
||||||
|
|
||||||
const MAPWIDTH : usize = 80;
|
pub const MAPWIDTH : usize = 80;
|
||||||
const MAPHIEGHT : usize = 43;
|
pub const MAPHIEGHT : usize = 43;
|
||||||
const MAPCOUNT : usize = MAPHIEGHT * MAPWIDTH;
|
pub const MAPCOUNT : usize = MAPHIEGHT * MAPWIDTH;
|
||||||
|
|
||||||
#[derive(PartialEq, Copy, Clone)]
|
#[derive(PartialEq, Copy, Clone)]
|
||||||
pub enum TileType {
|
pub enum TileType {
|
||||||
|
|||||||
58
src/spawner.rs
Normal file
58
src/spawner.rs
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
use rltk::{ RGB, RandomNumberGenerator };
|
||||||
|
use specs::prelude::*;
|
||||||
|
use super::{CombatStats, Player, Renderable, Name, Position, Viewshed, Monster, BlocksTile};
|
||||||
|
|
||||||
|
const MAX_MONSTERS : i32 = 4;
|
||||||
|
const MAX_ITEMS : i32 = 2;
|
||||||
|
|
||||||
|
// Spawns the player and returns his/her entity object.
|
||||||
|
pub fn player(ecs : &mut World, player_x : i32, player_y : i32) -> Entity {
|
||||||
|
ecs
|
||||||
|
.create_entity()
|
||||||
|
.with(Position{x: player_x, y: player_y})
|
||||||
|
.with(Renderable{
|
||||||
|
glyph: rltk::to_cp437('@'),
|
||||||
|
fg: RGB::named(rltk::YELLOW),
|
||||||
|
bg: RGB::named(rltk::BLACK),
|
||||||
|
})
|
||||||
|
.with(Player{})
|
||||||
|
.with(Viewshed{visible_tiles : Vec::new(), range: 8, dirty : true})
|
||||||
|
.with(Name{name: "Player".to_string()})
|
||||||
|
.with(CombatStats{ max_hp: 30, hp: 30, defence: 2, power: 5})
|
||||||
|
.build()
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn random_monster(ecs: &mut World, x: i32, y: i32) {
|
||||||
|
let roll :i32;
|
||||||
|
{
|
||||||
|
let mut rng = ecs.write_resource::<RandomNumberGenerator>();
|
||||||
|
roll = rng.roll_dice(1, 2);
|
||||||
|
}
|
||||||
|
match roll{
|
||||||
|
1 => { orc(ecs, x, y) }
|
||||||
|
_ => { goblin(ecs, x, y) }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn orc(ecs: &mut World, x: i32, y: i32) { monster(ecs, x, y, rltk::to_cp437('o'), "Orc"); }
|
||||||
|
fn goblin(ecs: &mut World, x: i32, y: i32) { monster(ecs, x, y, rltk::to_cp437('g'), "Goblin"); }
|
||||||
|
|
||||||
|
fn monster<S : ToString>(ecs: &mut World, x: i32, y: i32, glyph : rltk::FontCharType, name : S) {
|
||||||
|
ecs.create_entity()
|
||||||
|
.with(Position{x, y})
|
||||||
|
.with(Renderable{
|
||||||
|
glyph: glyph,
|
||||||
|
fg: RGB::named(rltk::RED),
|
||||||
|
bg: RGB::named(rltk::BLACK),
|
||||||
|
})
|
||||||
|
.with(Viewshed{ visible_tiles : Vec::new(), range: 8, dirty: true})
|
||||||
|
.with(Monster{})
|
||||||
|
.with(Name{ name: name.to_string()})
|
||||||
|
.with(BlocksTile{})
|
||||||
|
.with(CombatStats{ max_hp: 16, hp: 16, defence: 1, power: 4})
|
||||||
|
.build();
|
||||||
|
}
|
||||||
|
|
||||||
|
// https://bfnightly.bracketproductions.com/chapter_9.html
|
||||||
|
/// Still in spawner.rs, we create a new function - spawn_room that uses these constants
|
||||||
|
pub fn spawn_room()
|
||||||
Loading…
x
Reference in New Issue
Block a user