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",
|
||||
"name": "trapdoor",
|
||||
"renderable": { "glyph": "+", "sprite": { "id": "trapdoor_closed", "alt": "trapdoor_open2", "colour": false, "alt_y": 1.0 }, "fg": "#00FFFF", "bg": "#000000", "order": 1 },
|
||||
"door": { "open": false, "locked": false, "blocks_vis": false, "blocks_move": true }
|
||||
"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": false }
|
||||
},
|
||||
{
|
||||
"id": "prop_altar",
|
||||
|
|
|
|||
|
|
@ -66,7 +66,7 @@ impl SpriteInfo {
|
|||
alt_offset: (0.0, 0.0),
|
||||
}
|
||||
}
|
||||
pub fn swap(&self) -> Self {
|
||||
fn swap(&self) -> Self {
|
||||
if let Some(alt_sprite) = &self.alt {
|
||||
Self {
|
||||
id: alt_sprite.clone(),
|
||||
|
|
@ -88,6 +88,7 @@ pub struct Renderable {
|
|||
pub fg: RGB,
|
||||
pub bg: RGB,
|
||||
pub render_order: i32,
|
||||
pub alt_render_order: Option<i32>,
|
||||
// 0 = always on top: particle effects
|
||||
// 1 = things that should appear infront of the player: railings, etc.
|
||||
// 2 = the player
|
||||
|
|
@ -96,6 +97,17 @@ pub struct Renderable {
|
|||
// 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)]
|
||||
pub struct Bleeds {
|
||||
pub colour: RGB,
|
||||
|
|
|
|||
|
|
@ -278,6 +278,7 @@ pub fn setup_player_ancestry(ecs: &mut World, ancestry: Ancestry) {
|
|||
fg: RGB::named(DWARF_COLOUR),
|
||||
bg: RGB::named(BLACK),
|
||||
render_order: 0,
|
||||
alt_render_order: None,
|
||||
})
|
||||
.expect("Unable to insert renderable component");
|
||||
*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),
|
||||
bg: RGB::named(BLACK),
|
||||
render_order: 0,
|
||||
alt_render_order: None,
|
||||
})
|
||||
.expect("Unable to insert renderable component");
|
||||
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),
|
||||
bg: RGB::named(BLACK),
|
||||
render_order: 0,
|
||||
alt_render_order: None,
|
||||
})
|
||||
.expect("Unable to insert renderable component");
|
||||
let mut speeds = ecs.write_storage::<Energy>();
|
||||
|
|
|
|||
|
|
@ -87,6 +87,7 @@ fn create_delayed_particles(ecs: &mut World, ctx: &App) {
|
|||
bg: handled.bg,
|
||||
glyph: handled.glyph,
|
||||
render_order: 0,
|
||||
alt_render_order: None,
|
||||
})
|
||||
.expect("Could not insert renderables");
|
||||
particles
|
||||
|
|
@ -313,6 +314,7 @@ impl<'a> System<'a> for ParticleSpawnSystem {
|
|||
bg: new_particle.bg,
|
||||
glyph: new_particle.glyph,
|
||||
render_order: 0,
|
||||
alt_render_order: None,
|
||||
})
|
||||
.expect("Could not insert renderables");
|
||||
particles
|
||||
|
|
|
|||
|
|
@ -139,9 +139,7 @@ pub fn try_door(i: i32, j: i32, ecs: &mut World) -> RunState {
|
|||
std::mem::drop(renderables);
|
||||
let mut renderables = ecs.write_storage::<Renderable>();
|
||||
let render_data = renderables.get_mut(potential_target).unwrap();
|
||||
if let Some(sprite) = &mut render_data.sprite {
|
||||
*sprite = sprite.swap();
|
||||
}
|
||||
render_data.swap();
|
||||
door_pos = Some(Point::new(pos.x + delta_x, pos.y + delta_y));
|
||||
}
|
||||
result = RunState::Ticking;
|
||||
|
|
@ -238,9 +236,7 @@ pub fn open(i: i32, j: i32, ecs: &mut World) -> RunState {
|
|||
std::mem::drop(renderables);
|
||||
let mut renderables = ecs.write_storage::<Renderable>();
|
||||
let render_data = renderables.get_mut(potential_target).unwrap();
|
||||
if let Some(sprite) = &mut render_data.sprite {
|
||||
*sprite = sprite.swap();
|
||||
}
|
||||
render_data.swap();
|
||||
door_pos = Some(Point::new(pos.x + delta_x, pos.y + delta_y));
|
||||
}
|
||||
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);
|
||||
if let Some(door) = door {
|
||||
if door.open == false {
|
||||
if door.open == false && door.blocks_move {
|
||||
if let Some(name) = names.get(potential_target) {
|
||||
let colour = if
|
||||
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 player_idx = map.xy_idx(player_pos.x, player_pos.y);
|
||||
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);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -45,6 +45,7 @@ pub struct Renderable {
|
|||
pub fg: String,
|
||||
pub bg: String,
|
||||
pub order: i32,
|
||||
pub alt_order: Option<i32>,
|
||||
}
|
||||
|
||||
#[derive(Deserialize, Debug)]
|
||||
|
|
|
|||
|
|
@ -725,6 +725,11 @@ fn get_renderable_component(
|
|||
fg: RGB::from_hex(&renderable.fg).expect("Invalid RGB"),
|
||||
bg: RGB::from_hex(&renderable.bg).expect("Invalid RGB"),
|
||||
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),
|
||||
bg: RGB::named(BLACK),
|
||||
render_order: 2,
|
||||
alt_render_order: None,
|
||||
})
|
||||
.with(Bleeds { colour: RGB::named(BLOODSTAIN_COLOUR) })
|
||||
.with(Player {})
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue