Multiple edit

This commit is contained in:
Piotr 2020-09-25 18:55:27 +02:00
parent 5c82231b95
commit 6278aabb97
3 changed files with 29 additions and 42 deletions

View File

@ -13,30 +13,34 @@ pub struct ExampleClient {
shader: shader::Shader, shader: shader::Shader,
show_object_info: bool, show_object_info: bool,
show_camera_info: bool, show_camera_info: bool,
object_info_id: i32,
} }
impl ExampleClient { impl ExampleClient {
pub fn create() -> ExampleClient { pub fn create() -> ExampleClient {
let tree = ModelComponent { let tree = ModelComponent {
transform: Transform{ position: vec3(10.0,0.0,26.0), transform: Transform {
position: vec3(10.0, 0.0, 26.0),
scale: vec3(2.5, 2.5, 2.5), scale: vec3(2.5, 2.5, 2.5),
..Transform::default()}, ..Transform::default()
model: model::Model::new_ext("resources/objects/tree/tree_6_d.obj", },
Some("tree_e.png")), model: model::Model::new_ext("resources/objects/tree/tree_6_d.obj", Some("tree_e.png")),
}; };
let tree2 = ModelComponent { let tree2 = ModelComponent {
transform: Transform{ position: vec3(-9.0,0.0,-15.0), transform: Transform {
position: vec3(-9.0, 0.0, -15.0),
scale: vec3(2.5, 2.5, 2.5), scale: vec3(2.5, 2.5, 2.5),
..Transform::default()}, ..Transform::default()
model: model::Model::new_ext("resources/objects/tree/tree_6_c.obj", },
Some("tree_e.png")), model: model::Model::new_ext("resources/objects/tree/tree_6_c.obj", Some("tree_e.png")),
}; };
let tree3 = ModelComponent { let tree3 = ModelComponent {
transform: Transform{ position: vec3(15.0,0.0,-7.0), transform: Transform {
position: vec3(15.0, 0.0, -7.0),
scale: vec3(2.5, 2.5, 2.5), scale: vec3(2.5, 2.5, 2.5),
..Transform::default()}, ..Transform::default()
model: model::Model::new_ext("resources/objects/tree/tree_6_c.obj", },
Some("tree_e.png")), model: model::Model::new_ext("resources/objects/tree/tree_6_c.obj", Some("tree_e.png")),
}; };
let ground = ModelComponent { let ground = ModelComponent {
transform: Transform { transform: Transform {
@ -50,9 +54,10 @@ impl ExampleClient {
model: model::Model::new("resources/objects/robot/robot.obj"), model: model::Model::new("resources/objects/robot/robot.obj"),
}; };
ExampleClient { ExampleClient {
object_info_id: 0,
show_camera_info: true, show_camera_info: true,
show_object_info: false, show_object_info: false,
models: vec!(tree,tree2,tree3,ground, robot), models: vec![tree, tree2, tree3, ground, robot],
camera: Camera { camera: Camera {
position: Point3::new(0.0, 8.0, 13.0), position: Point3::new(0.0, 8.0, 13.0),
front: vec3(0.0, -0.4, -1.0), front: vec3(0.0, -0.4, -1.0),
@ -79,7 +84,7 @@ impl Client for ExampleClient {
Deg(self.camera.zoom), Deg(self.camera.zoom),
consts::SCR_WIDTH as f32 / consts::SCR_HEIGHT as f32, consts::SCR_WIDTH as f32 / consts::SCR_HEIGHT as f32,
0.1, 0.1,
100.0, 1000.0,
); );
let view = self.camera.get_view_matrix(); let view = self.camera.get_view_matrix();
self.shader.set_mat4(c_str!("projection"), &projection); self.shader.set_mat4(c_str!("projection"), &projection);
@ -132,26 +137,6 @@ impl Client for ExampleClient {
} }
menu.end(ui); menu.end(ui);
} }
if let Some(menu) = ui.begin_menu(im_str!("Edit"), true) {
MenuItem::new(im_str!("Undo"))
.shortcut(im_str!("CTRL+Z"))
.build(ui);
MenuItem::new(im_str!("Redo"))
.shortcut(im_str!("CTRL+Y"))
.enabled(false)
.build(ui);
ui.separator();
MenuItem::new(im_str!("Cut"))
.shortcut(im_str!("CTRL+X"))
.build(ui);
MenuItem::new(im_str!("Copy"))
.shortcut(im_str!("CTRL+C"))
.build(ui);
MenuItem::new(im_str!("Paste"))
.shortcut(im_str!("CTRL+V"))
.build(ui);
menu.end(ui);
}
menu_bar.end(ui); menu_bar.end(ui);
} }
if self.show_camera_info { if self.show_camera_info {
@ -172,12 +157,17 @@ impl Client for ExampleClient {
}); });
} }
if self.show_object_info { if self.show_object_info {
let mut id = self.object_info_id;
let max: i32 = self.models.len() as i32 - 1;
println!("max: {}", max);
let mut show_window = self.show_object_info; let mut show_window = self.show_object_info;
Window::new(im_str!("Object info")) Window::new(im_str!("Object info"))
.size([250.0, 250.0], Condition::FirstUseEver) .size([250.0, 250.0], Condition::FirstUseEver)
.opened(&mut show_window) .opened(&mut show_window)
.build(&ui, || { .build(&ui, || {
let mut selected_mut = vec![&mut self.models[0].transform]; ui.drag_int(im_str!("id"), &mut id).min(0).max(max).build();
// id = if id < 0 { 0 } else if id > max { max } else { id };
let mut selected_mut = vec![&mut self.models[id as usize].transform];
<Transform as imgui_inspect::InspectRenderStruct<Transform>>::render_mut( <Transform as imgui_inspect::InspectRenderStruct<Transform>>::render_mut(
&mut selected_mut, &mut selected_mut,
"Object info", "Object info",
@ -185,6 +175,7 @@ impl Client for ExampleClient {
&InspectArgsStruct::default(), &InspectArgsStruct::default(),
); );
}); });
self.object_info_id = id;
self.show_object_info = show_window; self.show_object_info = show_window;
} }
} }

View File

@ -65,7 +65,7 @@ impl Engine {
self.client.debug_draw(&ui); self.client.debug_draw(&ui);
use imgui::*; use imgui::*;
let fps = 1.0 / delta_time; let fps = 1.0 / delta_time;
let size = [280.0, 110.0]; let size = [250.0, 110.0];
let offset = 20.0; let offset = 20.0;
Window::new(im_str!("EngineInfo")) Window::new(im_str!("EngineInfo"))
.size(size, Condition::Always) .size(size, Condition::Always)
@ -80,7 +80,7 @@ impl Engine {
.no_inputs() .no_inputs()
.save_settings(false) .save_settings(false)
.build(&ui, || { .build(&ui, || {
ui.text(im_str!("Hello Rust!")); ui.text("Welcome in doppler world!");
ui.text(format!("FPS: {:.0}", fps)); ui.text(format!("FPS: {:.0}", fps));
ui.separator(); ui.separator();
ui.text(format!("Mouse position: ({:4.1},{:4.1})", last_x, last_y)); ui.text(format!("Mouse position: ({:4.1},{:4.1})", last_x, last_y));

View File

@ -108,11 +108,7 @@ impl Model {
let texture = self.load_material_texture(&diffuse_path.unwrap(), "texture_diffuse"); let texture = self.load_material_texture(&diffuse_path.unwrap(), "texture_diffuse");
textures.push(texture); textures.push(texture);
} else { } else {
println!( println!("There are no materials for: {}", path.display());
"There are no materials with id {} for: {}",
mesh.material_id.unwrap_or(404usize),
path.display()
);
} }
self.meshes.push(Mesh::new(vertices, indices, textures)); self.meshes.push(Mesh::new(vertices, indices, textures));