optional sprites for entities
This commit is contained in:
parent
cee4d02ce2
commit
d58614b106
13 changed files with 48 additions and 37 deletions
|
|
@ -21,7 +21,7 @@
|
|||
{
|
||||
"id": "prop_table",
|
||||
"name": "table",
|
||||
"renderable": { "glyph": "-", "fg": "#AAAAAA", "bg": "#000000", "order": 2 },
|
||||
"renderable": { "glyph": "-", "sprite": 52, "fg": "#AAAAAA", "bg": "#000000", "order": 2 },
|
||||
"flags": []
|
||||
},
|
||||
{
|
||||
|
|
@ -33,25 +33,25 @@
|
|||
{
|
||||
"id": "prop_statue",
|
||||
"name": "statue",
|
||||
"renderable": { "glyph": "@", "fg": "#ffffff", "bg": "#000000", "order": 2 },
|
||||
"renderable": { "glyph": "@", "sprite": 29, "fg": "#ffffff", "bg": "#000000", "order": 2 },
|
||||
"flags": []
|
||||
},
|
||||
{
|
||||
"id": "prop_bed",
|
||||
"name": "bed",
|
||||
"renderable": { "glyph": "=", "fg": "#AAAAAA", "bg": "#000000", "order": 2 },
|
||||
"renderable": { "glyph": "=", "sprite": 50, "fg": "#AAAAAA", "bg": "#000000", "order": 2 },
|
||||
"flags": []
|
||||
},
|
||||
{
|
||||
"id": "prop_chair",
|
||||
"name": "chair",
|
||||
"renderable": { "glyph": "└", "fg": "#AAAAAA", "bg": "#000000", "order": 2 },
|
||||
"renderable": { "glyph": "└", "sprite": 51, "fg": "#AAAAAA", "bg": "#000000", "order": 2 },
|
||||
"flags": []
|
||||
},
|
||||
{
|
||||
"id": "prop_candle",
|
||||
"name": "candle",
|
||||
"renderable": { "glyph": "Ä", "fg": "#FFA500", "bg": "#000000", "order": 2 },
|
||||
"renderable": { "glyph": "Ä", "sprite": 3, "fg": "#FFA500", "bg": "#000000", "order": 2 },
|
||||
"flags": []
|
||||
},
|
||||
{
|
||||
|
|
|
|||
|
|
@ -132,6 +132,21 @@ pub fn render_camera(ecs: &World, ctx: &mut BTerm) {
|
|||
}
|
||||
}
|
||||
if draw {
|
||||
if let Some(sprite) = render.sprite {
|
||||
ctx.set_active_console(0);
|
||||
ctx.add_sprite(
|
||||
Rect::with_size(
|
||||
entity_offset_x * 16 + x_offset * 16,
|
||||
entity_offset_y * 16 + y_offset * 16,
|
||||
16,
|
||||
16
|
||||
),
|
||||
render.render_order,
|
||||
RGBA::named(WHITE),
|
||||
sprite
|
||||
);
|
||||
ctx.set_active_console(ENTITY_LAYER);
|
||||
} else {
|
||||
ctx.set(
|
||||
entity_offset_x + x_offset,
|
||||
entity_offset_y + y_offset,
|
||||
|
|
@ -139,6 +154,7 @@ pub fn render_camera(ecs: &World, ctx: &mut BTerm) {
|
|||
bg,
|
||||
render.glyph
|
||||
);
|
||||
}
|
||||
if let Some(pool) = pools.get(*ent) {
|
||||
if pool.hit_points.current < pool.hit_points.max {
|
||||
ctx.set_active_console(HP_BAR_LAYER);
|
||||
|
|
|
|||
|
|
@ -41,6 +41,7 @@ pub struct OtherLevelPosition {
|
|||
#[derive(Component, ConvertSaveload, Clone)]
|
||||
pub struct Renderable {
|
||||
pub glyph: FontCharType,
|
||||
pub sprite: Option<usize>,
|
||||
pub fg: RGB,
|
||||
pub bg: RGB,
|
||||
pub render_order: i32,
|
||||
|
|
|
|||
|
|
@ -86,7 +86,7 @@ pub const LILYPAD8: usize = 79;
|
|||
// Row 6 (80-95)
|
||||
// Row 7 (96-111)
|
||||
// Row 8 (112-127)
|
||||
pub const FLOOR_WOOD: usize = 123;
|
||||
pub const FLOOR_WOOD: usize = 124;
|
||||
// Row 9 (128-143)
|
||||
// Row 10 (144-159)
|
||||
// Row 11 (160-175)
|
||||
|
|
|
|||
|
|
@ -184,7 +184,7 @@ fn get_death_message(ecs: &World, source: Entity) -> String {
|
|||
result.push_str(format!("{}", PLAYER_DIED_SUICIDE).as_str());
|
||||
} else if let Some(name) = ecs.read_storage::<Name>().get(source) {
|
||||
result.push_str(
|
||||
format!("{} {}", PLAYER_DIED_NAMED_ATTACKER, with_article(name.name.clone())).as_str()
|
||||
format!("{} {}", PLAYER_DIED_NAMED_ATTACKER, with_article(&name.name)).as_str()
|
||||
);
|
||||
} else {
|
||||
result.push_str(format!("{}", PLAYER_DIED_UNKNOWN).as_str());
|
||||
|
|
|
|||
|
|
@ -273,6 +273,7 @@ pub fn setup_player_ancestry(ecs: &mut World, ancestry: Ancestry) {
|
|||
renderables
|
||||
.insert(*player, Renderable {
|
||||
glyph: to_cp437(DWARF_GLYPH),
|
||||
sprite: None, // TODO: Dwarf sprite
|
||||
fg: RGB::named(DWARF_COLOUR),
|
||||
bg: RGB::named(BLACK),
|
||||
render_order: 0,
|
||||
|
|
@ -284,6 +285,7 @@ pub fn setup_player_ancestry(ecs: &mut World, ancestry: Ancestry) {
|
|||
renderables
|
||||
.insert(*player, Renderable {
|
||||
glyph: to_cp437(ELF_GLYPH),
|
||||
sprite: None, // TODO: Elf sprite
|
||||
fg: RGB::named(ELF_COLOUR),
|
||||
bg: RGB::named(BLACK),
|
||||
render_order: 0,
|
||||
|
|
@ -309,6 +311,7 @@ pub fn setup_player_ancestry(ecs: &mut World, ancestry: Ancestry) {
|
|||
renderables
|
||||
.insert(*player, Renderable {
|
||||
glyph: to_cp437(CATFOLK_GLYPH),
|
||||
sprite: None, // TODO: Catfolk sprite
|
||||
fg: RGB::named(CATFOLK_COLOUR),
|
||||
bg: RGB::named(BLACK),
|
||||
render_order: 0,
|
||||
|
|
|
|||
|
|
@ -1553,7 +1553,7 @@ pub fn game_over(ctx: &mut BTerm) -> YesNoResult {
|
|||
}
|
||||
}
|
||||
|
||||
pub fn with_article(name: String) -> String {
|
||||
pub fn with_article(name: &String) -> String {
|
||||
// If first letter is a capital
|
||||
if name.chars().nth(0).unwrap().is_uppercase() {
|
||||
return format!("{}", name);
|
||||
|
|
|
|||
|
|
@ -112,26 +112,7 @@ fn make_scroll_name(rng: &mut RandomNumberGenerator) -> String {
|
|||
return name;
|
||||
}
|
||||
|
||||
const POTION_COLOURS: &[&str] = &[
|
||||
"red",
|
||||
"orange",
|
||||
"yellow",
|
||||
"green",
|
||||
"blue",
|
||||
"indigo",
|
||||
"violet",
|
||||
"black",
|
||||
"white",
|
||||
"silver",
|
||||
"gold",
|
||||
"rainbow",
|
||||
"blood",
|
||||
"purple",
|
||||
"cyan",
|
||||
"brown",
|
||||
"grey",
|
||||
"octarine",
|
||||
];
|
||||
const POTION_COLOURS: &[&str] = &["blue", "red", "green", "yellow", "black"];
|
||||
const POTION_ADJECTIVES: &[&str] = &[
|
||||
"swirling",
|
||||
"viscous",
|
||||
|
|
|
|||
|
|
@ -81,6 +81,7 @@ fn create_delayed_particles(ecs: &mut World, ctx: &BTerm) {
|
|||
.expect("Could not insert position");
|
||||
renderables
|
||||
.insert(p, Renderable {
|
||||
sprite: None, // TODO: Particle sprite
|
||||
fg: handled.fg,
|
||||
bg: handled.bg,
|
||||
glyph: handled.glyph,
|
||||
|
|
@ -306,6 +307,7 @@ impl<'a> System<'a> for ParticleSpawnSystem {
|
|||
.expect("Could not insert position");
|
||||
renderables
|
||||
.insert(p, Renderable {
|
||||
sprite: None, // TODO: Particle sprite
|
||||
fg: new_particle.fg,
|
||||
bg: new_particle.bg,
|
||||
glyph: new_particle.glyph,
|
||||
|
|
|
|||
|
|
@ -39,6 +39,7 @@ use specs::prelude::*;
|
|||
use std::cmp::{ max, min };
|
||||
use crate::data::events::*;
|
||||
use crate::data::ids::*;
|
||||
use crate::gui::with_article;
|
||||
|
||||
pub fn try_door(i: i32, j: i32, ecs: &mut World) -> RunState {
|
||||
let mut positions = ecs.write_storage::<Position>();
|
||||
|
|
@ -560,11 +561,11 @@ pub fn try_move_player(delta_x: i32, delta_y: i32, ecs: &mut World) -> RunState
|
|||
let mut logger = gamelog::Logger::new().append("You see");
|
||||
for i in 0..seen_items.len() {
|
||||
if i > 0 && i < seen_items.len() {
|
||||
logger = logger.append(", a");
|
||||
logger = logger.append(", ");
|
||||
}
|
||||
logger = logger
|
||||
.colour(seen_items[i].1)
|
||||
.append_n(&seen_items[i].0)
|
||||
.append_n(with_article(&seen_items[i].0))
|
||||
.colour(WHITE);
|
||||
}
|
||||
logger.period().log();
|
||||
|
|
|
|||
|
|
@ -30,6 +30,7 @@ pub struct Equippable {
|
|||
#[derive(Deserialize, Debug)]
|
||||
pub struct Renderable {
|
||||
pub glyph: String,
|
||||
pub sprite: Option<usize>,
|
||||
pub fg: String,
|
||||
pub bg: String,
|
||||
pub order: i32,
|
||||
|
|
|
|||
|
|
@ -691,6 +691,11 @@ fn get_renderable_component(
|
|||
) -> crate::components::Renderable {
|
||||
crate::components::Renderable {
|
||||
glyph: to_cp437(renderable.glyph.chars().next().unwrap()),
|
||||
sprite: if let Some(sprite) = &renderable.sprite {
|
||||
Some(sprite.clone())
|
||||
} else {
|
||||
None
|
||||
},
|
||||
fg: RGB::from_hex(&renderable.fg).expect("Invalid RGB"),
|
||||
bg: RGB::from_hex(&renderable.bg).expect("Invalid RGB"),
|
||||
render_order: renderable.order,
|
||||
|
|
|
|||
|
|
@ -54,6 +54,7 @@ pub fn player(ecs: &mut World, player_x: i32, player_y: i32) -> Entity {
|
|||
.with(BlocksTile {})
|
||||
.with(Renderable {
|
||||
glyph: to_cp437('@'),
|
||||
sprite: None, // TODO: Player sprite
|
||||
fg: RGB::named(YELLOW),
|
||||
bg: RGB::named(BLACK),
|
||||
render_order: 0,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue