proper alt sprite and render order swaps
This commit is contained in:
parent
06d5674199
commit
ae9f6b6ac6
8 changed files with 42 additions and 10 deletions
|
|
@ -8,8 +8,8 @@
|
||||||
{
|
{
|
||||||
"id": "trapdoor",
|
"id": "trapdoor",
|
||||||
"name": "trapdoor",
|
"name": "trapdoor",
|
||||||
"renderable": { "glyph": "+", "sprite": { "id": "trapdoor_closed", "alt": "trapdoor_open2", "colour": false, "alt_y": 1.0 }, "fg": "#00FFFF", "bg": "#000000", "order": 1 },
|
"renderable": { "glyph": "+", "sprite": { "id": "trapdoor_closed", "alt": "trapdoor_open2", "colour": false, "alt_y": 1.0 }, "fg": "#00FFFF", "bg": "#000000", "order": 5, "alt_order": 1 },
|
||||||
"door": { "open": false, "locked": false, "blocks_vis": false, "blocks_move": true }
|
"door": { "open": false, "locked": false, "blocks_vis": false, "blocks_move": false }
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": "prop_altar",
|
"id": "prop_altar",
|
||||||
|
|
|
||||||
|
|
@ -66,7 +66,7 @@ impl SpriteInfo {
|
||||||
alt_offset: (0.0, 0.0),
|
alt_offset: (0.0, 0.0),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
pub fn swap(&self) -> Self {
|
fn swap(&self) -> Self {
|
||||||
if let Some(alt_sprite) = &self.alt {
|
if let Some(alt_sprite) = &self.alt {
|
||||||
Self {
|
Self {
|
||||||
id: alt_sprite.clone(),
|
id: alt_sprite.clone(),
|
||||||
|
|
@ -88,6 +88,7 @@ pub struct Renderable {
|
||||||
pub fg: RGB,
|
pub fg: RGB,
|
||||||
pub bg: RGB,
|
pub bg: RGB,
|
||||||
pub render_order: i32,
|
pub render_order: i32,
|
||||||
|
pub alt_render_order: Option<i32>,
|
||||||
// 0 = always on top: particle effects
|
// 0 = always on top: particle effects
|
||||||
// 1 = things that should appear infront of the player: railings, etc.
|
// 1 = things that should appear infront of the player: railings, etc.
|
||||||
// 2 = the player
|
// 2 = the player
|
||||||
|
|
@ -96,6 +97,17 @@ pub struct Renderable {
|
||||||
// 5 = other props: table, etc.
|
// 5 = other props: table, etc.
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl Renderable {
|
||||||
|
pub fn swap(&mut self) {
|
||||||
|
if let Some(alt_render_order) = &mut self.alt_render_order {
|
||||||
|
std::mem::swap(&mut self.render_order, alt_render_order);
|
||||||
|
}
|
||||||
|
if let Some(sprite) = &mut self.sprite {
|
||||||
|
*sprite = sprite.swap();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[derive(Component, Debug, Serialize, Deserialize, Clone)]
|
#[derive(Component, Debug, Serialize, Deserialize, Clone)]
|
||||||
pub struct Bleeds {
|
pub struct Bleeds {
|
||||||
pub colour: RGB,
|
pub colour: RGB,
|
||||||
|
|
|
||||||
|
|
@ -278,6 +278,7 @@ pub fn setup_player_ancestry(ecs: &mut World, ancestry: Ancestry) {
|
||||||
fg: RGB::named(DWARF_COLOUR),
|
fg: RGB::named(DWARF_COLOUR),
|
||||||
bg: RGB::named(BLACK),
|
bg: RGB::named(BLACK),
|
||||||
render_order: 0,
|
render_order: 0,
|
||||||
|
alt_render_order: None,
|
||||||
})
|
})
|
||||||
.expect("Unable to insert renderable component");
|
.expect("Unable to insert renderable component");
|
||||||
*player_skills.skills.entry(Skill::Defence).or_insert(0) += DWARF_DEFENCE_MOD;
|
*player_skills.skills.entry(Skill::Defence).or_insert(0) += DWARF_DEFENCE_MOD;
|
||||||
|
|
@ -290,6 +291,7 @@ pub fn setup_player_ancestry(ecs: &mut World, ancestry: Ancestry) {
|
||||||
fg: RGB::named(ELF_COLOUR),
|
fg: RGB::named(ELF_COLOUR),
|
||||||
bg: RGB::named(BLACK),
|
bg: RGB::named(BLACK),
|
||||||
render_order: 0,
|
render_order: 0,
|
||||||
|
alt_render_order: None,
|
||||||
})
|
})
|
||||||
.expect("Unable to insert renderable component");
|
.expect("Unable to insert renderable component");
|
||||||
let mut telepaths = ecs.write_storage::<Telepath>();
|
let mut telepaths = ecs.write_storage::<Telepath>();
|
||||||
|
|
@ -316,6 +318,7 @@ pub fn setup_player_ancestry(ecs: &mut World, ancestry: Ancestry) {
|
||||||
fg: RGB::named(CATFOLK_COLOUR),
|
fg: RGB::named(CATFOLK_COLOUR),
|
||||||
bg: RGB::named(BLACK),
|
bg: RGB::named(BLACK),
|
||||||
render_order: 0,
|
render_order: 0,
|
||||||
|
alt_render_order: None,
|
||||||
})
|
})
|
||||||
.expect("Unable to insert renderable component");
|
.expect("Unable to insert renderable component");
|
||||||
let mut speeds = ecs.write_storage::<Energy>();
|
let mut speeds = ecs.write_storage::<Energy>();
|
||||||
|
|
|
||||||
|
|
@ -87,6 +87,7 @@ fn create_delayed_particles(ecs: &mut World, ctx: &App) {
|
||||||
bg: handled.bg,
|
bg: handled.bg,
|
||||||
glyph: handled.glyph,
|
glyph: handled.glyph,
|
||||||
render_order: 0,
|
render_order: 0,
|
||||||
|
alt_render_order: None,
|
||||||
})
|
})
|
||||||
.expect("Could not insert renderables");
|
.expect("Could not insert renderables");
|
||||||
particles
|
particles
|
||||||
|
|
@ -313,6 +314,7 @@ impl<'a> System<'a> for ParticleSpawnSystem {
|
||||||
bg: new_particle.bg,
|
bg: new_particle.bg,
|
||||||
glyph: new_particle.glyph,
|
glyph: new_particle.glyph,
|
||||||
render_order: 0,
|
render_order: 0,
|
||||||
|
alt_render_order: None,
|
||||||
})
|
})
|
||||||
.expect("Could not insert renderables");
|
.expect("Could not insert renderables");
|
||||||
particles
|
particles
|
||||||
|
|
|
||||||
|
|
@ -139,9 +139,7 @@ pub fn try_door(i: i32, j: i32, ecs: &mut World) -> RunState {
|
||||||
std::mem::drop(renderables);
|
std::mem::drop(renderables);
|
||||||
let mut renderables = ecs.write_storage::<Renderable>();
|
let mut renderables = ecs.write_storage::<Renderable>();
|
||||||
let render_data = renderables.get_mut(potential_target).unwrap();
|
let render_data = renderables.get_mut(potential_target).unwrap();
|
||||||
if let Some(sprite) = &mut render_data.sprite {
|
render_data.swap();
|
||||||
*sprite = sprite.swap();
|
|
||||||
}
|
|
||||||
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));
|
||||||
}
|
}
|
||||||
result = RunState::Ticking;
|
result = RunState::Ticking;
|
||||||
|
|
@ -238,9 +236,7 @@ pub fn open(i: i32, j: i32, ecs: &mut World) -> RunState {
|
||||||
std::mem::drop(renderables);
|
std::mem::drop(renderables);
|
||||||
let mut renderables = ecs.write_storage::<Renderable>();
|
let mut renderables = ecs.write_storage::<Renderable>();
|
||||||
let render_data = renderables.get_mut(potential_target).unwrap();
|
let render_data = renderables.get_mut(potential_target).unwrap();
|
||||||
if let Some(sprite) = &mut render_data.sprite {
|
render_data.swap();
|
||||||
*sprite = sprite.swap();
|
|
||||||
}
|
|
||||||
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));
|
||||||
}
|
}
|
||||||
result = RunState::Ticking;
|
result = RunState::Ticking;
|
||||||
|
|
@ -502,7 +498,7 @@ pub fn try_move_player(delta_x: i32, delta_y: 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 && door.blocks_move {
|
||||||
if let Some(name) = names.get(potential_target) {
|
if let Some(name) = names.get(potential_target) {
|
||||||
let colour = if
|
let colour = if
|
||||||
let Some(_) = ecs.read_storage::<Item>().get(potential_target)
|
let Some(_) = ecs.read_storage::<Item>().get(potential_target)
|
||||||
|
|
@ -774,6 +770,18 @@ fn try_change_level(ecs: &mut World, backtracking: bool) -> Destination {
|
||||||
let map = ecs.fetch::<Map>();
|
let map = ecs.fetch::<Map>();
|
||||||
let player_idx = map.xy_idx(player_pos.x, player_pos.y);
|
let player_idx = map.xy_idx(player_pos.x, player_pos.y);
|
||||||
let this_tile = map.tiles[player_idx];
|
let this_tile = map.tiles[player_idx];
|
||||||
|
let mut blocked = false;
|
||||||
|
crate::spatial::for_each_tile_content(player_idx, |potential| {
|
||||||
|
if let Some(is_door) = ecs.read_storage::<Door>().get(potential) {
|
||||||
|
if is_door.open == false {
|
||||||
|
blocked = true;
|
||||||
|
gamelog::Logger::new().append("The way is blocked.").log();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
if blocked {
|
||||||
|
return Destination::None;
|
||||||
|
}
|
||||||
return get_dest(this_tile, backtracking);
|
return get_dest(this_tile, backtracking);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -45,6 +45,7 @@ pub struct Renderable {
|
||||||
pub fg: String,
|
pub fg: String,
|
||||||
pub bg: String,
|
pub bg: String,
|
||||||
pub order: i32,
|
pub order: i32,
|
||||||
|
pub alt_order: Option<i32>,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Deserialize, Debug)]
|
#[derive(Deserialize, Debug)]
|
||||||
|
|
|
||||||
|
|
@ -725,6 +725,11 @@ fn get_renderable_component(
|
||||||
fg: RGB::from_hex(&renderable.fg).expect("Invalid RGB"),
|
fg: RGB::from_hex(&renderable.fg).expect("Invalid RGB"),
|
||||||
bg: RGB::from_hex(&renderable.bg).expect("Invalid RGB"),
|
bg: RGB::from_hex(&renderable.bg).expect("Invalid RGB"),
|
||||||
render_order: renderable.order,
|
render_order: renderable.order,
|
||||||
|
alt_render_order: if let Some(alt_order) = renderable.alt_order {
|
||||||
|
Some(alt_order)
|
||||||
|
} else {
|
||||||
|
None
|
||||||
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -62,6 +62,7 @@ pub fn player(ecs: &mut World, player_x: i32, player_y: i32) -> Entity {
|
||||||
fg: RGB::named(YELLOW),
|
fg: RGB::named(YELLOW),
|
||||||
bg: RGB::named(BLACK),
|
bg: RGB::named(BLACK),
|
||||||
render_order: 2,
|
render_order: 2,
|
||||||
|
alt_render_order: None,
|
||||||
})
|
})
|
||||||
.with(Bleeds { colour: RGB::named(BLOODSTAIN_COLOUR) })
|
.with(Bleeds { colour: RGB::named(BLOODSTAIN_COLOUR) })
|
||||||
.with(Player {})
|
.with(Player {})
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue