use sfml::{
graphics::{Color, CustomShape, CustomShapePoints, RenderTarget, RenderWindow, Shape},
system::Vector2f,
window::{Event, Key, Style},
};
#[derive(Clone, Copy)]
pub struct TriangleShape;
impl CustomShapePoints for TriangleShape {
fn point_count(&self) -> usize {
3
}
fn point(&self, point: usize) -> Vector2f {
match point {
0 => Vector2f { x: 20., y: 580. },
1 => Vector2f { x: 400., y: 20. },
2 => Vector2f { x: 780., y: 580. },
p => panic!("Non-existent point: {p}"),
}
}
}
fn main() {
let mut window = RenderWindow::new(
(800, 600),
"Custom shape",
Style::CLOSE,
&Default::default(),
);
window.set_vertical_sync_enabled(true);
let mut shape = CustomShape::new(Box::new(TriangleShape));
shape.set_fill_color(Color::RED);
shape.set_outline_color(Color::GREEN);
shape.set_outline_thickness(3.);
loop {
while let Some(event) = window.poll_event() {
match event {
Event::Closed
| Event::KeyPressed {
code: Key::Escape, ..
} => return,
_ => {}
}
}
window.clear(Color::BLACK);
window.draw(&shape);
window.display();
}
}