Skip to content

Commit

Permalink
Merge pull request #8 from NathanaelG1/586_SceneGizmo
Browse files Browse the repository at this point in the history
#586 scene gizmo
  • Loading branch information
NathanaelG1 authored Jul 13, 2024
2 parents 39f593f + e6f87f5 commit 8c1d60f
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 15 deletions.
19 changes: 13 additions & 6 deletions editor/src/scene_viewer/gizmo.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ use crate::fyrox::{
sstorage::ImmutableString,
},
engine::Engine,
gui::message::ButtonState,
material::{Material, MaterialResource, PropertyValue},
resource::texture::{TextureResource, TextureResourceExtension},
scene::{
Expand Down Expand Up @@ -50,6 +51,7 @@ pub struct SceneGizmo {
pub pos_z: Handle<Node>,
pub neg_z: Handle<Node>,
pub center: Handle<Node>,
pub last_click_position: Vector2<f32>,
}

fn make_cone(transform: Matrix4<f32>, color: Color, graph: &mut Graph) -> Handle<Node> {
Expand Down Expand Up @@ -207,6 +209,7 @@ impl SceneGizmo {
pos_z,
neg_z,
center,
last_click_position: Vector2::default(),
}
}

Expand Down Expand Up @@ -275,7 +278,8 @@ impl SceneGizmo {
&mut self,
pos: Vector2<f32>,
engine: &mut Engine,
camera_controller: Option<&mut CameraController>,
camera_controller: &mut CameraController,
left_mouse_button: ButtonState,
) {
let graph = &engine.scenes[self.scene].graph;
let closest = self.pick(pos, engine);
Expand All @@ -302,14 +306,17 @@ impl SceneGizmo {
},
)
}

if let Some(camera_controller) = camera_controller {
camera_controller.yaw = pos.x * 0.1;
camera_controller.pitch = pos.y * 0.1;
if left_mouse_button == ButtonState::Pressed {
let delta = pos - self.last_click_position;
if delta.magnitude() > 0.1 {
camera_controller.yaw = delta.x * 0.1;
camera_controller.pitch = delta.y * 0.1;
}
}
}

pub fn on_click(&self, pos: Vector2<f32>, engine: &Engine) -> Option<SceneGizmoAction> {
pub fn on_click(&mut self, pos: Vector2<f32>, engine: &Engine) -> Option<SceneGizmoAction> {
self.last_click_position = pos;
let closest = self.pick(pos, engine);

if closest == self.neg_x {
Expand Down
16 changes: 7 additions & 9 deletions editor/src/scene_viewer/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ use crate::{
formatted_text::WrapMode,
grid::{Column, GridBuilder, Row},
image::{ImageBuilder, ImageMessage},
message::{ButtonState, MessageDirection, MouseButton, UiMessage},
message::{MessageDirection, MouseButton, UiMessage},
numeric::{NumericUpDownBuilder, NumericUpDownMessage},
stack_panel::StackPanelBuilder,
tab_control::{
Expand Down Expand Up @@ -833,14 +833,12 @@ impl SceneViewer {
.first()
.node(self.scene_gizmo_image)
.screen_position();
self.scene_gizmo.on_mouse_move(rel_pos, engine, None);
if state.left == ButtonState::Pressed {
self.scene_gizmo.on_mouse_move(
pos,
engine,
Some(&mut game_scene.camera_controller),
);
}
self.scene_gizmo.on_mouse_move(
rel_pos,
engine,
&mut game_scene.camera_controller,
state.left,
);
}
_ => (),
}
Expand Down

0 comments on commit 8c1d60f

Please sign in to comment.