From 1770419bbb2589f57cc69d66dad5ec0e3fffa601 Mon Sep 17 00:00:00 2001 From: Asteroth Date: Fri, 29 Sep 2023 04:10:49 -0400 Subject: [PATCH] docking bay improvements --- pof/src/parse.rs | 2 +- src/dockdemo.png | Bin 0 -> 48862 bytes src/main.rs | 75 +++++++++++++++++++++++++++++-------- src/ui.rs | 19 ++++++++-- src/ui_properties_panel.rs | 2 + 5 files changed, 79 insertions(+), 19 deletions(-) create mode 100644 src/dockdemo.png diff --git a/pof/src/parse.rs b/pof/src/parse.rs index 20528a5..da60d02 100644 --- a/pof/src/parse.rs +++ b/pof/src/parse.rs @@ -1083,7 +1083,7 @@ trait ParseCtx<'a> { let up = self.up(); let offset = Vec3d::from(center).from_coord(up); - println!("{:?}", node.name()); + // println!("{:?}", node.name()); let name = match node.name() { Some(name) => name, None => continue, diff --git a/src/dockdemo.png b/src/dockdemo.png new file mode 100644 index 0000000000000000000000000000000000000000..99bec289c318eb59a6f7baa9ed7026105e3245ad GIT binary patch literal 48862 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

n> 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 b)cgMdoii@FylK|V00000NkvXXu0mjf1HU#G literal 0 HcmV?d00001 diff --git a/src/main.rs b/src/main.rs index a998210..4c4c6ff 100644 --- a/src/main.rs +++ b/src/main.rs @@ -25,8 +25,8 @@ use glium::{ use glm::Mat4x4; use native_dialog::FileDialog; use pof::{ - properties_get_field, BspData, Insignia, NameLink, NormalId, ObjVec, ObjectId, Parser, PolyVertex, Polygon, ShieldData, SubObject, TextureId, - Vec3d, VertexId, + properties_get_field, BspData, Insignia, NameLink, NormalId, NormalVec3, ObjVec, ObjectId, Parser, PolyVertex, Polygon, ShieldData, SubObject, + TextureId, Vec3d, VertexId, }; use simplelog::*; use std::{ @@ -661,18 +661,13 @@ fn main() { let event_loop = glutin::event_loop::EventLoopBuilder::with_user_event().build(); let display = create_display(&event_loop); - let mut pt_gui = PofToolsGui::new(&display); - - // this creates the raw bytes from png, how i make the icon - // File::create("zforward.raw") - // .unwrap() - // .write_all(&image::open("zforward.png").unwrap().into_rgba8().to_vec()); let mut args = std::env::args(); args.next(); let path = args.next().map(|arg| PathBuf::from(arg.as_str())); let mut egui = egui_glium::EguiGlium::new(&display, &event_loop); + let mut pt_gui = PofToolsGui::new(&display, &egui.egui_ctx); pt_gui.start_loading_model(path); @@ -1436,6 +1431,8 @@ fn main() { .unwrap(); } } + + // draw arrowheads for arrowhead in &pt_gui.arrowheads { let vert_matrix: [[f32; 4]; 4] = (perspective_matrix * view_mat * arrowhead.transform).into(); let uniforms = glium::uniform! { @@ -1448,7 +1445,22 @@ fn main() { &pt_gui.graphics.arrowhead_indices, &pt_gui.graphics.arrowhead_shader, &uniforms, - &pt_gui.graphics.arrowhead_draw_params, + &pt_gui.graphics.arrowhead_params, + ) + .unwrap(); + + // darker, reverse depth, as above + let uniforms = glium::uniform! { + vert_matrix: vert_matrix, + lollipop_color: arrowhead.color.map(|col| col * 0.25 ), + }; + target + .draw( + &pt_gui.graphics.arrowhead_verts, + &pt_gui.graphics.arrowhead_indices, + &pt_gui.graphics.arrowhead_shader, + &uniforms, + &pt_gui.graphics.arrowhead_rev_depth_params, ) .unwrap(); } @@ -1943,6 +1955,13 @@ impl PofToolsGui { None }; + let get_matrix = |pos: Vec3d, dir: NormalVec3, scale| { + let mut m = glm::translation::(&pos.into()); + m *= dir.0.to_rotation_matrix(); + m *= glm::scaling(&glm::vec3(scale * 0.5, scale * 0.5, scale * 0.5)); + m + }; + const COLORS: [[f32; 4]; 3] = [LOLLIPOP_UNSELECTED_COLOR, LOLLIPOP_SELECTED_POINT_COLOR, LOLLIPOP_SELECTED_BANK_COLOR]; self.lollipops = build_lollipops( &COLORS, @@ -1953,11 +1972,28 @@ impl PofToolsGui { if hover_lollipop == Some(TreeValue::DockingBays(DockingTreeValue::Bay(bay_idx))) { radius *= 2. }; - let fvec = docking_bay.fvec.0 * radius * 3.0; - let uvec = docking_bay.uvec.0 * radius * 3.0; + let fvec = docking_bay.fvec.0 * radius * 2.0; + let uvec = docking_bay.uvec.0 * radius * 2.0; + // while we're here, add the arrowheads to indicate the directions let (selection1, selection2) = if selected_bank == Some(bay_idx) { + self.arrowheads.push(GlArrowhead { + color: LOLLIPOP_SELECTED_BANK_COLOR, + transform: get_matrix(position + fvec, docking_bay.fvec, radius * 1.5), + }); + self.arrowheads.push(GlArrowhead { + color: LOLLIPOP_SELECTED_POINT_COLOR, + transform: get_matrix(position + uvec, docking_bay.uvec, radius * 1.5), + }); (SELECTED_BANK, SELECTED_POINT) } else { + self.arrowheads.push(GlArrowhead { + color: LOLLIPOP_UNSELECTED_COLOR, + transform: get_matrix(position + fvec, docking_bay.fvec, radius * 1.5), + }); + self.arrowheads.push(GlArrowhead { + color: LOLLIPOP_UNSELECTED_COLOR, + transform: get_matrix(position + uvec, docking_bay.uvec, radius * 1.5), + }); (UNSELECTED, UNSELECTED) }; @@ -2209,7 +2245,8 @@ struct Graphics { frustum_verts: VertexBuffer, default_material_draw_params: glium::DrawParameters<'static>, - arrowhead_draw_params: glium::DrawParameters<'static>, + arrowhead_params: glium::DrawParameters<'static>, + arrowhead_rev_depth_params: glium::DrawParameters<'static>, shield_draw_params: glium::DrawParameters<'static>, wireframe_params: glium::DrawParameters<'static>, lollipop_params: glium::DrawParameters<'static>, @@ -2261,13 +2298,21 @@ impl Graphics { backface_culling: glium::draw_parameters::BackfaceCullingMode::CullCounterClockwise, ..Default::default() }, - arrowhead_draw_params: glium::DrawParameters { + arrowhead_params: glium::DrawParameters { depth: glium::Depth { - test: glium::draw_parameters::DepthTest::Overwrite, + test: glium::draw_parameters::DepthTest::IfLess, + write: false, + ..Default::default() + }, + backface_culling: glium::draw_parameters::BackfaceCullingMode::CullCounterClockwise, + ..Default::default() + }, + arrowhead_rev_depth_params: glium::DrawParameters { + depth: glium::Depth { + test: glium::draw_parameters::DepthTest::IfMore, write: false, ..Default::default() }, - line_width: Some(1.0), backface_culling: glium::draw_parameters::BackfaceCullingMode::CullCounterClockwise, ..Default::default() }, diff --git a/src/ui.rs b/src/ui.rs index 8d30b59..7b0e358 100644 --- a/src/ui.rs +++ b/src/ui.rs @@ -509,7 +509,7 @@ pub(crate) struct PofToolsGui { pub ui_state: UiState, pub display_mode: DisplayMode, pub glow_point_simulation: bool, - + pub dock_demo_img: egui::TextureHandle, pub camera_pitch: f32, pub camera_heading: f32, pub camera_scale: f32, @@ -545,7 +545,7 @@ impl std::ops::DerefMut for PofToolsGui { } } impl PofToolsGui { - pub fn new(display: &Display) -> Self { + pub fn new(display: &Display, ctx: &egui::Context) -> Self { Self { model: Box::new(Model { pof_model: pof::Model::default(), @@ -557,6 +557,19 @@ impl PofToolsGui { ui_state: Default::default(), display_mode: DisplayMode::Textured, glow_point_simulation: Default::default(), + dock_demo_img: { + ctx.load_texture( + "my-image", + { + let image = image::load_from_memory(include_bytes!("dockdemo.png")).unwrap(); + let size = [image.width() as _, image.height() as _]; + let image_buffer = image.to_rgba8(); + let pixels = image_buffer.as_flat_samples(); + egui::ColorImage::from_rgba_unmultiplied(size, pixels.as_slice()) + }, + egui::TextureFilter::Linear, + ) + }, camera_pitch: Default::default(), camera_heading: Default::default(), camera_scale: Default::default(), @@ -886,7 +899,7 @@ impl PofToolsGui { if ui.button("Open").clicked() { self.start_loading_model(None); - ui.output().cursor_icon = egui::CursorIcon::Wait; + // ui.output().cursor_icon = egui::CursorIcon::Wait; ui.close_menu(); } diff --git a/src/ui_properties_panel.rs b/src/ui_properties_panel.rs index fdbe99c..70c58c8 100644 --- a/src/ui_properties_panel.rs +++ b/src/ui_properties_panel.rs @@ -2080,6 +2080,8 @@ impl PofToolsGui { job.append(".", 0.0, TextFormat::default()); ui.label(job); + ui.image(&self.dock_demo_img, self.dock_demo_img.size_vec2()); + if let Some(response) = bay_idx_response { let new_idx = response.get_new_ui_idx(&self.model.docking_bays);