extern crate lime_render as render;
extern crate winit;

use render::{Color, Renderer, d2, d3};
use winit::{Event, EventsLoop, WindowBuilder, WindowEvent};

struct D3;

impl d3::Draw for D3 {
    fn draw(&self, _: &mut FnMut(&d3::Mesh, Color)) {}
}

struct D2;

impl d2::Draw for D2 {
    fn draw(&self, visitor: &mut FnMut(&[d2::Point], Color)) {
        static VERTICES: [d2::Point; 3] = [
            d2::Point(-0.5, -0.5),
            d2::Point(0.5, -0.5),
            d2::Point(0.0, 0.5),
        ];
        let red = Color::new(1.0, 0.0, 0.0, 1.0);
        visitor(&VERTICES, red)
    }
}

#[test]
fn triangle() {
    let mut events_loop = EventsLoop::new();
    let builder = WindowBuilder::new();
    let mut renderer = Renderer::new(&events_loop, builder);

    let mut quit = false;
    let mut dim = renderer.dimensions();
    while !quit {
        events_loop.poll_events(|event| {
            match event {
                Event::WindowEvent {
                    event: WindowEvent::Closed,
                    ..
                } => quit = true,
                _ => (),
            };
        });

        renderer.render(&D3, &D2, &mut dim);
    }
}