cleans up chatlog colours - renderables for non-item, beatitude for item
This commit is contained in:
parent
96e69d5c5e
commit
038e616500
8 changed files with 145 additions and 72 deletions
|
|
@ -22,7 +22,12 @@ pub fn get_local_desc(id: i32) -> String {
|
||||||
pub fn get_local_col(id: i32) -> RGB {
|
pub fn get_local_col(id: i32) -> RGB {
|
||||||
let col = match id {
|
let col = match id {
|
||||||
ID_TOWN => TO_TOWN_COLOUR,
|
ID_TOWN => TO_TOWN_COLOUR,
|
||||||
|
ID_OVERMAP => TO_OVERMAP_COLOUR,
|
||||||
_ => (255, 255, 255),
|
_ => (255, 255, 255),
|
||||||
};
|
};
|
||||||
return RGB::from_u8(col.0, col.1, col.2);
|
return RGB::from_u8(col.0, col.1, col.2);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn rgb_to_u8(col: RGB) -> (u8, u8, u8) {
|
||||||
|
return ((col.r * 255.0) as u8, (col.g * 255.0) as u8, (col.b * 255.0) as u8);
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -55,47 +55,4 @@ impl Logger {
|
||||||
pub fn log(self) {
|
pub fn log(self) {
|
||||||
return append_entry(self.fragments);
|
return append_entry(self.fragments);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Appends text in YELLOW to the current message logger.
|
|
||||||
#[allow(unused)]
|
|
||||||
pub fn npc_name<T: ToString>(mut self, text: T) -> Self {
|
|
||||||
let mut text_with_space = text.to_string();
|
|
||||||
text_with_space.push_str(" ");
|
|
||||||
self.fragments.push(LogFragment { colour: RGB::named(rltk::YELLOW), text: text_with_space });
|
|
||||||
return self;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Appends text in YELLOW to the current message logger, with no space.
|
|
||||||
pub fn npc_name_n<T: ToString>(mut self, text: T) -> Self {
|
|
||||||
self.fragments.push(LogFragment { colour: RGB::named(rltk::YELLOW), text: text.to_string() });
|
|
||||||
return self;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Appends text in CYAN to the current message logger.
|
|
||||||
pub fn item_name<T: ToString>(mut self, text: T) -> Self {
|
|
||||||
let mut text_with_space = text.to_string();
|
|
||||||
text_with_space.push_str(" ");
|
|
||||||
self.fragments.push(LogFragment { colour: RGB::named(rltk::CYAN), text: text_with_space });
|
|
||||||
return self;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Appends text in CYAN to the current message logger, with no space.
|
|
||||||
pub fn item_name_n<T: ToString>(mut self, text: T) -> Self {
|
|
||||||
self.fragments.push(LogFragment { colour: RGB::named(rltk::CYAN), text: text.to_string() });
|
|
||||||
return self;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Appends text in RED to the current message logger.
|
|
||||||
#[allow(dead_code)]
|
|
||||||
pub fn damage(mut self, damage: i32) -> Self {
|
|
||||||
self.fragments.push(LogFragment { colour: RGB::named(rltk::RED), text: format!("{} ", damage).to_string() });
|
|
||||||
return self;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Appends text in RED to the current message logger, with no space.
|
|
||||||
#[allow(dead_code)]
|
|
||||||
pub fn damage_n(mut self, damage: i32) -> Self {
|
|
||||||
self.fragments.push(LogFragment { colour: RGB::named(rltk::RED), text: format!("{}", damage).to_string() });
|
|
||||||
return self;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -599,6 +599,15 @@ pub fn renderable_colour(renderables: &ReadStorage<Renderable>, entity: Entity)
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Gets renderable colour as tuple of u8
|
||||||
|
pub fn renderable_colour_ecs(ecs: &World, entity: Entity) -> (u8, u8, u8) {
|
||||||
|
return if let Some(renderable) = ecs.read_storage::<Renderable>().get(entity) {
|
||||||
|
((renderable.fg.r * 255.0) as u8, (renderable.fg.g * 255.0) as u8, (renderable.fg.b * 255.0) as u8)
|
||||||
|
} else {
|
||||||
|
WHITE
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
pub fn item_colour_ecs(ecs: &World, item: Entity) -> (u8, u8, u8) {
|
pub fn item_colour_ecs(ecs: &World, item: Entity) -> (u8, u8, u8) {
|
||||||
if let Some(beatitude) = ecs.read_storage::<Beatitude>().get(item) {
|
if let Some(beatitude) = ecs.read_storage::<Beatitude>().get(item) {
|
||||||
if beatitude.known {
|
if beatitude.known {
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
use crate::{
|
use crate::{
|
||||||
gamelog,
|
gamelog,
|
||||||
gui::obfuscate_name,
|
gui::obfuscate_name,
|
||||||
|
gui::item_colour,
|
||||||
Beatitude,
|
Beatitude,
|
||||||
Charges,
|
Charges,
|
||||||
EquipmentChanged,
|
EquipmentChanged,
|
||||||
|
|
@ -11,6 +12,7 @@ use crate::{
|
||||||
ObfuscatedName,
|
ObfuscatedName,
|
||||||
Position,
|
Position,
|
||||||
WantsToPickupItem,
|
WantsToPickupItem,
|
||||||
|
Renderable,
|
||||||
};
|
};
|
||||||
use specs::prelude::*;
|
use specs::prelude::*;
|
||||||
use crate::data::messages;
|
use crate::data::messages;
|
||||||
|
|
@ -59,7 +61,8 @@ impl<'a> System<'a> for ItemCollectionSystem {
|
||||||
gamelog::Logger
|
gamelog::Logger
|
||||||
::new()
|
::new()
|
||||||
.append(messages::YOU_PICKUP_ITEM)
|
.append(messages::YOU_PICKUP_ITEM)
|
||||||
.item_name_n(
|
.colour(item_colour(pickup.item, &beatitudes))
|
||||||
|
.append_n(
|
||||||
format!(
|
format!(
|
||||||
"{}",
|
"{}",
|
||||||
obfuscate_name(
|
obfuscate_name(
|
||||||
|
|
@ -73,6 +76,7 @@ impl<'a> System<'a> for ItemCollectionSystem {
|
||||||
).0
|
).0
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
.colour(rltk::WHITE)
|
||||||
.period()
|
.period()
|
||||||
.log();
|
.log();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
use crate::{
|
use crate::{
|
||||||
gamelog,
|
gamelog,
|
||||||
gui::obfuscate_name,
|
gui::obfuscate_name,
|
||||||
|
gui::item_colour,
|
||||||
Beatitude,
|
Beatitude,
|
||||||
Charges,
|
Charges,
|
||||||
EquipmentChanged,
|
EquipmentChanged,
|
||||||
|
|
@ -67,7 +68,8 @@ impl<'a> System<'a> for ItemDropSystem {
|
||||||
gamelog::Logger
|
gamelog::Logger
|
||||||
::new()
|
::new()
|
||||||
.append(messages::YOU_DROP_ITEM)
|
.append(messages::YOU_DROP_ITEM)
|
||||||
.item_name_n(
|
.colour(item_colour(to_drop.item, &beatitudes))
|
||||||
|
.append_n(
|
||||||
format!(
|
format!(
|
||||||
"{}",
|
"{}",
|
||||||
obfuscate_name(
|
obfuscate_name(
|
||||||
|
|
@ -81,6 +83,7 @@ impl<'a> System<'a> for ItemDropSystem {
|
||||||
).0
|
).0
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
.colour(rltk::WHITE)
|
||||||
.period()
|
.period()
|
||||||
.log();
|
.log();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
12
src/main.rs
12
src/main.rs
|
|
@ -1,6 +1,7 @@
|
||||||
use rltk::{ GameState, Point, RandomNumberGenerator, Rltk };
|
use rltk::{ GameState, Point, RandomNumberGenerator, Rltk };
|
||||||
use specs::prelude::*;
|
use specs::prelude::*;
|
||||||
use specs::saveload::{ SimpleMarker, SimpleMarkerAllocator };
|
use specs::saveload::{ SimpleMarker, SimpleMarkerAllocator };
|
||||||
|
use crate::data::ids::*;
|
||||||
extern crate serde;
|
extern crate serde;
|
||||||
|
|
||||||
pub mod camera;
|
pub mod camera;
|
||||||
|
|
@ -175,7 +176,14 @@ impl State {
|
||||||
map::dungeon::freeze_entities(&mut self.ecs);
|
map::dungeon::freeze_entities(&mut self.ecs);
|
||||||
self.generate_world_map(id, dest_tile);
|
self.generate_world_map(id, dest_tile);
|
||||||
let mapname = self.ecs.fetch::<Map>().name.clone();
|
let mapname = self.ecs.fetch::<Map>().name.clone();
|
||||||
gamelog::Logger::new().append("You head to").npc_name_n(&mapname).period().log();
|
gamelog::Logger
|
||||||
|
::new()
|
||||||
|
.append("You head to")
|
||||||
|
.colour(rgb_to_u8(get_local_col(id)))
|
||||||
|
.append_n(&mapname)
|
||||||
|
.colour(rltk::WHITE)
|
||||||
|
.period()
|
||||||
|
.log();
|
||||||
gamelog::record_event(EVENT::CHANGED_FLOOR(mapname));
|
gamelog::record_event(EVENT::CHANGED_FLOOR(mapname));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -315,7 +323,7 @@ impl GameState for State {
|
||||||
let player = self.ecs.fetch::<Entity>();
|
let player = self.ecs.fetch::<Entity>();
|
||||||
let mut pools = self.ecs.write_storage::<Pools>();
|
let mut pools = self.ecs.write_storage::<Pools>();
|
||||||
let mut player_pools = pools.get_mut(*player).unwrap();
|
let mut player_pools = pools.get_mut(*player).unwrap();
|
||||||
gamelog::Logger::new().item_name("TOGGLED GOD MODE!").log();
|
gamelog::Logger::new().append("TOGGLED GOD MODE!").log();
|
||||||
player_pools.god = !player_pools.god;
|
player_pools.god = !player_pools.god;
|
||||||
new_runstate = RunState::AwaitingInput;
|
new_runstate = RunState::AwaitingInput;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
116
src/player.rs
116
src/player.rs
|
|
@ -2,7 +2,8 @@ use super::{
|
||||||
effects::{ add_effect, EffectType, Targets },
|
effects::{ add_effect, EffectType, Targets },
|
||||||
gamelog,
|
gamelog,
|
||||||
gui::obfuscate_name_ecs,
|
gui::obfuscate_name_ecs,
|
||||||
gui::renderable_colour,
|
gui::renderable_colour_ecs,
|
||||||
|
gui::item_colour_ecs,
|
||||||
raws::Reaction,
|
raws::Reaction,
|
||||||
Attributes,
|
Attributes,
|
||||||
BlocksTile,
|
BlocksTile,
|
||||||
|
|
@ -50,7 +51,6 @@ pub fn try_door(i: i32, j: i32, ecs: &mut World) -> RunState {
|
||||||
let mut doors = ecs.write_storage::<Door>();
|
let mut doors = ecs.write_storage::<Door>();
|
||||||
let mut blocks_visibility = ecs.write_storage::<BlocksVisibility>();
|
let mut blocks_visibility = ecs.write_storage::<BlocksVisibility>();
|
||||||
let mut blocks_movement = ecs.write_storage::<BlocksTile>();
|
let mut blocks_movement = ecs.write_storage::<BlocksTile>();
|
||||||
let mut renderables = ecs.write_storage::<Renderable>();
|
|
||||||
let names = ecs.read_storage::<Name>();
|
let names = ecs.read_storage::<Name>();
|
||||||
let mut rng = ecs.write_resource::<RandomNumberGenerator>();
|
let mut rng = ecs.write_resource::<RandomNumberGenerator>();
|
||||||
|
|
||||||
|
|
@ -82,13 +82,28 @@ pub fn try_door(i: i32, j: i32, ecs: &mut World) -> RunState {
|
||||||
let door = doors.get_mut(potential_target);
|
let door = doors.get_mut(potential_target);
|
||||||
if let Some(door) = door {
|
if let Some(door) = door {
|
||||||
if door.open == true {
|
if door.open == true {
|
||||||
|
let renderables = ecs.read_storage::<Renderable>();
|
||||||
if multiple_tile_content {
|
if multiple_tile_content {
|
||||||
if let Some(name) = names.get(potential_target) {
|
if let Some(name) = names.get(potential_target) {
|
||||||
gamelog::Logger::new().append("The").item_name(&name.name).append("is blocked.").log();
|
gamelog::Logger
|
||||||
|
::new()
|
||||||
|
.append("The")
|
||||||
|
.colour(renderable_colour_ecs(ecs, potential_target))
|
||||||
|
.append(&name.name)
|
||||||
|
.colour(WHITE)
|
||||||
|
.append("is blocked.")
|
||||||
|
.log();
|
||||||
}
|
}
|
||||||
} else if rng.roll_dice(1, 6) + attributes.strength.bonus < 2 {
|
} else if rng.roll_dice(1, 6) + attributes.strength.bonus < 2 {
|
||||||
if let Some(name) = names.get(potential_target) {
|
if let Some(name) = names.get(potential_target) {
|
||||||
gamelog::Logger::new().append("The").item_name(&name.name).append("resists!").log();
|
gamelog::Logger
|
||||||
|
::new()
|
||||||
|
.append("The")
|
||||||
|
.colour(renderable_colour_ecs(ecs, potential_target))
|
||||||
|
.append(&name.name)
|
||||||
|
.colour(WHITE)
|
||||||
|
.append("resists!")
|
||||||
|
.log();
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
door.open = false;
|
door.open = false;
|
||||||
|
|
@ -98,10 +113,20 @@ pub fn try_door(i: i32, j: i32, ecs: &mut World) -> RunState {
|
||||||
blocks_movement
|
blocks_movement
|
||||||
.insert(potential_target, BlocksTile {})
|
.insert(potential_target, BlocksTile {})
|
||||||
.expect("Unable to insert BlocksTile.");
|
.expect("Unable to insert BlocksTile.");
|
||||||
let render_data = renderables.get_mut(potential_target).unwrap();
|
|
||||||
if let Some(name) = names.get(potential_target) {
|
if let Some(name) = names.get(potential_target) {
|
||||||
gamelog::Logger::new().append("You close the").item_name_n(&name.name).period().log();
|
gamelog::Logger
|
||||||
|
::new()
|
||||||
|
.append("You close the")
|
||||||
|
.colour(renderable_colour_ecs(ecs, potential_target))
|
||||||
|
.append_n(&name.name)
|
||||||
|
.colour(WHITE)
|
||||||
|
.period()
|
||||||
|
.log();
|
||||||
}
|
}
|
||||||
|
//Re-get renderables as mutable
|
||||||
|
std::mem::drop(renderables);
|
||||||
|
let mut renderables = ecs.write_storage::<Renderable>();
|
||||||
|
let render_data = renderables.get_mut(potential_target).unwrap();
|
||||||
render_data.glyph = rltk::to_cp437('+'); // Nethack open door, maybe just use '/' instead.
|
render_data.glyph = rltk::to_cp437('+'); // Nethack open door, maybe just use '/' instead.
|
||||||
door_pos = Some(Point::new(pos.x + delta_x, pos.y + delta_y));
|
door_pos = Some(Point::new(pos.x + delta_x, pos.y + delta_y));
|
||||||
}
|
}
|
||||||
|
|
@ -138,7 +163,6 @@ pub fn open(i: i32, j: i32, ecs: &mut World) -> RunState {
|
||||||
let mut doors = ecs.write_storage::<Door>();
|
let mut doors = ecs.write_storage::<Door>();
|
||||||
let mut blocks_visibility = ecs.write_storage::<BlocksVisibility>();
|
let mut blocks_visibility = ecs.write_storage::<BlocksVisibility>();
|
||||||
let mut blocks_movement = ecs.write_storage::<BlocksTile>();
|
let mut blocks_movement = ecs.write_storage::<BlocksTile>();
|
||||||
let mut renderables = ecs.write_storage::<Renderable>();
|
|
||||||
let names = ecs.read_storage::<Name>();
|
let names = ecs.read_storage::<Name>();
|
||||||
let mut rng = ecs.write_resource::<RandomNumberGenerator>();
|
let mut rng = ecs.write_resource::<RandomNumberGenerator>();
|
||||||
|
|
||||||
|
|
@ -166,18 +190,35 @@ pub fn open(i: i32, j: i32, ecs: &mut World) -> RunState {
|
||||||
let door = doors.get_mut(potential_target);
|
let door = doors.get_mut(potential_target);
|
||||||
if let Some(door) = door {
|
if let Some(door) = door {
|
||||||
if door.open == false {
|
if door.open == false {
|
||||||
|
let renderables = ecs.read_storage::<Renderable>();
|
||||||
if rng.roll_dice(1, 6) + attributes.strength.bonus < 2 {
|
if rng.roll_dice(1, 6) + attributes.strength.bonus < 2 {
|
||||||
if let Some(name) = names.get(potential_target) {
|
if let Some(name) = names.get(potential_target) {
|
||||||
gamelog::Logger::new().append("The").item_name(&name.name).append("resists!").log();
|
gamelog::Logger
|
||||||
|
::new()
|
||||||
|
.append("The")
|
||||||
|
.colour(renderable_colour_ecs(ecs, potential_target))
|
||||||
|
.append(&name.name)
|
||||||
|
.colour(WHITE)
|
||||||
|
.append("resists!")
|
||||||
|
.log();
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
door.open = true;
|
door.open = true;
|
||||||
blocks_visibility.remove(potential_target);
|
blocks_visibility.remove(potential_target);
|
||||||
blocks_movement.remove(potential_target);
|
blocks_movement.remove(potential_target);
|
||||||
let render_data = renderables.get_mut(potential_target).unwrap();
|
|
||||||
if let Some(name) = names.get(potential_target) {
|
if let Some(name) = names.get(potential_target) {
|
||||||
gamelog::Logger::new().append("You open the").item_name_n(&name.name).period().log();
|
gamelog::Logger
|
||||||
|
::new()
|
||||||
|
.append("You open the")
|
||||||
|
.colour(renderable_colour_ecs(ecs, potential_target))
|
||||||
|
.append_n(&name.name)
|
||||||
|
.colour(WHITE)
|
||||||
|
.period()
|
||||||
|
.log();
|
||||||
}
|
}
|
||||||
|
std::mem::drop(renderables);
|
||||||
|
let mut renderables = ecs.write_storage::<Renderable>();
|
||||||
|
let render_data = renderables.get_mut(potential_target).unwrap();
|
||||||
render_data.glyph = rltk::to_cp437('▓'); // Nethack open door, maybe just use '/' instead.
|
render_data.glyph = rltk::to_cp437('▓'); // Nethack open door, maybe just use '/' instead.
|
||||||
door_pos = Some(Point::new(pos.x + delta_x, pos.y + delta_y));
|
door_pos = Some(Point::new(pos.x + delta_x, pos.y + delta_y));
|
||||||
}
|
}
|
||||||
|
|
@ -212,7 +253,6 @@ pub fn kick(i: i32, j: i32, ecs: &mut World) -> RunState {
|
||||||
let mut viewsheds = ecs.write_storage::<Viewshed>();
|
let mut viewsheds = ecs.write_storage::<Viewshed>();
|
||||||
let attributes = ecs.read_storage::<Attributes>();
|
let attributes = ecs.read_storage::<Attributes>();
|
||||||
let map = ecs.fetch::<Map>();
|
let map = ecs.fetch::<Map>();
|
||||||
|
|
||||||
let entities = ecs.entities();
|
let entities = ecs.entities();
|
||||||
let mut doors = ecs.write_storage::<Door>();
|
let mut doors = ecs.write_storage::<Door>();
|
||||||
let names = ecs.read_storage::<Name>();
|
let names = ecs.read_storage::<Name>();
|
||||||
|
|
@ -245,10 +285,17 @@ pub fn kick(i: i32, j: i32, ecs: &mut World) -> RunState {
|
||||||
} else {
|
} else {
|
||||||
let mut last_non_door_target: Option<Entity> = None;
|
let mut last_non_door_target: Option<Entity> = None;
|
||||||
let mut target_name = "thing";
|
let mut target_name = "thing";
|
||||||
|
let mut colour = WHITE;
|
||||||
crate::spatial::for_each_tile_content_with_bool(destination_idx, |potential_target| {
|
crate::spatial::for_each_tile_content_with_bool(destination_idx, |potential_target| {
|
||||||
if let Some(name) = names.get(potential_target) {
|
if let Some(name) = names.get(potential_target) {
|
||||||
target_name = &name.name;
|
target_name = &name.name;
|
||||||
}
|
}
|
||||||
|
let items = ecs.read_storage::<Item>();
|
||||||
|
colour = if let Some(_) = items.get(potential_target) {
|
||||||
|
item_colour_ecs(ecs, potential_target)
|
||||||
|
} else {
|
||||||
|
renderable_colour_ecs(ecs, potential_target)
|
||||||
|
};
|
||||||
|
|
||||||
// If it's a door,
|
// If it's a door,
|
||||||
let door = doors.get_mut(potential_target);
|
let door = doors.get_mut(potential_target);
|
||||||
|
|
@ -262,7 +309,9 @@ pub fn kick(i: i32, j: i32, ecs: &mut World) -> RunState {
|
||||||
gamelog::Logger
|
gamelog::Logger
|
||||||
::new()
|
::new()
|
||||||
.append("As you kick the")
|
.append("As you kick the")
|
||||||
.item_name_n(target_name)
|
.colour(colour)
|
||||||
|
.append_n(obfuscate_name_ecs(ecs, potential_target).0)
|
||||||
|
.colour(WHITE)
|
||||||
.append(", it crashes open!")
|
.append(", it crashes open!")
|
||||||
.log();
|
.log();
|
||||||
something_was_destroyed = Some(potential_target);
|
something_was_destroyed = Some(potential_target);
|
||||||
|
|
@ -274,7 +323,9 @@ pub fn kick(i: i32, j: i32, ecs: &mut World) -> RunState {
|
||||||
gamelog::Logger
|
gamelog::Logger
|
||||||
::new()
|
::new()
|
||||||
.append("You kick the")
|
.append("You kick the")
|
||||||
.item_name_n(target_name)
|
.colour(colour)
|
||||||
|
.append_n(obfuscate_name_ecs(ecs, potential_target).0)
|
||||||
|
.colour(WHITE)
|
||||||
.period()
|
.period()
|
||||||
.log();
|
.log();
|
||||||
return false;
|
return false;
|
||||||
|
|
@ -290,8 +341,15 @@ pub fn kick(i: i32, j: i32, ecs: &mut World) -> RunState {
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
});
|
});
|
||||||
if let Some(_) = last_non_door_target {
|
if let Some(e) = last_non_door_target {
|
||||||
gamelog::Logger::new().append("You kick the").item_name_n(target_name).period().log();
|
gamelog::Logger
|
||||||
|
::new()
|
||||||
|
.append("You kick the")
|
||||||
|
.colour(colour)
|
||||||
|
.append_n(obfuscate_name_ecs(ecs, e).0)
|
||||||
|
.colour(WHITE)
|
||||||
|
.period()
|
||||||
|
.log();
|
||||||
let mut particle_builder = ecs.write_resource::<ParticleBuilder>();
|
let mut particle_builder = ecs.write_resource::<ParticleBuilder>();
|
||||||
particle_builder.kick(pos.x + delta_x, pos.y + delta_y);
|
particle_builder.kick(pos.x + delta_x, pos.y + delta_y);
|
||||||
// Do something here if it's anything other than a door.
|
// Do something here if it's anything other than a door.
|
||||||
|
|
@ -383,7 +441,19 @@ pub fn try_move_player(delta_x: i32, delta_y: i32, ecs: &mut World) -> RunState
|
||||||
if let Some(door) = door {
|
if let Some(door) = door {
|
||||||
if door.open == false {
|
if door.open == false {
|
||||||
if let Some(name) = names.get(potential_target) {
|
if let Some(name) = names.get(potential_target) {
|
||||||
gamelog::Logger::new().append("The").item_name(&name.name).append("is in your way.").log();
|
let colour = if let Some(_) = ecs.read_storage::<Item>().get(potential_target) {
|
||||||
|
item_colour_ecs(ecs, potential_target)
|
||||||
|
} else {
|
||||||
|
renderable_colour_ecs(ecs, potential_target)
|
||||||
|
};
|
||||||
|
gamelog::Logger
|
||||||
|
::new()
|
||||||
|
.append("The")
|
||||||
|
.colour(colour)
|
||||||
|
.append_n(&name.name)
|
||||||
|
.colour(WHITE)
|
||||||
|
.append("is in your way.")
|
||||||
|
.log();
|
||||||
}
|
}
|
||||||
return Some(RunState::AwaitingInput);
|
return Some(RunState::AwaitingInput);
|
||||||
}
|
}
|
||||||
|
|
@ -402,12 +472,13 @@ pub fn try_move_player(delta_x: i32, delta_y: i32, ecs: &mut World) -> RunState
|
||||||
}
|
}
|
||||||
let hidden = ecs.read_storage::<Hidden>();
|
let hidden = ecs.read_storage::<Hidden>();
|
||||||
// Push every entity name in the pile to a vector of strings
|
// Push every entity name in the pile to a vector of strings
|
||||||
let mut item_names: Vec<String> = Vec::new();
|
let mut seen_items: Vec<(String, (u8, u8, u8))> = Vec::new();
|
||||||
let mut some = false;
|
let mut some = false;
|
||||||
crate::spatial::for_each_tile_content(destination_idx, |entity| {
|
crate::spatial::for_each_tile_content(destination_idx, |entity| {
|
||||||
if !hidden.get(entity).is_some() && names.get(entity).is_some() {
|
if !hidden.get(entity).is_some() && names.get(entity).is_some() {
|
||||||
let item_name = obfuscate_name_ecs(ecs, entity).0;
|
let item_name = obfuscate_name_ecs(ecs, entity).0;
|
||||||
item_names.push(item_name);
|
let item_colour = item_colour_ecs(ecs, entity);
|
||||||
|
seen_items.push((item_name, item_colour));
|
||||||
some = true;
|
some = true;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
@ -417,11 +488,11 @@ pub fn try_move_player(delta_x: i32, delta_y: i32, ecs: &mut World) -> RunState
|
||||||
// that it shouldn't matter.
|
// that it shouldn't matter.
|
||||||
if some {
|
if some {
|
||||||
let mut logger = gamelog::Logger::new().append("You see a");
|
let mut logger = gamelog::Logger::new().append("You see a");
|
||||||
for i in 0..item_names.len() {
|
for i in 0..seen_items.len() {
|
||||||
if i > 0 && i < item_names.len() {
|
if i > 0 && i < seen_items.len() {
|
||||||
logger = logger.append(", a");
|
logger = logger.append(", a");
|
||||||
}
|
}
|
||||||
logger = logger.item_name_n(&item_names[i]);
|
logger = logger.colour(seen_items[i].1).append_n(&seen_items[i].0).colour(WHITE);
|
||||||
}
|
}
|
||||||
logger.period().log();
|
logger.period().log();
|
||||||
}
|
}
|
||||||
|
|
@ -448,11 +519,10 @@ pub fn try_move_player(delta_x: i32, delta_y: i32, ecs: &mut World) -> RunState
|
||||||
|
|
||||||
for m in swap_entities.iter() {
|
for m in swap_entities.iter() {
|
||||||
if let Some(name) = names.get(m.0) {
|
if let Some(name) = names.get(m.0) {
|
||||||
let renderables = ecs.read_storage::<Renderable>();
|
|
||||||
gamelog::Logger
|
gamelog::Logger
|
||||||
::new()
|
::new()
|
||||||
.append("You swap places with the")
|
.append("You swap places with the")
|
||||||
.colour(renderable_colour(&renderables, m.0))
|
.colour(renderable_colour_ecs(ecs, m.0))
|
||||||
.append_n(&name.name)
|
.append_n(&name.name)
|
||||||
.colour(WHITE)
|
.colour(WHITE)
|
||||||
.period()
|
.period()
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,17 @@
|
||||||
use super::{ gamelog, Blind, BlocksVisibility, Hidden, Map, Name, Player, Position, Telepath, Viewshed };
|
use super::{
|
||||||
|
gamelog,
|
||||||
|
Blind,
|
||||||
|
BlocksVisibility,
|
||||||
|
Hidden,
|
||||||
|
Map,
|
||||||
|
Name,
|
||||||
|
Player,
|
||||||
|
Position,
|
||||||
|
Telepath,
|
||||||
|
Viewshed,
|
||||||
|
Renderable,
|
||||||
|
gui::renderable_colour,
|
||||||
|
};
|
||||||
use rltk::{ FieldOfViewAlg::SymmetricShadowcasting, Point };
|
use rltk::{ FieldOfViewAlg::SymmetricShadowcasting, Point };
|
||||||
use specs::prelude::*;
|
use specs::prelude::*;
|
||||||
|
|
||||||
|
|
@ -19,6 +32,7 @@ impl<'a> System<'a> for VisibilitySystem {
|
||||||
ReadStorage<'a, Name>,
|
ReadStorage<'a, Name>,
|
||||||
ReadStorage<'a, Blind>,
|
ReadStorage<'a, Blind>,
|
||||||
ReadStorage<'a, BlocksVisibility>,
|
ReadStorage<'a, BlocksVisibility>,
|
||||||
|
ReadStorage<'a, Renderable>,
|
||||||
);
|
);
|
||||||
|
|
||||||
fn run(&mut self, data: Self::SystemData) {
|
fn run(&mut self, data: Self::SystemData) {
|
||||||
|
|
@ -34,6 +48,7 @@ impl<'a> System<'a> for VisibilitySystem {
|
||||||
names,
|
names,
|
||||||
blind_entities,
|
blind_entities,
|
||||||
blocks_visibility,
|
blocks_visibility,
|
||||||
|
renderables,
|
||||||
) = data;
|
) = data;
|
||||||
|
|
||||||
map.view_blocked.clear();
|
map.view_blocked.clear();
|
||||||
|
|
@ -82,7 +97,9 @@ impl<'a> System<'a> for VisibilitySystem {
|
||||||
gamelog::Logger
|
gamelog::Logger
|
||||||
::new()
|
::new()
|
||||||
.append("You spot a")
|
.append("You spot a")
|
||||||
.item_name_n(&name.name)
|
.colour(renderable_colour(&renderables, e))
|
||||||
|
.append_n(&name.name)
|
||||||
|
.colour(rltk::WHITE)
|
||||||
.period()
|
.period()
|
||||||
.log();
|
.log();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue