Skip to content

Commit

Permalink
surface data viewer for surface resource
Browse files Browse the repository at this point in the history
  • Loading branch information
mrDIMAS committed Jun 13, 2024
1 parent 9e6673c commit 615c4a9
Show file tree
Hide file tree
Showing 3 changed files with 74 additions and 3 deletions.
11 changes: 10 additions & 1 deletion editor/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -161,7 +161,7 @@ use std::{

use crate::command::Command;
use crate::export::ExportWindow;
use crate::mesh::MeshControlPanel;
use crate::mesh::{MeshControlPanel, SurfaceDataViewer};
use crate::settings::build::BuildCommand;
use crate::stats::{StatisticsWindow, StatisticsWindowAction};
pub use message::Message;
Expand Down Expand Up @@ -524,6 +524,7 @@ pub struct Editor {
pub highlighter: Option<Rc<RefCell<HighlightRenderPass>>>,
pub export_window: Option<ExportWindow>,
pub statistics_window: Option<StatisticsWindow>,
pub surface_data_viewer: Option<SurfaceDataViewer>,
}

impl Editor {
Expand Down Expand Up @@ -859,6 +860,7 @@ impl Editor {
highlighter: None,
export_window: None,
statistics_window: None,
surface_data_viewer: None,
};

if let Some(data) = startup_data {
Expand Down Expand Up @@ -1160,6 +1162,10 @@ impl Editor {
},
);

if let Some(surface_data_viewer) = self.surface_data_viewer.as_mut() {
surface_data_viewer.handle_ui_message(message, engine);
}

self.build_window.handle_ui_message(
message,
&self.message_sender,
Expand Down Expand Up @@ -2233,6 +2239,9 @@ impl Editor {
if let Some(export_window) = self.export_window.as_mut() {
export_window.update(self.engine.user_interfaces.first_mut());
}
if let Some(surface_data_viewer) = self.surface_data_viewer.as_mut() {
surface_data_viewer.update(&mut self.engine);
}

self.scene_viewer
.pre_update(&self.settings, &mut self.engine);
Expand Down
58 changes: 56 additions & 2 deletions editor/src/mesh.rs
Original file line number Diff line number Diff line change
Expand Up @@ -18,19 +18,22 @@ use crate::{
collider::{ColliderBuilder, ColliderShape, ConvexPolyhedronShape, GeometrySource},
mesh::Mesh,
node::Node,
rigidbody::{RigidBodyBuilder, RigidBodyType},
rigidbody::{RigidBody, RigidBodyBuilder, RigidBodyType},
Scene,
},
},
message::MessageSender,
preview::PreviewPanel,
scene::{
commands::graph::{AddNodeCommand, LinkNodesCommand},
GameScene, Selection,
},
world::graph::selection::GraphSelection,
Message,
};
use fyrox::scene::rigidbody::RigidBody;
use fyrox::gui::widget::WidgetMessage;
use fyrox::scene::mesh::surface::{SurfaceBuilder, SurfaceResource};
use fyrox::scene::mesh::MeshBuilder;

pub struct MeshControlPanel {
scene_viewer_frame: Handle<UiNode>,
Expand Down Expand Up @@ -282,3 +285,54 @@ impl MeshControlPanel {
}
}
}

pub struct SurfaceDataViewer {
pub window: Handle<UiNode>,
preview_panel: PreviewPanel,
}

impl SurfaceDataViewer {
pub fn new(engine: &mut Engine) -> Self {
let preview_panel = PreviewPanel::new(engine, 256, 256);

let ctx = &mut engine.user_interfaces.first_mut().build_ctx();

let window = WindowBuilder::new(WidgetBuilder::new())
.open(false)
.with_content(preview_panel.root)
.build(ctx);

Self {
window,
preview_panel,
}
}

pub fn open(&mut self, surface_data: SurfaceResource, engine: &mut Engine) {
let graph = &mut engine.scenes[self.preview_panel.scene()].graph;
let sphere = MeshBuilder::new(BaseBuilder::new())
.with_surfaces(vec![SurfaceBuilder::new(surface_data).build()])
.build(graph);

self.preview_panel.set_model(sphere, engine);
}

pub fn close_and_destroy(self, engine: &mut Engine) {
engine
.user_interfaces
.first_mut()
.send_message(WidgetMessage::remove(
self.window,
MessageDirection::ToWidget,
));
self.preview_panel.destroy(engine);
}

pub fn handle_ui_message(&mut self, message: &UiMessage, engine: &mut Engine) {
self.preview_panel.handle_message(message, engine)
}

pub fn update(&mut self, engine: &mut Engine) {
self.preview_panel.update(engine)
}
}
8 changes: 8 additions & 0 deletions editor/src/preview.rs
Original file line number Diff line number Diff line change
Expand Up @@ -416,4 +416,12 @@ impl PreviewPanel {
pub fn model(&self) -> Handle<Node> {
self.model
}

pub fn destroy(self, engine: &mut Engine) {
engine
.user_interfaces
.first_mut()
.send_message(WidgetMessage::remove(self.root, MessageDirection::ToWidget));
engine.scenes.remove(self.scene);
}
}

0 comments on commit 615c4a9

Please sign in to comment.