fix: settings spawn in wrong spot
This commit is contained in:
@@ -531,6 +531,7 @@ impl Pointer {
|
|||||||
self.interaction.grabbed = None;
|
self.interaction.grabbed = None;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
if overlay.state.anchored {
|
||||||
overlay.state.saved_transform =
|
overlay.state.saved_transform =
|
||||||
Some(snap_upright(*anchor, Vec3A::Y).inverse() * overlay.state.transform);
|
Some(snap_upright(*anchor, Vec3A::Y).inverse() * overlay.state.transform);
|
||||||
|
|
||||||
@@ -552,6 +553,7 @@ impl Pointer {
|
|||||||
Err(e) => log::error!("Failed to save state: {:?}", e),
|
Err(e) => log::error!("Failed to save state: {:?}", e),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
self.interaction.grabbed = None;
|
self.interaction.grabbed = None;
|
||||||
tasks.enqueue(TaskType::Overlay(
|
tasks.enqueue(TaskType::Overlay(
|
||||||
|
|||||||
@@ -29,6 +29,7 @@ pub struct OverlayState {
|
|||||||
pub grabbable: bool,
|
pub grabbable: bool,
|
||||||
pub interactable: bool,
|
pub interactable: bool,
|
||||||
pub recenter: bool,
|
pub recenter: bool,
|
||||||
|
pub anchored: bool,
|
||||||
pub dirty: bool,
|
pub dirty: bool,
|
||||||
pub alpha: f32,
|
pub alpha: f32,
|
||||||
pub transform: Affine3A,
|
pub transform: Affine3A,
|
||||||
@@ -53,6 +54,7 @@ impl Default for OverlayState {
|
|||||||
grabbable: false,
|
grabbable: false,
|
||||||
recenter: false,
|
recenter: false,
|
||||||
interactable: false,
|
interactable: false,
|
||||||
|
anchored: false,
|
||||||
dirty: true,
|
dirty: true,
|
||||||
alpha: 1.0,
|
alpha: 1.0,
|
||||||
relative_to: RelativeTo::None,
|
relative_to: RelativeTo::None,
|
||||||
@@ -102,6 +104,15 @@ impl OverlayState {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn get_anchor(&self, app: &AppState) -> Affine3A {
|
||||||
|
if self.anchored {
|
||||||
|
app.anchor
|
||||||
|
} else {
|
||||||
|
// fake anchor that's always in front of HMD
|
||||||
|
app.input_state.hmd
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fn get_transform(&self) -> Affine3A {
|
fn get_transform(&self) -> Affine3A {
|
||||||
self.saved_transform.unwrap_or_else(|| {
|
self.saved_transform.unwrap_or_else(|| {
|
||||||
Affine3A::from_scale_rotation_translation(
|
Affine3A::from_scale_rotation_translation(
|
||||||
@@ -124,7 +135,10 @@ impl OverlayState {
|
|||||||
self.saved_transform = None;
|
self.saved_transform = None;
|
||||||
}
|
}
|
||||||
|
|
||||||
self.transform = self.parent_transform(app).unwrap_or(app.anchor) * self.get_transform();
|
self.transform = self
|
||||||
|
.parent_transform(app)
|
||||||
|
.unwrap_or_else(|| self.get_anchor(app))
|
||||||
|
* self.get_transform();
|
||||||
|
|
||||||
if self.grabbable && hard_reset {
|
if self.grabbable && hard_reset {
|
||||||
self.realign(&app.input_state.hmd);
|
self.realign(&app.input_state.hmd);
|
||||||
|
|||||||
@@ -122,6 +122,7 @@ where
|
|||||||
name: KEYBOARD_NAME.into(),
|
name: KEYBOARD_NAME.into(),
|
||||||
grabbable: true,
|
grabbable: true,
|
||||||
recenter: true,
|
recenter: true,
|
||||||
|
anchored: true,
|
||||||
interactable: true,
|
interactable: true,
|
||||||
spawn_scale: width,
|
spawn_scale: width,
|
||||||
spawn_point: vec3a(0., -0.5, 0.),
|
spawn_point: vec3a(0., -0.5, 0.),
|
||||||
|
|||||||
@@ -632,6 +632,7 @@ fn create_screen_state(
|
|||||||
name: name.clone(),
|
name: name.clone(),
|
||||||
grabbable: true,
|
grabbable: true,
|
||||||
recenter: true,
|
recenter: true,
|
||||||
|
anchored: true,
|
||||||
interactable: true,
|
interactable: true,
|
||||||
spawn_scale: 1.5 * session.config.desktop_view_scale,
|
spawn_scale: 1.5 * session.config.desktop_view_scale,
|
||||||
spawn_point: vec3a(0., 0.5, 0.),
|
spawn_point: vec3a(0., 0.5, 0.),
|
||||||
|
|||||||
Reference in New Issue
Block a user