Skip to content

Instantly share code, notes, and snippets.

@rparrett
Created September 21, 2023 23:27
Show Gist options
  • Save rparrett/8d00e084f5d08b69a5abe9bb82e4835e to your computer and use it in GitHub Desktop.
Save rparrett/8d00e084f5d08b69a5abe9bb82e4835e to your computer and use it in GitHub Desktop.
Bevy rectangle with border mesh
fn quad_with_border(size: Vec2, border_size: Vec2, color: &Color, border_color: &Color) -> Mesh {
let extent = size / 2.;
let inner_extent = (size - border_size) / 2.;
let color = color.as_rgba_f32();
let border_color = border_color.as_rgba_f32();
let vertices = [
([-extent.x, -extent.y, 0.0], border_color),
([-extent.x, extent.y, 0.0], border_color),
([extent.x, extent.y, 0.0], border_color),
([extent.x, -extent.y, 0.0], border_color),
//
([-inner_extent.x, -inner_extent.y, 0.0], color),
([-inner_extent.x, inner_extent.y, 0.0], color),
([inner_extent.x, inner_extent.y, 0.0], color),
([inner_extent.x, -inner_extent.y, 0.0], color),
];
let indices = Indices::U32(vec![
0, 2, 1, 0, 3, 2, //
4, 6, 5, 4, 7, 6,
]);
let positions: Vec<_> = vertices.iter().map(|(p, _)| *p).collect();
let colors: Vec<_> = vertices.iter().map(|(_, c)| *c).collect();
let mut mesh = Mesh::new(PrimitiveTopology::TriangleList);
mesh.set_indices(Some(indices));
mesh.insert_attribute(Mesh::ATTRIBUTE_POSITION, positions);
mesh.insert_attribute(Mesh::ATTRIBUTE_COLOR, colors);
mesh
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment