mirror of
https://github.com/storytold/storyteller-bevy.git
synced 2026-10-14 23:53:14 +00:00
cargo fmt
This commit is contained in:
@@ -100,7 +100,6 @@ fn camera_control_kinematic(
|
||||
Lifecycle::Stop => any_stopped = true,
|
||||
}
|
||||
|
||||
|
||||
match motion {
|
||||
Pan(delta) => do_pan(proj, &window, *delta, &mut xform, &mut controller),
|
||||
Zoom(delta) => do_zoom(&window, *delta, &mut xform, &mut controller),
|
||||
|
||||
+8
-12
@@ -13,9 +13,8 @@ impl Plugin for StudioInputPlugin {
|
||||
fn build(&self, app: &mut App) {
|
||||
app.add_event::<InputAction>();
|
||||
|
||||
|
||||
// Reading each frame of the mouse delta allows
|
||||
// to get rid of the bug that delta is counted from the last reading,
|
||||
// to get rid of the bug that delta is counted from the last reading,
|
||||
// which leads to camera jumps if you move the mouse between clicks
|
||||
app.add_systems(
|
||||
PreUpdate,
|
||||
@@ -32,7 +31,7 @@ impl Plugin for StudioInputPlugin {
|
||||
translate_debug_toggle,
|
||||
translate_dcc_camera_events,
|
||||
translate_fps_camera_events,
|
||||
send_undo_event
|
||||
send_undo_event,
|
||||
)
|
||||
.in_set(StudioInputSystem)
|
||||
.after(bevy::input::InputSystem)
|
||||
@@ -55,7 +54,7 @@ pub enum Lifecycle {
|
||||
pub enum Action {
|
||||
Camera(CameraMotion),
|
||||
Selection(Selection),
|
||||
ToggleDebug
|
||||
ToggleDebug,
|
||||
}
|
||||
|
||||
#[derive(Clone, Copy)]
|
||||
@@ -85,7 +84,6 @@ impl From<Selection> for Action {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// TODO: Make the bindings of raw device inputs to InputActions configurable
|
||||
|
||||
fn translate_selection_events(keyboard: Res<Input<KeyCode>>, mut input: EventWriter<InputAction>) {
|
||||
@@ -308,22 +306,20 @@ impl LastFrameMouseDelta {
|
||||
}
|
||||
}
|
||||
|
||||
fn read_mouse_delta(mut mouse_motion: EventReader<MouseMotion>, mut last_delta: ResMut<LastFrameMouseDelta>) {
|
||||
fn read_mouse_delta(
|
||||
mut mouse_motion: EventReader<MouseMotion>,
|
||||
mut last_delta: ResMut<LastFrameMouseDelta>,
|
||||
) {
|
||||
let delta = mouse_motion
|
||||
.read()
|
||||
.fold(Vec2::ZERO, |accum, current| accum + current.delta);
|
||||
last_delta.0 = delta;
|
||||
}
|
||||
|
||||
|
||||
// TODO: Make it configurable
|
||||
fn send_undo_event(
|
||||
mut events : EventWriter<UndoRedo>,
|
||||
keyboard: Res<Input<KeyCode>>,
|
||||
) {
|
||||
fn send_undo_event(mut events: EventWriter<UndoRedo>, keyboard: Res<Input<KeyCode>>) {
|
||||
if keyboard.pressed(KeyCode::ControlLeft) && keyboard.just_pressed(KeyCode::Z) {
|
||||
events.send(UndoRedo::Undo);
|
||||
info!("Undo event sent");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -20,143 +20,148 @@ pub(super) fn spawn_combo_translation_rotation_gizmo(
|
||||
meshes: &GizmoMeshes,
|
||||
mats: &GizmoMats,
|
||||
) {
|
||||
cmd.spawn(TransformGizmoBundle::new(target, target_global_transform, space, normalizing_scale))
|
||||
.with_children(|cmd| {
|
||||
use super::{ROT_X, ROT_Y, ROT_Z};
|
||||
cmd.spawn(TransformGizmoBundle::new(
|
||||
target,
|
||||
target_global_transform,
|
||||
space,
|
||||
normalizing_scale,
|
||||
))
|
||||
.with_children(|cmd| {
|
||||
use super::{ROT_X, ROT_Y, ROT_Z};
|
||||
|
||||
// Center sphere
|
||||
cmd.spawn((
|
||||
NotShadowCaster,
|
||||
RenderLayers::layer(GIZMO_RENDER_LAYER),
|
||||
TranslationWidget::ScreenSpace,
|
||||
MaterialMeshBundle {
|
||||
mesh: meshes.translate_ss.clone(),
|
||||
material: mats.translate_ss.clone(),
|
||||
transform: Transform::IDENTITY,
|
||||
..default()
|
||||
},
|
||||
On::<Pointer<Over>>::run(on_gizmo_element_hover),
|
||||
On::<Pointer<Out>>::run(on_gizmo_element_unhover),
|
||||
On::<Pointer<DragStart>>::run(on_translation_start),
|
||||
On::<Pointer<Drag>>::run(on_translate),
|
||||
On::<Pointer<DragEnd>>::run(on_translation_end),
|
||||
));
|
||||
// Center sphere
|
||||
cmd.spawn((
|
||||
NotShadowCaster,
|
||||
RenderLayers::layer(GIZMO_RENDER_LAYER),
|
||||
TranslationWidget::ScreenSpace,
|
||||
MaterialMeshBundle {
|
||||
mesh: meshes.translate_ss.clone(),
|
||||
material: mats.translate_ss.clone(),
|
||||
transform: Transform::IDENTITY,
|
||||
..default()
|
||||
},
|
||||
On::<Pointer<Over>>::run(on_gizmo_element_hover),
|
||||
On::<Pointer<Out>>::run(on_gizmo_element_unhover),
|
||||
On::<Pointer<DragStart>>::run(on_translation_start),
|
||||
On::<Pointer<Drag>>::run(on_translate),
|
||||
On::<Pointer<DragEnd>>::run(on_translation_end),
|
||||
));
|
||||
|
||||
// Rotate X
|
||||
cmd.spawn((
|
||||
NotShadowCaster,
|
||||
RenderLayers::layer(GIZMO_RENDER_LAYER),
|
||||
RotationWidget::Axis(Vec3::X),
|
||||
MaterialMeshBundle {
|
||||
mesh: meshes.rotate_ring.clone(),
|
||||
material: mats.rotate_x.clone(),
|
||||
transform: Transform::from_rotation(ROT_X),
|
||||
..default()
|
||||
},
|
||||
On::<Pointer<Over>>::run(on_gizmo_element_hover),
|
||||
On::<Pointer<Out>>::run(on_gizmo_element_unhover),
|
||||
On::<Pointer<DragStart>>::run(on_rotation_start),
|
||||
On::<Pointer<Drag>>::run(on_rotate),
|
||||
On::<Pointer<DragEnd>>::run(on_rotation_end),
|
||||
));
|
||||
// Translate X
|
||||
cmd.spawn((
|
||||
NotShadowCaster,
|
||||
RenderLayers::layer(GIZMO_RENDER_LAYER),
|
||||
TranslationWidget::Axis(Vec3::X),
|
||||
MaterialMeshBundle {
|
||||
mesh: meshes.translate_arrow.clone(),
|
||||
material: mats.translate_x.clone(),
|
||||
transform: Transform {
|
||||
rotation: ROT_X,
|
||||
translation: vec3(1.2, 0., 0.),
|
||||
..default()
|
||||
},
|
||||
..default()
|
||||
},
|
||||
On::<Pointer<Over>>::run(on_gizmo_element_hover),
|
||||
On::<Pointer<Out>>::run(on_gizmo_element_unhover),
|
||||
On::<Pointer<DragStart>>::run(on_translation_start),
|
||||
On::<Pointer<Drag>>::run(on_translate),
|
||||
On::<Pointer<DragEnd>>::run(on_translation_end),
|
||||
));
|
||||
// Rotate X
|
||||
cmd.spawn((
|
||||
NotShadowCaster,
|
||||
RenderLayers::layer(GIZMO_RENDER_LAYER),
|
||||
RotationWidget::Axis(Vec3::X),
|
||||
MaterialMeshBundle {
|
||||
mesh: meshes.rotate_ring.clone(),
|
||||
material: mats.rotate_x.clone(),
|
||||
transform: Transform::from_rotation(ROT_X),
|
||||
..default()
|
||||
},
|
||||
On::<Pointer<Over>>::run(on_gizmo_element_hover),
|
||||
On::<Pointer<Out>>::run(on_gizmo_element_unhover),
|
||||
On::<Pointer<DragStart>>::run(on_rotation_start),
|
||||
On::<Pointer<Drag>>::run(on_rotate),
|
||||
On::<Pointer<DragEnd>>::run(on_rotation_end),
|
||||
));
|
||||
// Translate X
|
||||
cmd.spawn((
|
||||
NotShadowCaster,
|
||||
RenderLayers::layer(GIZMO_RENDER_LAYER),
|
||||
TranslationWidget::Axis(Vec3::X),
|
||||
MaterialMeshBundle {
|
||||
mesh: meshes.translate_arrow.clone(),
|
||||
material: mats.translate_x.clone(),
|
||||
transform: Transform {
|
||||
rotation: ROT_X,
|
||||
translation: vec3(1.2, 0., 0.),
|
||||
..default()
|
||||
},
|
||||
..default()
|
||||
},
|
||||
On::<Pointer<Over>>::run(on_gizmo_element_hover),
|
||||
On::<Pointer<Out>>::run(on_gizmo_element_unhover),
|
||||
On::<Pointer<DragStart>>::run(on_translation_start),
|
||||
On::<Pointer<Drag>>::run(on_translate),
|
||||
On::<Pointer<DragEnd>>::run(on_translation_end),
|
||||
));
|
||||
|
||||
// Rotate Y
|
||||
cmd.spawn((
|
||||
NotShadowCaster,
|
||||
RenderLayers::layer(GIZMO_RENDER_LAYER),
|
||||
RotationWidget::Axis(Vec3::Y),
|
||||
MaterialMeshBundle {
|
||||
mesh: meshes.rotate_ring.clone(),
|
||||
material: mats.rotate_y.clone(),
|
||||
transform: Transform::from_rotation(ROT_Y),
|
||||
..default()
|
||||
},
|
||||
On::<Pointer<Over>>::run(on_gizmo_element_hover),
|
||||
On::<Pointer<Out>>::run(on_gizmo_element_unhover),
|
||||
On::<Pointer<DragStart>>::run(on_rotation_start),
|
||||
On::<Pointer<Drag>>::run(on_rotate),
|
||||
On::<Pointer<DragEnd>>::run(on_rotation_end),
|
||||
));
|
||||
// Translate Y
|
||||
cmd.spawn((
|
||||
NotShadowCaster,
|
||||
RenderLayers::layer(GIZMO_RENDER_LAYER),
|
||||
TranslationWidget::Axis(Vec3::Y),
|
||||
MaterialMeshBundle {
|
||||
mesh: meshes.translate_arrow.clone(),
|
||||
material: mats.translate_y.clone(),
|
||||
transform: Transform {
|
||||
rotation: ROT_Y,
|
||||
translation: vec3(0., 1.2, 0.),
|
||||
..default()
|
||||
},
|
||||
..default()
|
||||
},
|
||||
On::<Pointer<Over>>::run(on_gizmo_element_hover),
|
||||
On::<Pointer<Out>>::run(on_gizmo_element_unhover),
|
||||
On::<Pointer<DragStart>>::run(on_translation_start),
|
||||
On::<Pointer<Drag>>::run(on_translate),
|
||||
On::<Pointer<DragEnd>>::run(on_translation_end),
|
||||
));
|
||||
// Rotate Y
|
||||
cmd.spawn((
|
||||
NotShadowCaster,
|
||||
RenderLayers::layer(GIZMO_RENDER_LAYER),
|
||||
RotationWidget::Axis(Vec3::Y),
|
||||
MaterialMeshBundle {
|
||||
mesh: meshes.rotate_ring.clone(),
|
||||
material: mats.rotate_y.clone(),
|
||||
transform: Transform::from_rotation(ROT_Y),
|
||||
..default()
|
||||
},
|
||||
On::<Pointer<Over>>::run(on_gizmo_element_hover),
|
||||
On::<Pointer<Out>>::run(on_gizmo_element_unhover),
|
||||
On::<Pointer<DragStart>>::run(on_rotation_start),
|
||||
On::<Pointer<Drag>>::run(on_rotate),
|
||||
On::<Pointer<DragEnd>>::run(on_rotation_end),
|
||||
));
|
||||
// Translate Y
|
||||
cmd.spawn((
|
||||
NotShadowCaster,
|
||||
RenderLayers::layer(GIZMO_RENDER_LAYER),
|
||||
TranslationWidget::Axis(Vec3::Y),
|
||||
MaterialMeshBundle {
|
||||
mesh: meshes.translate_arrow.clone(),
|
||||
material: mats.translate_y.clone(),
|
||||
transform: Transform {
|
||||
rotation: ROT_Y,
|
||||
translation: vec3(0., 1.2, 0.),
|
||||
..default()
|
||||
},
|
||||
..default()
|
||||
},
|
||||
On::<Pointer<Over>>::run(on_gizmo_element_hover),
|
||||
On::<Pointer<Out>>::run(on_gizmo_element_unhover),
|
||||
On::<Pointer<DragStart>>::run(on_translation_start),
|
||||
On::<Pointer<Drag>>::run(on_translate),
|
||||
On::<Pointer<DragEnd>>::run(on_translation_end),
|
||||
));
|
||||
|
||||
// Rotate Z
|
||||
cmd.spawn((
|
||||
NotShadowCaster,
|
||||
RenderLayers::layer(GIZMO_RENDER_LAYER),
|
||||
RotationWidget::Axis(Vec3::Z),
|
||||
MaterialMeshBundle {
|
||||
mesh: meshes.rotate_ring.clone(),
|
||||
material: mats.rotate_z.clone(),
|
||||
transform: Transform::from_rotation(ROT_Z),
|
||||
..default()
|
||||
},
|
||||
On::<Pointer<Over>>::run(on_gizmo_element_hover),
|
||||
On::<Pointer<Out>>::run(on_gizmo_element_unhover),
|
||||
On::<Pointer<DragStart>>::run(on_rotation_start),
|
||||
On::<Pointer<Drag>>::run(on_rotate),
|
||||
On::<Pointer<DragEnd>>::run(on_rotation_end),
|
||||
));
|
||||
// Translate Z
|
||||
cmd.spawn((
|
||||
NotShadowCaster,
|
||||
RenderLayers::layer(GIZMO_RENDER_LAYER),
|
||||
TranslationWidget::Axis(Vec3::Z),
|
||||
MaterialMeshBundle {
|
||||
mesh: meshes.translate_arrow.clone(),
|
||||
material: mats.translate_z.clone(),
|
||||
transform: Transform {
|
||||
rotation: ROT_Z,
|
||||
translation: vec3(0., 0., 1.2),
|
||||
..default()
|
||||
},
|
||||
..default()
|
||||
},
|
||||
On::<Pointer<Over>>::run(on_gizmo_element_hover),
|
||||
On::<Pointer<Out>>::run(on_gizmo_element_unhover),
|
||||
On::<Pointer<DragStart>>::run(on_translation_start),
|
||||
On::<Pointer<Drag>>::run(on_translate),
|
||||
On::<Pointer<DragEnd>>::run(on_translation_end),
|
||||
));
|
||||
});
|
||||
// Rotate Z
|
||||
cmd.spawn((
|
||||
NotShadowCaster,
|
||||
RenderLayers::layer(GIZMO_RENDER_LAYER),
|
||||
RotationWidget::Axis(Vec3::Z),
|
||||
MaterialMeshBundle {
|
||||
mesh: meshes.rotate_ring.clone(),
|
||||
material: mats.rotate_z.clone(),
|
||||
transform: Transform::from_rotation(ROT_Z),
|
||||
..default()
|
||||
},
|
||||
On::<Pointer<Over>>::run(on_gizmo_element_hover),
|
||||
On::<Pointer<Out>>::run(on_gizmo_element_unhover),
|
||||
On::<Pointer<DragStart>>::run(on_rotation_start),
|
||||
On::<Pointer<Drag>>::run(on_rotate),
|
||||
On::<Pointer<DragEnd>>::run(on_rotation_end),
|
||||
));
|
||||
// Translate Z
|
||||
cmd.spawn((
|
||||
NotShadowCaster,
|
||||
RenderLayers::layer(GIZMO_RENDER_LAYER),
|
||||
TranslationWidget::Axis(Vec3::Z),
|
||||
MaterialMeshBundle {
|
||||
mesh: meshes.translate_arrow.clone(),
|
||||
material: mats.translate_z.clone(),
|
||||
transform: Transform {
|
||||
rotation: ROT_Z,
|
||||
translation: vec3(0., 0., 1.2),
|
||||
..default()
|
||||
},
|
||||
..default()
|
||||
},
|
||||
On::<Pointer<Over>>::run(on_gizmo_element_hover),
|
||||
On::<Pointer<Out>>::run(on_gizmo_element_unhover),
|
||||
On::<Pointer<DragStart>>::run(on_translation_start),
|
||||
On::<Pointer<Drag>>::run(on_translate),
|
||||
On::<Pointer<DragEnd>>::run(on_translation_end),
|
||||
));
|
||||
});
|
||||
}
|
||||
|
||||
@@ -5,7 +5,7 @@ use crate::interaction::TransformSpace;
|
||||
|
||||
#[derive(Component, Reflect)]
|
||||
pub(super) struct TransformGizmo {
|
||||
pub(super) target : Entity,
|
||||
pub(super) target: Entity,
|
||||
pub(super) transform_space: TransformSpace,
|
||||
}
|
||||
|
||||
@@ -24,20 +24,19 @@ pub(super) struct InitialTransform(pub GlobalTransform);
|
||||
|
||||
impl TransformGizmoBundle {
|
||||
pub fn new(
|
||||
target : Entity,
|
||||
target_global_transform : &GlobalTransform,
|
||||
target: Entity,
|
||||
target_global_transform: &GlobalTransform,
|
||||
space: TransformSpace,
|
||||
normalizing_scale: f32,
|
||||
) -> Self {
|
||||
let name = Name::new("TransformGizmo");
|
||||
let marker = TransformGizmo {
|
||||
target,
|
||||
transform_space: space
|
||||
transform_space: space,
|
||||
};
|
||||
|
||||
match space {
|
||||
TransformSpace::Local => {
|
||||
|
||||
let mut transform = target_global_transform.compute_transform();
|
||||
transform.scale = Vec3::splat(normalizing_scale);
|
||||
|
||||
@@ -45,14 +44,13 @@ impl TransformGizmoBundle {
|
||||
name,
|
||||
marker,
|
||||
spatial: SpatialBundle {
|
||||
global_transform : GlobalTransform::from(transform),
|
||||
global_transform: GlobalTransform::from(transform),
|
||||
transform,
|
||||
..default()
|
||||
},
|
||||
}
|
||||
}
|
||||
TransformSpace::World => {
|
||||
|
||||
let transform = Transform::from_translation(target_global_transform.translation())
|
||||
.with_scale(Vec3::splat(normalizing_scale));
|
||||
|
||||
@@ -60,7 +58,7 @@ impl TransformGizmoBundle {
|
||||
name,
|
||||
marker,
|
||||
spatial: SpatialBundle {
|
||||
global_transform : GlobalTransform::from(transform),
|
||||
global_transform: GlobalTransform::from(transform),
|
||||
transform,
|
||||
..default()
|
||||
},
|
||||
|
||||
@@ -33,10 +33,8 @@ const ROT_Z: Quat = Quat::from_xyzw(CIRC_45, 0., 0., CIRC_45);
|
||||
|
||||
pub struct GizmoPlugin;
|
||||
|
||||
|
||||
impl Plugin for GizmoPlugin {
|
||||
fn build(&self, app: &mut App) {
|
||||
|
||||
app.register_type::<TransformGizmo>();
|
||||
|
||||
app.add_event::<RebuildGizmo>();
|
||||
@@ -60,8 +58,10 @@ impl Plugin for GizmoPlugin {
|
||||
resource_exists::<Selection>()
|
||||
.and_then(not(any_with_component::<TransformGizmo>())),
|
||||
),
|
||||
(update_target_global_trasform, sync_gizmo_transform).chain().after(CameraMotionSystem),
|
||||
normalize_gizmo_scale.after(CameraMotionSystem)
|
||||
(update_target_global_trasform, sync_gizmo_transform)
|
||||
.chain()
|
||||
.after(CameraMotionSystem),
|
||||
normalize_gizmo_scale.after(CameraMotionSystem),
|
||||
),
|
||||
);
|
||||
app.add_systems(
|
||||
@@ -71,10 +71,7 @@ impl Plugin for GizmoPlugin {
|
||||
}
|
||||
}
|
||||
|
||||
fn despawn_existing_gizmo(
|
||||
mut cmd: Commands,
|
||||
q_gizmos: Query<Entity, With<TransformGizmo>>,
|
||||
) {
|
||||
fn despawn_existing_gizmo(mut cmd: Commands, q_gizmos: Query<Entity, With<TransformGizmo>>) {
|
||||
for ent in q_gizmos.iter() {
|
||||
cmd.entity(ent).despawn_recursive();
|
||||
}
|
||||
@@ -142,11 +139,10 @@ fn spawn_gizmo(
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
fn sync_gizmo_transform(
|
||||
mut cmd : Commands,
|
||||
mut q_gizmo : Query<(&mut Transform, &TransformGizmo)>,
|
||||
q_targets : Query<&GlobalTransform>
|
||||
mut cmd: Commands,
|
||||
mut q_gizmo: Query<(&mut Transform, &TransformGizmo)>,
|
||||
q_targets: Query<&GlobalTransform>,
|
||||
) {
|
||||
for (mut transform, gizmo) in q_gizmo.iter_mut() {
|
||||
if let Ok(target) = q_targets.get(gizmo.target) {
|
||||
@@ -155,10 +151,10 @@ fn sync_gizmo_transform(
|
||||
let target_transform = target.compute_transform();
|
||||
transform.translation = target_transform.translation;
|
||||
transform.rotation = target_transform.rotation;
|
||||
},
|
||||
}
|
||||
super::TransformSpace::World => {
|
||||
transform.translation = target.translation();
|
||||
},
|
||||
}
|
||||
}
|
||||
} else {
|
||||
cmd.entity(gizmo.target).despawn_recursive();
|
||||
@@ -167,9 +163,9 @@ fn sync_gizmo_transform(
|
||||
}
|
||||
|
||||
fn update_target_global_trasform(
|
||||
mut q_gizmo : Query<&TransformGizmo>,
|
||||
mut q_targets : ParamSet<(TransformHelper,)>,
|
||||
mut q_targets_global : Query<&mut GlobalTransform>
|
||||
mut q_gizmo: Query<&TransformGizmo>,
|
||||
mut q_targets: ParamSet<(TransformHelper,)>,
|
||||
mut q_targets_global: Query<&mut GlobalTransform>,
|
||||
) {
|
||||
for gizmo in q_gizmo.iter_mut() {
|
||||
if let Ok(global_transform) = q_targets.p0().compute_global_transform(gizmo.target) {
|
||||
@@ -180,7 +176,6 @@ fn update_target_global_trasform(
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
fn normalize_gizmo_scale(
|
||||
q_cam_xform: Query<&Transform, With<MainCamera>>,
|
||||
mut q_gizmo: Query<
|
||||
@@ -197,4 +192,4 @@ fn normalize_gizmo_scale(
|
||||
|
||||
let dist = Vec3::distance(cam_xform.translation, xform.translation);
|
||||
xform.scale = Vec3::splat(dist / 15.);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -48,85 +48,85 @@ pub(super) fn spawn_rotation_gizmo(
|
||||
mats: &GizmoMats,
|
||||
) {
|
||||
cmd.spawn((
|
||||
TransformGizmoBundle::new(target, target_global_transform, space, normalizing_scale),
|
||||
On::<Pointer<DragStart>>::run(on_rotation_start),
|
||||
On::<Pointer<Drag>>::run(on_rotate),
|
||||
On::<Pointer<DragEnd>>::run(on_rotation_end),
|
||||
))
|
||||
.with_children(|cmd| {
|
||||
use super::{ROT_X, ROT_Y, ROT_Z};
|
||||
TransformGizmoBundle::new(target, target_global_transform, space, normalizing_scale),
|
||||
On::<Pointer<DragStart>>::run(on_rotation_start),
|
||||
On::<Pointer<Drag>>::run(on_rotate),
|
||||
On::<Pointer<DragEnd>>::run(on_rotation_end),
|
||||
))
|
||||
.with_children(|cmd| {
|
||||
use super::{ROT_X, ROT_Y, ROT_Z};
|
||||
|
||||
// Trackball
|
||||
cmd.spawn((
|
||||
NotShadowCaster,
|
||||
RenderLayers::layer(GIZMO_RENDER_LAYER),
|
||||
RotationWidget::Trackball,
|
||||
MaterialMeshBundle {
|
||||
mesh: meshes.rotate_ball.clone(),
|
||||
material: mats.rotate_trackball.clone(),
|
||||
..default()
|
||||
},
|
||||
On::<Pointer<Over>>::run(on_trackball_hover),
|
||||
On::<Pointer<Out>>::run(on_trackball_unhover),
|
||||
));
|
||||
// Trackball
|
||||
cmd.spawn((
|
||||
NotShadowCaster,
|
||||
RenderLayers::layer(GIZMO_RENDER_LAYER),
|
||||
RotationWidget::Trackball,
|
||||
MaterialMeshBundle {
|
||||
mesh: meshes.rotate_ball.clone(),
|
||||
material: mats.rotate_trackball.clone(),
|
||||
..default()
|
||||
},
|
||||
On::<Pointer<Over>>::run(on_trackball_hover),
|
||||
On::<Pointer<Out>>::run(on_trackball_unhover),
|
||||
));
|
||||
|
||||
// Screen-space
|
||||
cmd.spawn((
|
||||
NotShadowCaster,
|
||||
RenderLayers::layer(GIZMO_RENDER_LAYER),
|
||||
RotationWidget::ScreenSpace,
|
||||
MaterialMeshBundle {
|
||||
mesh: meshes.rotate_ss.clone(),
|
||||
material: mats.rotate_ss.clone(),
|
||||
..default()
|
||||
},
|
||||
On::<Pointer<Over>>::run(on_gizmo_element_hover),
|
||||
On::<Pointer<Out>>::run(on_gizmo_element_unhover),
|
||||
));
|
||||
// Screen-space
|
||||
cmd.spawn((
|
||||
NotShadowCaster,
|
||||
RenderLayers::layer(GIZMO_RENDER_LAYER),
|
||||
RotationWidget::ScreenSpace,
|
||||
MaterialMeshBundle {
|
||||
mesh: meshes.rotate_ss.clone(),
|
||||
material: mats.rotate_ss.clone(),
|
||||
..default()
|
||||
},
|
||||
On::<Pointer<Over>>::run(on_gizmo_element_hover),
|
||||
On::<Pointer<Out>>::run(on_gizmo_element_unhover),
|
||||
));
|
||||
|
||||
// X
|
||||
cmd.spawn((
|
||||
NotShadowCaster,
|
||||
RenderLayers::layer(GIZMO_RENDER_LAYER),
|
||||
RotationWidget::Axis(Vec3::X),
|
||||
MaterialMeshBundle {
|
||||
mesh: meshes.rotate_ring.clone(),
|
||||
material: mats.rotate_x.clone(),
|
||||
transform: Transform::from_rotation(ROT_X),
|
||||
..default()
|
||||
},
|
||||
On::<Pointer<Over>>::run(on_gizmo_element_hover),
|
||||
On::<Pointer<Out>>::run(on_gizmo_element_unhover),
|
||||
));
|
||||
// Y
|
||||
cmd.spawn((
|
||||
NotShadowCaster,
|
||||
RenderLayers::layer(GIZMO_RENDER_LAYER),
|
||||
RotationWidget::Axis(Vec3::Y),
|
||||
MaterialMeshBundle {
|
||||
mesh: meshes.rotate_ring.clone(),
|
||||
material: mats.rotate_y.clone(),
|
||||
transform: Transform::from_rotation(ROT_Y),
|
||||
..default()
|
||||
},
|
||||
On::<Pointer<Over>>::run(on_gizmo_element_hover),
|
||||
On::<Pointer<Out>>::run(on_gizmo_element_unhover),
|
||||
));
|
||||
// Z
|
||||
cmd.spawn((
|
||||
NotShadowCaster,
|
||||
RenderLayers::layer(GIZMO_RENDER_LAYER),
|
||||
RotationWidget::Axis(Vec3::Z),
|
||||
MaterialMeshBundle {
|
||||
mesh: meshes.rotate_ring.clone(),
|
||||
material: mats.rotate_z.clone(),
|
||||
transform: Transform::from_rotation(ROT_Z),
|
||||
..default()
|
||||
},
|
||||
On::<Pointer<Over>>::run(on_gizmo_element_hover),
|
||||
On::<Pointer<Out>>::run(on_gizmo_element_unhover),
|
||||
));
|
||||
});
|
||||
// X
|
||||
cmd.spawn((
|
||||
NotShadowCaster,
|
||||
RenderLayers::layer(GIZMO_RENDER_LAYER),
|
||||
RotationWidget::Axis(Vec3::X),
|
||||
MaterialMeshBundle {
|
||||
mesh: meshes.rotate_ring.clone(),
|
||||
material: mats.rotate_x.clone(),
|
||||
transform: Transform::from_rotation(ROT_X),
|
||||
..default()
|
||||
},
|
||||
On::<Pointer<Over>>::run(on_gizmo_element_hover),
|
||||
On::<Pointer<Out>>::run(on_gizmo_element_unhover),
|
||||
));
|
||||
// Y
|
||||
cmd.spawn((
|
||||
NotShadowCaster,
|
||||
RenderLayers::layer(GIZMO_RENDER_LAYER),
|
||||
RotationWidget::Axis(Vec3::Y),
|
||||
MaterialMeshBundle {
|
||||
mesh: meshes.rotate_ring.clone(),
|
||||
material: mats.rotate_y.clone(),
|
||||
transform: Transform::from_rotation(ROT_Y),
|
||||
..default()
|
||||
},
|
||||
On::<Pointer<Over>>::run(on_gizmo_element_hover),
|
||||
On::<Pointer<Out>>::run(on_gizmo_element_unhover),
|
||||
));
|
||||
// Z
|
||||
cmd.spawn((
|
||||
NotShadowCaster,
|
||||
RenderLayers::layer(GIZMO_RENDER_LAYER),
|
||||
RotationWidget::Axis(Vec3::Z),
|
||||
MaterialMeshBundle {
|
||||
mesh: meshes.rotate_ring.clone(),
|
||||
material: mats.rotate_z.clone(),
|
||||
transform: Transform::from_rotation(ROT_Z),
|
||||
..default()
|
||||
},
|
||||
On::<Pointer<Over>>::run(on_gizmo_element_hover),
|
||||
On::<Pointer<Out>>::run(on_gizmo_element_unhover),
|
||||
));
|
||||
});
|
||||
}
|
||||
|
||||
pub(super) fn update_ss_ring_rotation(
|
||||
@@ -179,7 +179,7 @@ pub(super) fn on_rotation_start(
|
||||
event: Listener<Pointer<DragStart>>,
|
||||
mut cmd: Commands,
|
||||
q_xform: Query<(Entity, &GlobalTransform)>,
|
||||
q_gizmos: Query<&TransformGizmo>
|
||||
q_gizmos: Query<&TransformGizmo>,
|
||||
) {
|
||||
info!("Rotation start");
|
||||
|
||||
@@ -211,7 +211,7 @@ pub(super) fn on_rotation_end(
|
||||
mut cmd: Commands,
|
||||
r_xform_mode: Res<TransformMode>,
|
||||
mut ev_rebuild_gizmo: EventWriter<RebuildGizmo>,
|
||||
q_inited_components: Query<Entity, With<LastRotation>>
|
||||
q_inited_components: Query<Entity, With<LastRotation>>,
|
||||
) {
|
||||
info!("Rotation end");
|
||||
|
||||
@@ -222,7 +222,6 @@ pub(super) fn on_rotation_end(
|
||||
.remove::<LastHitPoint>()
|
||||
.remove::<LastRotation>();
|
||||
}
|
||||
|
||||
|
||||
if matches!(r_xform_mode.space, TransformSpace::World) {
|
||||
ev_rebuild_gizmo.send(RebuildGizmo);
|
||||
@@ -232,16 +231,14 @@ pub(super) fn on_rotation_end(
|
||||
pub(super) fn on_rotate(
|
||||
event: Listener<Pointer<Drag>>,
|
||||
mut raycast: Raycast,
|
||||
mut q_root: Query<
|
||||
(
|
||||
&mut Transform,
|
||||
Option<&Parent>,
|
||||
&InitialTransform,
|
||||
&InitialHitPoint,
|
||||
&mut LastHitPoint,
|
||||
&mut LastRotation,
|
||||
),
|
||||
>,
|
||||
mut q_root: Query<(
|
||||
&mut Transform,
|
||||
Option<&Parent>,
|
||||
&InitialTransform,
|
||||
&InitialHitPoint,
|
||||
&mut LastHitPoint,
|
||||
&mut LastRotation,
|
||||
)>,
|
||||
q_camera: Query<(&Camera, &GlobalTransform), With<MainCamera>>,
|
||||
q_gizmo: Query<&GlobalTransform, (With<TransformGizmo>, Without<MainCamera>)>,
|
||||
q_world_xforms: Query<&GlobalTransform, (With<Children>, Without<MainCamera>)>,
|
||||
|
||||
@@ -1,10 +1,5 @@
|
||||
use bevy::{
|
||||
math::vec3, pbr::NotShadowCaster, prelude::*,
|
||||
render::view::RenderLayers,
|
||||
};
|
||||
use bevy_mod_picking::prelude::{
|
||||
Drag, DragEnd, DragStart, Listener, On, Out, Over, Pointer,
|
||||
};
|
||||
use bevy::{math::vec3, pbr::NotShadowCaster, prelude::*, render::view::RenderLayers};
|
||||
use bevy_mod_picking::prelude::{Drag, DragEnd, DragStart, Listener, On, Out, Over, Pointer};
|
||||
|
||||
use crate::{interaction::TransformSpace, MainCamera};
|
||||
|
||||
@@ -31,181 +26,181 @@ pub(super) fn spawn_translation_gizmo(
|
||||
mats: &GizmoMats,
|
||||
) {
|
||||
cmd.spawn((
|
||||
TransformGizmoBundle::new(target, target_global_transform, space, normalizing_scale),
|
||||
On::<Pointer<Over>>::run(on_gizmo_element_hover),
|
||||
On::<Pointer<Out>>::run(on_gizmo_element_unhover),
|
||||
On::<Pointer<DragStart>>::run(on_translation_start),
|
||||
On::<Pointer<Drag>>::run(on_translate),
|
||||
On::<Pointer<DragEnd>>::run(on_translation_end),
|
||||
))
|
||||
.with_children(|cmd| {
|
||||
use super::{CIRC_45, ROT_X, ROT_Y, ROT_Z};
|
||||
TransformGizmoBundle::new(target, target_global_transform, space, normalizing_scale),
|
||||
On::<Pointer<Over>>::run(on_gizmo_element_hover),
|
||||
On::<Pointer<Out>>::run(on_gizmo_element_unhover),
|
||||
On::<Pointer<DragStart>>::run(on_translation_start),
|
||||
On::<Pointer<Drag>>::run(on_translate),
|
||||
On::<Pointer<DragEnd>>::run(on_translation_end),
|
||||
))
|
||||
.with_children(|cmd| {
|
||||
use super::{CIRC_45, ROT_X, ROT_Y, ROT_Z};
|
||||
|
||||
// Center sphere
|
||||
cmd.spawn((
|
||||
NotShadowCaster,
|
||||
RenderLayers::layer(GIZMO_RENDER_LAYER),
|
||||
TranslationWidget::ScreenSpace,
|
||||
MaterialMeshBundle {
|
||||
mesh: meshes.translate_ss.clone(),
|
||||
material: mats.translate_ss.clone(),
|
||||
transform: Transform::IDENTITY,
|
||||
..default()
|
||||
},
|
||||
));
|
||||
// Center sphere
|
||||
cmd.spawn((
|
||||
NotShadowCaster,
|
||||
RenderLayers::layer(GIZMO_RENDER_LAYER),
|
||||
TranslationWidget::ScreenSpace,
|
||||
MaterialMeshBundle {
|
||||
mesh: meshes.translate_ss.clone(),
|
||||
material: mats.translate_ss.clone(),
|
||||
transform: Transform::IDENTITY,
|
||||
..default()
|
||||
},
|
||||
));
|
||||
|
||||
// X
|
||||
cmd.spawn((
|
||||
NotShadowCaster,
|
||||
RenderLayers::layer(GIZMO_RENDER_LAYER),
|
||||
TranslationWidget::Axis(Vec3::X),
|
||||
MaterialMeshBundle {
|
||||
mesh: meshes.translate_line.clone(),
|
||||
material: mats.translate_x.clone(),
|
||||
transform: Transform {
|
||||
rotation: ROT_X,
|
||||
translation: vec3(0.6, 0., 0.),
|
||||
..default()
|
||||
},
|
||||
..default()
|
||||
},
|
||||
));
|
||||
cmd.spawn((
|
||||
NotShadowCaster,
|
||||
RenderLayers::layer(GIZMO_RENDER_LAYER),
|
||||
TranslationWidget::Axis(Vec3::X),
|
||||
MaterialMeshBundle {
|
||||
mesh: meshes.translate_arrow.clone(),
|
||||
material: mats.translate_x.clone(),
|
||||
transform: Transform {
|
||||
rotation: ROT_X,
|
||||
translation: vec3(1., 0., 0.),
|
||||
..default()
|
||||
},
|
||||
..default()
|
||||
},
|
||||
));
|
||||
// X
|
||||
cmd.spawn((
|
||||
NotShadowCaster,
|
||||
RenderLayers::layer(GIZMO_RENDER_LAYER),
|
||||
TranslationWidget::Axis(Vec3::X),
|
||||
MaterialMeshBundle {
|
||||
mesh: meshes.translate_line.clone(),
|
||||
material: mats.translate_x.clone(),
|
||||
transform: Transform {
|
||||
rotation: ROT_X,
|
||||
translation: vec3(0.6, 0., 0.),
|
||||
..default()
|
||||
},
|
||||
..default()
|
||||
},
|
||||
));
|
||||
cmd.spawn((
|
||||
NotShadowCaster,
|
||||
RenderLayers::layer(GIZMO_RENDER_LAYER),
|
||||
TranslationWidget::Axis(Vec3::X),
|
||||
MaterialMeshBundle {
|
||||
mesh: meshes.translate_arrow.clone(),
|
||||
material: mats.translate_x.clone(),
|
||||
transform: Transform {
|
||||
rotation: ROT_X,
|
||||
translation: vec3(1., 0., 0.),
|
||||
..default()
|
||||
},
|
||||
..default()
|
||||
},
|
||||
));
|
||||
|
||||
// Y
|
||||
cmd.spawn((
|
||||
NotShadowCaster,
|
||||
RenderLayers::layer(GIZMO_RENDER_LAYER),
|
||||
TranslationWidget::Axis(Vec3::Y),
|
||||
MaterialMeshBundle {
|
||||
mesh: meshes.translate_line.clone(),
|
||||
material: mats.translate_y.clone(),
|
||||
transform: Transform {
|
||||
rotation: ROT_Y,
|
||||
translation: vec3(0., 0.6, 0.),
|
||||
..default()
|
||||
},
|
||||
..default()
|
||||
},
|
||||
));
|
||||
cmd.spawn((
|
||||
NotShadowCaster,
|
||||
RenderLayers::layer(GIZMO_RENDER_LAYER),
|
||||
TranslationWidget::Axis(Vec3::Y),
|
||||
MaterialMeshBundle {
|
||||
mesh: meshes.translate_arrow.clone(),
|
||||
material: mats.translate_y.clone(),
|
||||
transform: Transform {
|
||||
rotation: ROT_Y,
|
||||
translation: vec3(0., 1., 0.),
|
||||
..default()
|
||||
},
|
||||
..default()
|
||||
},
|
||||
));
|
||||
// Y
|
||||
cmd.spawn((
|
||||
NotShadowCaster,
|
||||
RenderLayers::layer(GIZMO_RENDER_LAYER),
|
||||
TranslationWidget::Axis(Vec3::Y),
|
||||
MaterialMeshBundle {
|
||||
mesh: meshes.translate_line.clone(),
|
||||
material: mats.translate_y.clone(),
|
||||
transform: Transform {
|
||||
rotation: ROT_Y,
|
||||
translation: vec3(0., 0.6, 0.),
|
||||
..default()
|
||||
},
|
||||
..default()
|
||||
},
|
||||
));
|
||||
cmd.spawn((
|
||||
NotShadowCaster,
|
||||
RenderLayers::layer(GIZMO_RENDER_LAYER),
|
||||
TranslationWidget::Axis(Vec3::Y),
|
||||
MaterialMeshBundle {
|
||||
mesh: meshes.translate_arrow.clone(),
|
||||
material: mats.translate_y.clone(),
|
||||
transform: Transform {
|
||||
rotation: ROT_Y,
|
||||
translation: vec3(0., 1., 0.),
|
||||
..default()
|
||||
},
|
||||
..default()
|
||||
},
|
||||
));
|
||||
|
||||
// Z
|
||||
cmd.spawn((
|
||||
NotShadowCaster,
|
||||
RenderLayers::layer(GIZMO_RENDER_LAYER),
|
||||
TranslationWidget::Axis(Vec3::Z),
|
||||
MaterialMeshBundle {
|
||||
mesh: meshes.translate_line.clone(),
|
||||
material: mats.translate_z.clone(),
|
||||
transform: Transform {
|
||||
rotation: ROT_Z,
|
||||
translation: vec3(0., 0., 0.6),
|
||||
..default()
|
||||
},
|
||||
..default()
|
||||
},
|
||||
));
|
||||
cmd.spawn((
|
||||
NotShadowCaster,
|
||||
RenderLayers::layer(GIZMO_RENDER_LAYER),
|
||||
TranslationWidget::Axis(Vec3::Z),
|
||||
MaterialMeshBundle {
|
||||
mesh: meshes.translate_arrow.clone(),
|
||||
material: mats.translate_z.clone(),
|
||||
transform: Transform {
|
||||
rotation: ROT_Z,
|
||||
translation: vec3(0., 0., 1.),
|
||||
..default()
|
||||
},
|
||||
..default()
|
||||
},
|
||||
));
|
||||
// Z
|
||||
cmd.spawn((
|
||||
NotShadowCaster,
|
||||
RenderLayers::layer(GIZMO_RENDER_LAYER),
|
||||
TranslationWidget::Axis(Vec3::Z),
|
||||
MaterialMeshBundle {
|
||||
mesh: meshes.translate_line.clone(),
|
||||
material: mats.translate_z.clone(),
|
||||
transform: Transform {
|
||||
rotation: ROT_Z,
|
||||
translation: vec3(0., 0., 0.6),
|
||||
..default()
|
||||
},
|
||||
..default()
|
||||
},
|
||||
));
|
||||
cmd.spawn((
|
||||
NotShadowCaster,
|
||||
RenderLayers::layer(GIZMO_RENDER_LAYER),
|
||||
TranslationWidget::Axis(Vec3::Z),
|
||||
MaterialMeshBundle {
|
||||
mesh: meshes.translate_arrow.clone(),
|
||||
material: mats.translate_z.clone(),
|
||||
transform: Transform {
|
||||
rotation: ROT_Z,
|
||||
translation: vec3(0., 0., 1.),
|
||||
..default()
|
||||
},
|
||||
..default()
|
||||
},
|
||||
));
|
||||
|
||||
// YZ Plane
|
||||
cmd.spawn((
|
||||
NotShadowCaster,
|
||||
RenderLayers::layer(GIZMO_RENDER_LAYER),
|
||||
TranslationWidget::Plane(Vec3::X),
|
||||
MaterialMeshBundle {
|
||||
mesh: meshes.translate_plane.clone(),
|
||||
material: mats.translate_yz.clone(),
|
||||
transform: Transform {
|
||||
rotation: ROT_X,
|
||||
translation: vec3(0., CIRC_45, CIRC_45),
|
||||
..default()
|
||||
},
|
||||
..default()
|
||||
},
|
||||
));
|
||||
// XZ Plane
|
||||
cmd.spawn((
|
||||
NotShadowCaster,
|
||||
RenderLayers::layer(GIZMO_RENDER_LAYER),
|
||||
TranslationWidget::Plane(Vec3::Y),
|
||||
MaterialMeshBundle {
|
||||
mesh: meshes.translate_plane.clone(),
|
||||
material: mats.translate_xz.clone(),
|
||||
transform: Transform {
|
||||
rotation: ROT_Y,
|
||||
translation: vec3(CIRC_45, 0., CIRC_45),
|
||||
..default()
|
||||
},
|
||||
..default()
|
||||
},
|
||||
));
|
||||
// XY Plane
|
||||
cmd.spawn((
|
||||
NotShadowCaster,
|
||||
RenderLayers::layer(GIZMO_RENDER_LAYER),
|
||||
TranslationWidget::Plane(Vec3::Z),
|
||||
MaterialMeshBundle {
|
||||
mesh: meshes.translate_plane.clone(),
|
||||
material: mats.translate_xy.clone(),
|
||||
transform: Transform {
|
||||
rotation: ROT_Z,
|
||||
translation: vec3(CIRC_45, CIRC_45, 0.),
|
||||
..default()
|
||||
},
|
||||
..default()
|
||||
},
|
||||
));
|
||||
});
|
||||
// YZ Plane
|
||||
cmd.spawn((
|
||||
NotShadowCaster,
|
||||
RenderLayers::layer(GIZMO_RENDER_LAYER),
|
||||
TranslationWidget::Plane(Vec3::X),
|
||||
MaterialMeshBundle {
|
||||
mesh: meshes.translate_plane.clone(),
|
||||
material: mats.translate_yz.clone(),
|
||||
transform: Transform {
|
||||
rotation: ROT_X,
|
||||
translation: vec3(0., CIRC_45, CIRC_45),
|
||||
..default()
|
||||
},
|
||||
..default()
|
||||
},
|
||||
));
|
||||
// XZ Plane
|
||||
cmd.spawn((
|
||||
NotShadowCaster,
|
||||
RenderLayers::layer(GIZMO_RENDER_LAYER),
|
||||
TranslationWidget::Plane(Vec3::Y),
|
||||
MaterialMeshBundle {
|
||||
mesh: meshes.translate_plane.clone(),
|
||||
material: mats.translate_xz.clone(),
|
||||
transform: Transform {
|
||||
rotation: ROT_Y,
|
||||
translation: vec3(CIRC_45, 0., CIRC_45),
|
||||
..default()
|
||||
},
|
||||
..default()
|
||||
},
|
||||
));
|
||||
// XY Plane
|
||||
cmd.spawn((
|
||||
NotShadowCaster,
|
||||
RenderLayers::layer(GIZMO_RENDER_LAYER),
|
||||
TranslationWidget::Plane(Vec3::Z),
|
||||
MaterialMeshBundle {
|
||||
mesh: meshes.translate_plane.clone(),
|
||||
material: mats.translate_xy.clone(),
|
||||
transform: Transform {
|
||||
rotation: ROT_Z,
|
||||
translation: vec3(CIRC_45, CIRC_45, 0.),
|
||||
..default()
|
||||
},
|
||||
..default()
|
||||
},
|
||||
));
|
||||
});
|
||||
}
|
||||
|
||||
pub(super) fn on_translation_start(
|
||||
_: Listener<Pointer<DragStart>>,
|
||||
mut cmd: Commands,
|
||||
q_xform: Query<(Entity, &GlobalTransform)>,
|
||||
q_gizmos: Query<&TransformGizmo>
|
||||
q_gizmos: Query<&TransformGizmo>,
|
||||
) {
|
||||
for gizmo_data in q_gizmos.iter() {
|
||||
if let Ok((ent, &world_xform)) = q_xform.get(gizmo_data.target) {
|
||||
@@ -230,10 +225,12 @@ pub(super) fn on_translate(
|
||||
q_camera: Query<(&Camera, &GlobalTransform), With<MainCamera>>,
|
||||
q_gizmo: Query<(&GlobalTransform, &TransformGizmo), Without<MainCamera>>,
|
||||
q_widget: Query<&TranslationWidget>,
|
||||
q_all_global_transforms : Query<&GlobalTransform>
|
||||
q_all_global_transforms: Query<&GlobalTransform>,
|
||||
) {
|
||||
let (gizmo_xform, gizmo_data) = q_gizmo.single();
|
||||
let Ok((mut target_transform, target_global_transform, target_parent)) = q_root.get_mut(gizmo_data.target) else {
|
||||
let Ok((mut target_transform, target_global_transform, target_parent)) =
|
||||
q_root.get_mut(gizmo_data.target)
|
||||
else {
|
||||
error!("Translation gizmo target not found");
|
||||
return;
|
||||
};
|
||||
@@ -272,8 +269,12 @@ pub(super) fn on_translate(
|
||||
let target_ws = origin_ws + axis_ws * projection_length;
|
||||
|
||||
if let Some(target_parent) = target_parent {
|
||||
if let Ok(parent_global_transform) = q_all_global_transforms.get(target_parent.get()) {
|
||||
let real_local_transform = GlobalTransform::from(Transform::from_translation(target_ws)).reparented_to(parent_global_transform);
|
||||
if let Ok(parent_global_transform) =
|
||||
q_all_global_transforms.get(target_parent.get())
|
||||
{
|
||||
let real_local_transform =
|
||||
GlobalTransform::from(Transform::from_translation(target_ws))
|
||||
.reparented_to(parent_global_transform);
|
||||
target_transform.translation = real_local_transform.translation;
|
||||
}
|
||||
} else {
|
||||
@@ -295,8 +296,12 @@ pub(super) fn on_translate(
|
||||
let target_ws = ray.origin + ray.direction * hit_dist;
|
||||
|
||||
if let Some(target_parent) = target_parent {
|
||||
if let Ok(parent_global_transform) = q_all_global_transforms.get(target_parent.get()) {
|
||||
let real_local_transform = GlobalTransform::from(Transform::from_translation(target_ws)).reparented_to(parent_global_transform);
|
||||
if let Ok(parent_global_transform) =
|
||||
q_all_global_transforms.get(target_parent.get())
|
||||
{
|
||||
let real_local_transform =
|
||||
GlobalTransform::from(Transform::from_translation(target_ws))
|
||||
.reparented_to(parent_global_transform);
|
||||
target_transform.translation = real_local_transform.translation;
|
||||
}
|
||||
} else {
|
||||
|
||||
+3
-4
@@ -80,14 +80,14 @@ pub fn init(viewport_size: ViewportSize) {
|
||||
SkyboxPlugin,
|
||||
UiLayerPlugin,
|
||||
WorldGridPlugin,
|
||||
UndoPlugin
|
||||
UndoPlugin,
|
||||
))
|
||||
.add_systems(
|
||||
Startup,
|
||||
move |mut cmd: Commands, mut ew: EventWriter<LoadSceneEvent>| {
|
||||
cmd.insert_resource(SkyboxId("gum_trees_4k".to_string()));
|
||||
ew.send(LoadSceneEvent("bookcase".to_string()));
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
// Only for registering components for undo
|
||||
@@ -147,7 +147,7 @@ pub fn start_viewer(
|
||||
SkyboxPlugin,
|
||||
UiLayerPlugin,
|
||||
WorldGridPlugin,
|
||||
UndoPlugin
|
||||
UndoPlugin,
|
||||
))
|
||||
.add_systems(
|
||||
Startup,
|
||||
@@ -157,7 +157,6 @@ pub fn start_viewer(
|
||||
},
|
||||
);
|
||||
|
||||
|
||||
// Only for registering components for undo
|
||||
use space_editor::prelude::space_undo::AppAutoUndo;
|
||||
app.auto_reflected_undo::<Transform>();
|
||||
|
||||
+2
-2
@@ -13,7 +13,7 @@ use bevy::{
|
||||
scene::InstanceId,
|
||||
};
|
||||
|
||||
use space_editor::prelude::{PrefabMarker, space_undo::OneFrameUndoIgnore};
|
||||
use space_editor::prelude::{space_undo::OneFrameUndoIgnore, PrefabMarker};
|
||||
#[cfg(feature = "wasm")]
|
||||
use wasm_bindgen::prelude::wasm_bindgen;
|
||||
|
||||
@@ -209,7 +209,7 @@ fn spawn_next_scene(
|
||||
SceneElement,
|
||||
SpatialBundle::default(),
|
||||
PrefabMarker,
|
||||
OneFrameUndoIgnore::default() //To prevert undo try to register add event
|
||||
OneFrameUndoIgnore::default(), //To prevert undo try to register add event
|
||||
))
|
||||
.id();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user