doors render when they've been revealed
This commit is contained in:
parent
ab5797078c
commit
72bd7558fa
2 changed files with 19 additions and 3 deletions
20
src/main.rs
20
src/main.rs
|
|
@ -1,7 +1,7 @@
|
||||||
use rltk::{GameState, Point, RandomNumberGenerator, Rltk, RGB};
|
use rltk::{GameState, Point, RandomNumberGenerator, Rltk, RGB};
|
||||||
use specs::prelude::*;
|
use specs::prelude::*;
|
||||||
use specs::saveload::{SimpleMarker, SimpleMarkerAllocator};
|
use specs::saveload::{SimpleMarker, SimpleMarkerAllocator};
|
||||||
use std::ops::Add;
|
use std::ops::{Add, Mul};
|
||||||
extern crate serde;
|
extern crate serde;
|
||||||
|
|
||||||
mod components;
|
mod components;
|
||||||
|
|
@ -254,6 +254,7 @@ impl GameState for State {
|
||||||
let renderables = self.ecs.read_storage::<Renderable>();
|
let renderables = self.ecs.read_storage::<Renderable>();
|
||||||
let minds = self.ecs.read_storage::<Mind>();
|
let minds = self.ecs.read_storage::<Mind>();
|
||||||
let hidden = self.ecs.read_storage::<Hidden>();
|
let hidden = self.ecs.read_storage::<Hidden>();
|
||||||
|
let doors = self.ecs.write_storage::<Door>();
|
||||||
let map = self.ecs.fetch::<Map>();
|
let map = self.ecs.fetch::<Map>();
|
||||||
let entities = self.ecs.entities();
|
let entities = self.ecs.entities();
|
||||||
|
|
||||||
|
|
@ -262,19 +263,34 @@ impl GameState for State {
|
||||||
for (pos, render, ent, _hidden) in data.iter() {
|
for (pos, render, ent, _hidden) in data.iter() {
|
||||||
let idx = map.xy_idx(pos.x, pos.y);
|
let idx = map.xy_idx(pos.x, pos.y);
|
||||||
let offsets = RGB::from_u8(map.red_offset[idx], map.green_offset[idx], map.blue_offset[idx]);
|
let offsets = RGB::from_u8(map.red_offset[idx], map.green_offset[idx], map.blue_offset[idx]);
|
||||||
|
let mut fg = render.fg;
|
||||||
let mut bg = render.bg.add(RGB::from_u8(26, 45, 45)).add(offsets);
|
let mut bg = render.bg.add(RGB::from_u8(26, 45, 45)).add(offsets);
|
||||||
|
// Get bloodstain colours
|
||||||
if map.bloodstains.contains(&idx) {
|
if map.bloodstains.contains(&idx) {
|
||||||
bg = bg.add(RGB::from_f32(0.6, 0., 0.));
|
bg = bg.add(RGB::from_f32(0.6, 0., 0.));
|
||||||
}
|
}
|
||||||
|
// Draw entities on visible tiles
|
||||||
if map.visible_tiles[idx] {
|
if map.visible_tiles[idx] {
|
||||||
ctx.set(pos.x, pos.y, render.fg, bg, render.glyph);
|
ctx.set(pos.x, pos.y, fg, bg, render.glyph);
|
||||||
}
|
}
|
||||||
|
// Draw entities with minds within telepath range
|
||||||
if map.telepath_tiles[idx] {
|
if map.telepath_tiles[idx] {
|
||||||
let has_mind = minds.get(*ent);
|
let has_mind = minds.get(*ent);
|
||||||
if let Some(_) = has_mind {
|
if let Some(_) = has_mind {
|
||||||
ctx.set(pos.x, pos.y, render.fg, RGB::named(rltk::BLACK), render.glyph);
|
ctx.set(pos.x, pos.y, render.fg, RGB::named(rltk::BLACK), render.glyph);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// Draw all doors
|
||||||
|
let is_door = doors.get(*ent);
|
||||||
|
if let Some(_) = is_door {
|
||||||
|
if map.revealed_tiles[idx] {
|
||||||
|
if !map.visible_tiles[idx] {
|
||||||
|
fg = fg.mul(0.6);
|
||||||
|
bg = bg.mul(0.6);
|
||||||
|
}
|
||||||
|
ctx.set(pos.x, pos.y, fg, bg, render.glyph);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
gui::draw_ui(&self.ecs, ctx);
|
gui::draw_ui(&self.ecs, ctx);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -235,7 +235,7 @@ fn door(ecs: &mut World, x: i32, y: i32) {
|
||||||
.with(Position { x, y })
|
.with(Position { x, y })
|
||||||
.with(Renderable {
|
.with(Renderable {
|
||||||
glyph: rltk::to_cp437('+'),
|
glyph: rltk::to_cp437('+'),
|
||||||
fg: RGB::named(rltk::LIGHTYELLOW),
|
fg: RGB::from_f32(0., 1., 1.), // Same colour as stairs, should probably define this somewhere.
|
||||||
bg: RGB::named(rltk::BLACK),
|
bg: RGB::named(rltk::BLACK),
|
||||||
render_order: 2,
|
render_order: 2,
|
||||||
})
|
})
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue