fix: settings spawn in wrong spot
This commit is contained in:
@@ -531,25 +531,27 @@ impl Pointer {
|
||||
self.interaction.grabbed = None;
|
||||
}
|
||||
} else {
|
||||
overlay.state.saved_transform =
|
||||
Some(snap_upright(*anchor, Vec3A::Y).inverse() * overlay.state.transform);
|
||||
if overlay.state.anchored {
|
||||
overlay.state.saved_transform =
|
||||
Some(snap_upright(*anchor, Vec3A::Y).inverse() * overlay.state.transform);
|
||||
|
||||
if let Some(grab_data) = self.interaction.grabbed.as_ref() {
|
||||
if overlay.state.curvature != grab_data.old_curvature {
|
||||
if let Some(val) = overlay.state.curvature {
|
||||
config.curve_values.arc_ins(overlay.state.name.clone(), val);
|
||||
} else {
|
||||
let ref_name = overlay.state.name.as_ref();
|
||||
config.curve_values.arc_rm(ref_name);
|
||||
if let Some(grab_data) = self.interaction.grabbed.as_ref() {
|
||||
if overlay.state.curvature != grab_data.old_curvature {
|
||||
if let Some(val) = overlay.state.curvature {
|
||||
config.curve_values.arc_ins(overlay.state.name.clone(), val);
|
||||
} else {
|
||||
let ref_name = overlay.state.name.as_ref();
|
||||
config.curve_values.arc_rm(ref_name);
|
||||
}
|
||||
}
|
||||
config.transform_values.arc_ins(
|
||||
overlay.state.name.clone(),
|
||||
overlay.state.saved_transform.unwrap(),
|
||||
);
|
||||
match save_state(config) {
|
||||
Ok(_) => log::debug!("Saved state"),
|
||||
Err(e) => log::error!("Failed to save state: {:?}", e),
|
||||
}
|
||||
}
|
||||
config.transform_values.arc_ins(
|
||||
overlay.state.name.clone(),
|
||||
overlay.state.saved_transform.unwrap(),
|
||||
);
|
||||
match save_state(config) {
|
||||
Ok(_) => log::debug!("Saved state"),
|
||||
Err(e) => log::error!("Failed to save state: {:?}", e),
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user