use std::collections::HashMap; use std::net::SocketAddr; use std::sync::Arc; use rapier2d_f64::na::{Vector2}; use rapier2d_f64::prelude::{IntegrationParameters, PhysicsPipeline, IslandManager, BroadPhase, NarrowPhase, ImpulseJointSet, MultibodyJointSet, CCDSolver, RigidBodySet, ColliderSet, RigidBodyHandle}; use starkingdoms_protocol::ProtocolPlanet; use tokio::sync::mpsc::Sender; use tokio::sync::RwLock; #[derive(Clone)] pub struct ClientManager { pub handlers: Arc>>, pub usernames: Arc>>, pub players: Arc>> } #[derive(Default)] pub struct Player { pub handle: RigidBodyHandle } #[derive(Clone)] pub struct ClientHandler { pub tx: Sender } #[derive(Clone, Default)] pub struct PhysicsData { pub gravity: Vector2, pub integration_parameters: IntegrationParameters, pub island_manager: IslandManager, pub broad_phase: BroadPhase, pub narrow_phase: NarrowPhase, pub rigid_body_set: RigidBodySet, pub collider_set: ColliderSet, pub impulse_joint_set: ImpulseJointSet, pub multibody_joint_set: MultibodyJointSet, pub ccd_solver: CCDSolver, } impl PhysicsData { pub fn tick(&mut self, pipeline: &mut PhysicsPipeline) { pipeline.step(&self.gravity, &self.integration_parameters, &mut self.island_manager, &mut self.broad_phase, &mut self.narrow_phase, &mut self.rigid_body_set, &mut self.collider_set, &mut self.impulse_joint_set, &mut self.multibody_joint_set, &mut self.ccd_solver, None, &(), &() ); } } #[derive(Debug)] pub enum ClientHandlerMessage { Tick, ChatMessage { from: String, message: String }, PlayersUpdate { rotation: Vec, x: Vec, y: Vec, usernames: Vec }, PlanetData { planets: Vec }, }