screw alpha, just move it out of the way... also tad faster scroll

This commit is contained in:
2026-02-21 14:14:34 +01:00
parent 5f26bada73
commit beea2a8a6d

View File

@@ -16,6 +16,9 @@ use crate::{
vrplugin::{Headset, MainCamera, create_view_space},
};
#[derive(Component)]
pub struct LookedAt;
#[derive(Component)]
pub struct Kneeboard;
@@ -88,23 +91,32 @@ fn scroll_handler(
return;
};
let delta = Vec2::new(thumbstick.current_state.x, thumbstick.current_state.y) * 8.0;
let delta = Vec2::new(thumbstick.current_state.x, thumbstick.current_state.y) * 12.0;
for webview in webviews.iter() {
browsers.send_mouse_wheel(&webview, Vec2::ZERO, delta);
}
}
#[allow(clippy::type_complexity)]
fn position_kneeboard(
mut transform: Query<&mut Transform, With<Kneeboard>>,
mut transform: Query<(&mut Transform, Option<&LookedAt>), (With<Kneeboard>, Without<Headset>)>,
kneeboard: Res<KneeboardPosition>,
head: Query<&Transform, (With<Headset>, Without<Kneeboard>)>,
) {
let Ok(mut transform) = transform.single_mut() else {
let Ok((mut transform, looked_at)) = transform.single_mut() else {
return;
};
let head = head.single().expect("a head to exist");
transform.translation = kneeboard.position;
transform.rotation = kneeboard.rotation;
if looked_at.is_some() {
transform.translation = head.translation;
transform.rotation = head.rotation;
}
}
fn move_keyboard(
@@ -170,28 +182,21 @@ fn spawn_kneeboard(
}
fn gaze(
material_handles: Query<&MeshMaterial3d<WebviewExtendStandardMaterial>, With<Kneeboard>>,
mut materials: ResMut<Assets<WebviewExtendStandardMaterial>>,
mut commands: Commands,
position: Res<KneeboardPosition>,
head_query: Query<&Transform, With<Headset>>,
kneeboard: Query<Entity, With<Kneeboard>>,
head: Query<&Transform, With<Headset>>,
) {
let head = head_query.single().expect("a head to exist");
let head = head.single().expect("a head to exist");
let kneeboard = kneeboard.single().expect("a kneeboard to exist");
let facing = head.forward().normalize();
let to_target = (position.position - head.translation).normalize();
let dot = facing.dot(to_target);
let cos_fov_angle: f32 = (35.0f32 / 2.0f32).to_radians().cos();
let mut alpha = 1.0;
commands.entity(kneeboard).remove::<LookedAt>();
if dot < cos_fov_angle {
alpha = 0.0;
}
for material_handle in material_handles.iter() {
if let Some(material) = materials.get_mut(material_handle)
&& let Color::LinearRgba(ref mut rgba) = material.base.base_color
{
rgba.alpha = alpha;
}
commands.entity(kneeboard).insert(LookedAt);
}
}