use std::time::Duration; use log::{error}; use rapier2d::prelude::{IntegrationParameters, PhysicsPipeline, IslandManager, BroadPhase, NarrowPhase, ImpulseJointSet, MultibodyJointSet, CCDSolver, RigidBodySet, ColliderSet}; use tokio::time::sleep; use crate::manager::{ClientHandlerMessage, ClientManager, PhysicsEngine}; pub async fn timer_main(mgr: ClientManager) { // initialize physics engine let mut physics_engine = PhysicsEngine { gravity: vec![0.0, 0.0], integration_parameters: IntegrationParameters::default(), pipeline: PhysicsPipeline::new(), island_manager: IslandManager::new(), broad_phase: BroadPhase::new(), narrow_phase: NarrowPhase::new(), rigid_body_set: RigidBodySet::new(), collider_set: ColliderSet::new(), impulse_joint_set: ImpulseJointSet::new(), multibody_joint_set: MultibodyJointSet::new(), ccd_solver: CCDSolver::new(), }; loop { sleep(Duration::from_millis(5)).await; for (_addr, client_thread) in mgr.handlers.read().await.iter() { match client_thread.tx.send(ClientHandlerMessage::Tick).await { Ok(_) => (), Err(e) => { error!("unable to update a client thread: {}", e); } } } } }