fix: settings spawn in wrong spot

This commit is contained in:
galister
2024-06-04 17:51:31 +09:00
parent b8a0e3630d
commit a0a853825c
4 changed files with 36 additions and 18 deletions

View File

@@ -531,6 +531,7 @@ impl Pointer {
self.interaction.grabbed = None;
}
} else {
if overlay.state.anchored {
overlay.state.saved_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),
}
}
}
self.interaction.grabbed = None;
tasks.enqueue(TaskType::Overlay(

View File

@@ -29,6 +29,7 @@ pub struct OverlayState {
pub grabbable: bool,
pub interactable: bool,
pub recenter: bool,
pub anchored: bool,
pub dirty: bool,
pub alpha: f32,
pub transform: Affine3A,
@@ -53,6 +54,7 @@ impl Default for OverlayState {
grabbable: false,
recenter: false,
interactable: false,
anchored: false,
dirty: true,
alpha: 1.0,
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 {
self.saved_transform.unwrap_or_else(|| {
Affine3A::from_scale_rotation_translation(
@@ -124,7 +135,10 @@ impl OverlayState {
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 {
self.realign(&app.input_state.hmd);

View File

@@ -122,6 +122,7 @@ where
name: KEYBOARD_NAME.into(),
grabbable: true,
recenter: true,
anchored: true,
interactable: true,
spawn_scale: width,
spawn_point: vec3a(0., -0.5, 0.),

View File

@@ -632,6 +632,7 @@ fn create_screen_state(
name: name.clone(),
grabbable: true,
recenter: true,
anchored: true,
interactable: true,
spawn_scale: 1.5 * session.config.desktop_view_scale,
spawn_point: vec3a(0., 0.5, 0.),