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}, vrplugin::{Headset, MainCamera, create_view_space},
}; };
#[derive(Component)]
pub struct LookedAt;
#[derive(Component)] #[derive(Component)]
pub struct Kneeboard; pub struct Kneeboard;
@@ -88,23 +91,32 @@ fn scroll_handler(
return; 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() { for webview in webviews.iter() {
browsers.send_mouse_wheel(&webview, Vec2::ZERO, delta); browsers.send_mouse_wheel(&webview, Vec2::ZERO, delta);
} }
} }
#[allow(clippy::type_complexity)]
fn position_kneeboard( fn position_kneeboard(
mut transform: Query<&mut Transform, With<Kneeboard>>, mut transform: Query<(&mut Transform, Option<&LookedAt>), (With<Kneeboard>, Without<Headset>)>,
kneeboard: Res<KneeboardPosition>, 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; return;
}; };
let head = head.single().expect("a head to exist");
transform.translation = kneeboard.position; transform.translation = kneeboard.position;
transform.rotation = kneeboard.rotation; transform.rotation = kneeboard.rotation;
if looked_at.is_some() {
transform.translation = head.translation;
transform.rotation = head.rotation;
}
} }
fn move_keyboard( fn move_keyboard(
@@ -170,28 +182,21 @@ fn spawn_kneeboard(
} }
fn gaze( fn gaze(
material_handles: Query<&MeshMaterial3d<WebviewExtendStandardMaterial>, With<Kneeboard>>, mut commands: Commands,
mut materials: ResMut<Assets<WebviewExtendStandardMaterial>>,
position: Res<KneeboardPosition>, 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 facing = head.forward().normalize();
let to_target = (position.position - head.translation).normalize(); let to_target = (position.position - head.translation).normalize();
let dot = facing.dot(to_target); let dot = facing.dot(to_target);
let cos_fov_angle: f32 = (35.0f32 / 2.0f32).to_radians().cos(); 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 { if dot < cos_fov_angle {
alpha = 0.0; commands.entity(kneeboard).insert(LookedAt);
}
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;
}
} }
} }