51 lines
1.4 KiB
Rust
51 lines
1.4 KiB
Rust
use crate::scene_layer::SceneLayer;
|
|
|
|
#[derive(Clone, Debug)]
|
|
pub struct SceneBank {
|
|
pub layers: [SceneLayer; 4],
|
|
}
|
|
|
|
#[cfg(test)]
|
|
mod tests {
|
|
use super::*;
|
|
use crate::glyph::Glyph;
|
|
use crate::glyph_bank::TileSize;
|
|
use crate::scene_layer::MotionFactor;
|
|
use crate::tile::Tile;
|
|
use crate::tilemap::TileMap;
|
|
|
|
fn layer(glyph_bank_id: u8, motion_x: f32, motion_y: f32, glyph_id: u16) -> SceneLayer {
|
|
SceneLayer {
|
|
active: true,
|
|
glyph_bank_id,
|
|
tile_size: TileSize::Size16,
|
|
motion_factor: MotionFactor { x: motion_x, y: motion_y },
|
|
tilemap: TileMap {
|
|
width: 1,
|
|
height: 1,
|
|
tiles: vec![Tile {
|
|
active: true,
|
|
glyph: Glyph { glyph_id, palette_id: glyph_bank_id },
|
|
flip_x: false,
|
|
flip_y: false,
|
|
}],
|
|
},
|
|
}
|
|
}
|
|
|
|
#[test]
|
|
fn scene_bank_owns_exactly_four_layers() {
|
|
let scene = SceneBank {
|
|
layers: [
|
|
layer(0, 1.0, 1.0, 10),
|
|
layer(1, 0.5, 1.0, 11),
|
|
layer(2, 1.0, 0.5, 12),
|
|
layer(3, 0.25, 0.25, 13),
|
|
],
|
|
};
|
|
|
|
assert_eq!(scene.layers.len(), 4);
|
|
assert_eq!(scene.layers[3].tilemap.tiles[0].glyph.glyph_id, 13);
|
|
}
|
|
}
|