~starkingdoms/starkingdoms

ref: 71ce7ed846f05352b63458d4a63a97cca36169dd starkingdoms/server/src/timer.rs -rw-r--r-- 1.3 KiB
71ce7ed8 — c0repwn3r spritesheets 2 years ago
                                                                                
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
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);
                }
            }
        }
    }
}