refactor: Sleep in parallel while doing independent work
Signed-off-by: Schmarni <marnistromer@gmail.com>
This commit is contained in:
47
src/main.rs
47
src/main.rs
@@ -42,7 +42,6 @@ use bevy_mod_xr::session::{XrFirst, XrPreDestroySession, XrSessionCreated, XrSes
|
||||
use bevy_mod_xr::spaces::XrPrimaryReferenceSpace;
|
||||
use bevy_plugin::{DbusConnection, InputUpdate, StardustBevyPlugin, StardustFirst};
|
||||
use clap::Parser;
|
||||
use tracing::level_filters::LevelFilter;
|
||||
use core::client::Client;
|
||||
use core::task;
|
||||
use directories::ProjectDirs;
|
||||
@@ -62,8 +61,10 @@ use stardust_xr::server;
|
||||
use std::ops::Deref;
|
||||
use std::path::PathBuf;
|
||||
use std::sync::Arc;
|
||||
use std::thread;
|
||||
use tokio::net::UnixListener;
|
||||
use tokio::sync::Notify;
|
||||
use tracing::level_filters::LevelFilter;
|
||||
use tracing::{debug_span, error, info, warn};
|
||||
use tracing_subscriber::{fmt, prelude::*, EnvFilter};
|
||||
use zbus::fdo::ObjectManager;
|
||||
@@ -332,7 +333,7 @@ fn bevy_loop(
|
||||
cams.iter().for_each(|e| {
|
||||
cmds.entity(e).remove::<Skybox>();
|
||||
});
|
||||
let _span = debug_span!("spawn");
|
||||
let _span = debug_span!("spawn");
|
||||
cmds.insert_resource(ClearColor(Color::NONE));
|
||||
}
|
||||
*last_hidden = env_hidden;
|
||||
@@ -416,26 +417,36 @@ fn bevy_loop(
|
||||
{
|
||||
world.run_system_cached(sync_sets);
|
||||
}
|
||||
world.run_schedule(InputUpdate);
|
||||
let session = world.remove_resource::<OxrSession>();
|
||||
let mut objects = world.remove_resource::<ServerObjects>().unwrap();
|
||||
objects.update(session.as_deref(), time);
|
||||
world.insert_resource(objects);
|
||||
if let Some(session) = session {
|
||||
world.insert_resource(session);
|
||||
}
|
||||
input::process_input();
|
||||
nodes::root::Root::send_frame_events(world.resource::<Time>().delta_secs_f64());
|
||||
if world
|
||||
let thread = world
|
||||
.run_system_cached(should_run_frame_loop)
|
||||
.unwrap_or(true)
|
||||
{
|
||||
let _span = debug_span!("eeping").entered();
|
||||
let mut waiter = world.remove_resource::<OxrFrameWaiter>().unwrap();
|
||||
let state = waiter.wait().unwrap();
|
||||
.then(|| world.remove_resource::<OxrFrameWaiter>())
|
||||
.flatten()
|
||||
.map(|mut waiter| {
|
||||
TOKIO.spawn_blocking(move || {
|
||||
let _span = debug_span!("eeping").entered();
|
||||
let result = waiter.wait();
|
||||
(waiter, result)
|
||||
})
|
||||
});
|
||||
world.run_schedule(InputUpdate);
|
||||
debug_span!("update_objects").in_scope(|| {
|
||||
let session = world.remove_resource::<OxrSession>();
|
||||
let mut objects = world.remove_resource::<ServerObjects>().unwrap();
|
||||
objects.update(session.as_deref(), time);
|
||||
world.insert_resource(objects);
|
||||
if let Some(session) = session {
|
||||
world.insert_resource(session);
|
||||
}
|
||||
});
|
||||
input::process_input();
|
||||
nodes::root::Root::send_frame_events(world.resource::<Time>().delta_secs_f64());
|
||||
if let Some((waiter, Ok(state))) = thread.map(|t| TOKIO.block_on(t).unwrap()) {
|
||||
world.insert_resource(OxrFrameState(state));
|
||||
world.insert_resource(waiter);
|
||||
world.run_system_cached(update_cameras);
|
||||
if let Err(err) = world.run_system_cached(update_cameras) {
|
||||
error!("error while running oxr update_cameras system: {err}");
|
||||
}
|
||||
}
|
||||
#[cfg(feature = "wayland")]
|
||||
wayland.update();
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
use crate::bevy_plugin::DbusConnection;
|
||||
use crate::bevy_plugin::{DbusConnection, InputUpdate};
|
||||
use crate::core::client::INTERNAL_CLIENT;
|
||||
use crate::nodes::fields::{Field, FieldTrait};
|
||||
use crate::nodes::input::{InputDataType, InputHandler, INPUT_HANDLER_REGISTRY};
|
||||
@@ -12,7 +12,9 @@ use crate::objects::{ObjectHandle, SpatialRef};
|
||||
use crate::DefaultMaterial;
|
||||
use bevy::app::{Plugin, PostUpdate};
|
||||
use bevy::asset::{AssetServer, Assets, Handle};
|
||||
use bevy::prelude::{Commands, Component, Entity, Gizmos, IntoSystemConfigs as _, Query, Res, ResMut};
|
||||
use bevy::prelude::{
|
||||
Commands, Component, Entity, Gizmos, IntoSystemConfigs as _, Query, Res, ResMut,
|
||||
};
|
||||
use bevy::utils::default;
|
||||
use bevy_mod_openxr::helper_traits::{ToQuat, ToVec3};
|
||||
use bevy_mod_openxr::resources::OxrFrameState;
|
||||
@@ -43,8 +45,7 @@ pub struct StardustHandPlugin;
|
||||
impl Plugin for StardustHandPlugin {
|
||||
fn build(&self, app: &mut bevy::prelude::App) {
|
||||
app.add_systems(XrSessionCreated, create_hands);
|
||||
app.add_systems(PostUpdate, update_hands);
|
||||
app.add_systems(PostUpdate, draw_hand_gizmos.after(update_hands));
|
||||
app.add_systems(InputUpdate, (update_hands,draw_hand_gizmos).chain());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -278,4 +279,3 @@ impl SkHand {
|
||||
+ (ring_tip_distance * 0.15)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user