60 lines
1.6 KiB
Rust
60 lines
1.6 KiB
Rust
use crate::glyph_bank::TileSize;
|
|
use crate::tilemap::TileMap;
|
|
|
|
#[derive(Clone, Copy, Debug)]
|
|
pub struct ParallaxFactor {
|
|
pub x: f32,
|
|
pub y: f32,
|
|
}
|
|
|
|
#[derive(Clone, Debug)]
|
|
pub struct SceneLayer {
|
|
pub active: bool,
|
|
pub glyph_bank_id: u8,
|
|
pub tile_size: TileSize,
|
|
pub parallax_factor: ParallaxFactor,
|
|
pub tilemap: TileMap,
|
|
}
|
|
|
|
#[cfg(test)]
|
|
mod tests {
|
|
use super::*;
|
|
use crate::glyph::Glyph;
|
|
use crate::tile::Tile;
|
|
|
|
#[test]
|
|
fn scene_layer_preserves_parallax_factor_and_tilemap_ownership() {
|
|
let layer = SceneLayer {
|
|
active: true,
|
|
glyph_bank_id: 7,
|
|
tile_size: TileSize::Size16,
|
|
parallax_factor: ParallaxFactor { x: 0.5, y: 0.75 },
|
|
tilemap: TileMap {
|
|
width: 2,
|
|
height: 1,
|
|
tiles: vec![
|
|
Tile {
|
|
active: true,
|
|
glyph: Glyph { glyph_id: 21, palette_id: 3 },
|
|
flip_x: false,
|
|
flip_y: false,
|
|
},
|
|
Tile {
|
|
active: false,
|
|
glyph: Glyph { glyph_id: 22, palette_id: 4 },
|
|
flip_x: true,
|
|
flip_y: false,
|
|
},
|
|
],
|
|
},
|
|
};
|
|
|
|
assert_eq!(layer.glyph_bank_id, 7);
|
|
assert_eq!(layer.parallax_factor.x, 0.5);
|
|
assert_eq!(layer.parallax_factor.y, 0.75);
|
|
assert_eq!(layer.tilemap.width, 2);
|
|
assert_eq!(layer.tilemap.tiles[1].glyph.glyph_id, 22);
|
|
assert!(layer.tilemap.tiles[1].flip_x);
|
|
}
|
|
}
|