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);
}
}
}
}
}