use crate::model::Model; use crate::camera::Camera; use crate::shader::shader; use std::sync::Arc; use std::rc::Rc; use imgui_glow_renderer::AutoRenderer; use imgui_sdl2_support::SdlPlatform; use cgmath::{Matrix4, vec3, Point3, Deg, perspective}; use cgmath::prelude::*; const MODELS: [&str; 3]= ["resources/models/TestCarModel/CarW4.obj", "resources/models/TestCarModel/CarW1.obj", "resources/models/TestCarModel/CarW0.obj"]; /// XXX this is temporary, thus the name pub struct tempData { pub projection: Matrix4, pub spinSpeed: f32, pub current_rad: f32, pub currentFrame: f32, pub deltaTime: f32, pub lastFrame: f32, } struct Scene { gl: Arc, pub Car: Model, camera: Camera, imgui: imgui::Context, imgui_rend: AutoRenderer, imgui_plat: SdlPlatform, shaders: Vec>, time: std::time::Instant, tempData: tempData, } impl Scene{ fn new(gl: Arc) -> Scene { let Car = Model::new(MODELS[0], Arc::clone(&gl)); let shader = Rc::new(shader::new("model", Arc::clone(&gl))); let time = std::time::Instant::now(); let camera = Camera { Position: Point3::new(0.0, 0.40, 1.0), Pitch: -20.0, ..Camera::default() }; let tempData = tempData { projection: perspective(Deg(45.0), 1600.0/ 900.0, 0.1, 100.0), spinSpeed: 1.0, current_rad: 1.0, currentFrame: 0.0, deltaTime: 0.0, lastFrame: 0.0 }; let mut imgui = imgui::Context::create(); imgui .fonts() .add_font(&[imgui::FontSource::DefaultFontData {config: None}]); let mut platform = SdlPlatform::init(&mut imgui); let mut renderer = match AutoRenderer::initialize(gl.clone(), &mut imgui) { Ok(ret) => ret, Err(s) => panic!("Failed to initialize Imgui Platform Renderer: {}", s), }; Scene{ gl, Car, camera, imgui, imgui_rend: renderer, imgui_plat: platform, shaders: vec![shader], time, tempData, } } }