Add traps

This commit is contained in:
2022-01-29 16:07:01 +01:00
parent 835a416013
commit 7c67291031
13 changed files with 213 additions and 42 deletions

View File

@@ -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());