1use sge_rendering::{d2::Renderer2D, dq2d, wdq2d};
2use shapes_2d::Shape2DExt;
3
4pub mod area;
5pub mod shapes_2d;
6
7pub trait Drawable {
8 fn draw_to(&self, renderer: Renderer2D);
9 fn draw(&self) {
10 self.draw_to(dq2d())
11 }
12 fn draw_world(&self) {
13 self.draw_to(wdq2d())
14 }
15}
16
17impl<T: Shape2DExt> Drawable for T {
18 fn draw_to(&self, renderer: Renderer2D) {
19 <Self as Shape2DExt>::draw_to(&self, renderer);
20 }
21
22 fn draw(&self) {
23 self.draw_to(dq2d())
24 }
25
26 fn draw_world(&self) {
27 if self.is_visible_in_world() {
28 self.draw_to(wdq2d())
29 }
30 }
31}
32
33pub fn draw<T: Drawable>(v: &T) {
34 v.draw()
35}
36
37pub fn draw_world<T: Drawable>(v: &T) {
38 v.draw_world()
39}
40
41pub fn draw_to<T: Drawable>(v: &T, renderer: Renderer2D) {
42 v.draw_to(renderer)
43}
44
45