use crate::vpx::gameitem::primitive::VertexWrapper;
use crate::vpx::model::Vertex3dNoTex2;
use crate::vpx::obj::VpxFace;
pub fn build_playfield_mesh(
left: f32,
top: f32,
right: f32,
bottom: f32,
) -> (Vec<VertexWrapper>, Vec<VpxFace>) {
let vertices = vec![
VertexWrapper::new(
[0u8; 32], Vertex3dNoTex2 {
x: left,
y: top,
z: 0.0,
nx: 0.0,
ny: 0.0,
nz: 1.0,
tu: 0.0,
tv: 0.0,
},
),
VertexWrapper::new(
[0u8; 32],
Vertex3dNoTex2 {
x: right,
y: top,
z: 0.0,
nx: 0.0,
ny: 0.0,
nz: 1.0,
tu: 1.0,
tv: 0.0,
},
),
VertexWrapper::new(
[0u8; 32],
Vertex3dNoTex2 {
x: left,
y: bottom,
z: 0.0,
nx: 0.0,
ny: 0.0,
nz: 1.0,
tu: 0.0,
tv: 1.0,
},
),
VertexWrapper::new(
[0u8; 32],
Vertex3dNoTex2 {
x: right,
y: bottom,
z: 0.0,
nx: 0.0,
ny: 0.0,
nz: 1.0,
tu: 1.0,
tv: 1.0,
},
),
];
let indices = vec![
VpxFace {
i0: 0,
i1: 1,
i2: 2,
},
VpxFace {
i0: 2,
i1: 1,
i2: 3,
},
];
(vertices, indices)
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_build_playfield_mesh_creates_quad() {
let (vertices, indices) = build_playfield_mesh(0.0, 0.0, 1000.0, 2000.0);
assert_eq!(vertices.len(), 4);
assert_eq!(indices.len(), 2);
assert_eq!(vertices[0].vertex.x, 0.0); assert_eq!(vertices[0].vertex.y, 0.0); assert_eq!(vertices[1].vertex.x, 1000.0); assert_eq!(vertices[1].vertex.y, 0.0); assert_eq!(vertices[2].vertex.x, 0.0); assert_eq!(vertices[2].vertex.y, 2000.0); assert_eq!(vertices[3].vertex.x, 1000.0); assert_eq!(vertices[3].vertex.y, 2000.0);
for v in &vertices {
assert_eq!(v.vertex.z, 0.0);
}
for v in &vertices {
assert_eq!(v.vertex.nx, 0.0);
assert_eq!(v.vertex.ny, 0.0);
assert_eq!(v.vertex.nz, 1.0);
}
assert_eq!(vertices[0].vertex.tu, 0.0);
assert_eq!(vertices[0].vertex.tv, 0.0);
assert_eq!(vertices[1].vertex.tu, 1.0);
assert_eq!(vertices[1].vertex.tv, 0.0);
assert_eq!(vertices[2].vertex.tu, 0.0);
assert_eq!(vertices[2].vertex.tv, 1.0);
assert_eq!(vertices[3].vertex.tu, 1.0);
assert_eq!(vertices[3].vertex.tv, 1.0);
}
}