fix: anchor at wrong position

This commit is contained in:
galister
2024-06-06 13:27:42 +09:00
parent d5610f6fe6
commit 8bad2e1116
2 changed files with 22 additions and 14 deletions

View File

@@ -100,9 +100,9 @@ where
impl OverlayState {
pub fn parent_transform(&self, app: &AppState) -> Option<Affine3A> {
match self.relative_to {
RelativeTo::None => None,
RelativeTo::Head => Some(app.input_state.hmd),
RelativeTo::Hand(idx) => Some(app.input_state.pointers[idx].pose),
_ => None,
}
}
@@ -201,6 +201,7 @@ where
.arc_get(self.state.name.as_ref())
.copied();
if matches!(self.state.relative_to, RelativeTo::None) {
let hard_reset;
if let Some(transform) = app
.session
@@ -214,6 +215,7 @@ where
hard_reset = true;
}
self.state.reset(app, hard_reset);
}
self.backend.init(app)
}
pub fn render(&mut self, app: &mut AppState) -> anyhow::Result<()> {
@@ -267,10 +269,15 @@ impl OverlayRenderer for FallbackRenderer {
#[derive(Clone, Copy, Debug, Default)]
pub enum RelativeTo {
/// Stays in place unless rencentered
#[default]
None,
/// Stays in position relative to HMD
Head,
/// Stays in position relative to hand
Hand(usize),
/// Stays in place, no recentering
Stage,
}
pub struct SplitOverlayBackend {

View File

@@ -2,7 +2,7 @@ use glam::Vec3A;
use once_cell::sync::Lazy;
use std::sync::Arc;
use crate::backend::overlay::{OverlayData, OverlayState};
use crate::backend::overlay::{OverlayData, OverlayState, RelativeTo};
use crate::config::{load_known_yaml, ConfigType};
use crate::gui::modular::{modular_canvas, ModularUiConfig};
use crate::state::AppState;
@@ -24,6 +24,7 @@ where
z_order: 67,
spawn_scale: config.width,
spawn_point: Vec3A::NEG_Z * 0.5,
relative_to: RelativeTo::Stage,
..Default::default()
},
backend: Box::new(modular_canvas(&config.size, &config.elements, state)?),