Add traps
This commit is contained in:
36
src/main.rs
36
src/main.rs
@@ -20,6 +20,7 @@ use crate::inventory_system::{
|
||||
ItemCollectionSystem, ItemDropSystem, ItemRemoveSystem, ItemUseSystem,
|
||||
};
|
||||
use crate::particle_system::ParticleSpawnSystem;
|
||||
use crate::trigger_system::TriggerSystem;
|
||||
|
||||
mod components;
|
||||
mod damage_system;
|
||||
@@ -36,10 +37,11 @@ mod particle_system;
|
||||
mod player;
|
||||
mod random_table;
|
||||
mod rect;
|
||||
mod rex_assets;
|
||||
mod save_load_system;
|
||||
mod spawner;
|
||||
mod visibility_system;
|
||||
mod rex_assets;
|
||||
mod trigger_system;
|
||||
|
||||
#[derive(PartialEq, Copy, Clone)]
|
||||
pub enum RunState {
|
||||
@@ -60,7 +62,9 @@ pub enum RunState {
|
||||
NextLevel,
|
||||
ShowRemoveItem,
|
||||
GameOver,
|
||||
MagicMapReveal { row: i32 },
|
||||
MagicMapReveal {
|
||||
row: i32,
|
||||
},
|
||||
}
|
||||
|
||||
pub struct State {
|
||||
@@ -210,6 +214,9 @@ impl State {
|
||||
let mut mob = MonsterAI {};
|
||||
mob.run_now(&self.ecs);
|
||||
|
||||
let mut trigger = TriggerSystem {};
|
||||
trigger.run_now(&self.ecs);
|
||||
|
||||
let mut map_index = MapIndexingSystem {};
|
||||
map_index.run_now(&self.ecs);
|
||||
|
||||
@@ -262,11 +269,14 @@ impl GameState for State {
|
||||
|
||||
let positions = self.ecs.read_storage::<Position>();
|
||||
let renderables = self.ecs.read_storage::<Renderable>();
|
||||
let hidden = self.ecs.read_storage::<Hidden>();
|
||||
let map = self.ecs.fetch::<Map>();
|
||||
|
||||
let mut data = (&positions, &renderables).join().collect::<Vec<_>>();
|
||||
let mut data = (&positions, &renderables, !&hidden)
|
||||
.join()
|
||||
.collect::<Vec<_>>();
|
||||
data.sort_by(|&a, &b| b.1.render_order.cmp(&a.1.render_order));
|
||||
for (pos, render) in data.iter() {
|
||||
for (pos, render, _hidden) in data.iter() {
|
||||
let idx = map.xy_idx(pos.x, pos.y);
|
||||
if map.visible_tiles[idx] {
|
||||
ctx.set(pos.x, pos.y, render.fg, render.bg, render.glyph)
|
||||
@@ -287,8 +297,12 @@ impl GameState for State {
|
||||
self.run_systems();
|
||||
new_run_state = RunState::MonsterTurn;
|
||||
match *self.ecs.fetch::<RunState>() {
|
||||
RunState::MagicMapReveal { .. } => { new_run_state = RunState::MagicMapReveal { row: 0 } }
|
||||
_ => { new_run_state = RunState::MonsterTurn; }
|
||||
RunState::MagicMapReveal { .. } => {
|
||||
new_run_state = RunState::MagicMapReveal { row: 0 }
|
||||
}
|
||||
_ => {
|
||||
new_run_state = RunState::MonsterTurn;
|
||||
}
|
||||
}
|
||||
}
|
||||
RunState::MonsterTurn => {
|
||||
@@ -422,9 +436,7 @@ impl GameState for State {
|
||||
}
|
||||
}
|
||||
}
|
||||
RunState::MagicMapReveal {
|
||||
row
|
||||
} => {
|
||||
RunState::MagicMapReveal { row } => {
|
||||
let mut map = self.ecs.fetch_mut::<Map>();
|
||||
for x in 0..MAP_WIDTH {
|
||||
let idx = map.xy_idx(x as i32, row);
|
||||
@@ -433,7 +445,7 @@ impl GameState for State {
|
||||
if row as usize == MAP_HEIGHT - 1 {
|
||||
new_run_state = RunState::MonsterTurn;
|
||||
} else {
|
||||
new_run_state = RunState::MagicMapReveal {row: row + 1}
|
||||
new_run_state = RunState::MagicMapReveal { row: row + 1 }
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -493,6 +505,10 @@ fn main() -> rltk::BError {
|
||||
gs.ecs.register::<Heals>();
|
||||
gs.ecs.register::<ProvidesFood>();
|
||||
gs.ecs.register::<MagicMapper>();
|
||||
gs.ecs.register::<Hidden>();
|
||||
gs.ecs.register::<EntryTrigger>();
|
||||
gs.ecs.register::<EntityMoved>();
|
||||
gs.ecs.register::<SingleActivation>();
|
||||
|
||||
gs.ecs.insert(SimpleMarkerAllocator::<SerializeMe>::new());
|
||||
|
||||
|
Reference in New Issue
Block a user