M Cargo.lock => Cargo.lock +12 -12
@@ 31,7 31,7 @@ checksum = "0e97ce7de6cf12de5d7226c73f5ba9811622f4db3a5b91b55c53e987e5f91cba"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.13",
+ "syn 2.0.14",
]
[[package]]
@@ 42,7 42,7 @@ checksum = "b9ccdd8f2a161be9bd5c023df56f1b2a0bd1d83872ae53b71a84a12c9bf6e842"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.13",
+ "syn 2.0.14",
]
[[package]]
@@ 454,7 454,7 @@ checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.13",
+ "syn 2.0.14",
]
[[package]]
@@ 1210,22 1210,22 @@ checksum = "cd0b0ec5f1c1ca621c432a25813d8d60c88abe6d3e08a3eb9cf37d97a0fe3d73"
[[package]]
name = "serde"
-version = "1.0.159"
+version = "1.0.160"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3c04e8343c3daeec41f58990b9d77068df31209f2af111e059e9fe9646693065"
+checksum = "bb2f3770c8bce3bcda7e149193a069a0f4365bda1fa5cd88e03bca26afc1216c"
dependencies = [
"serde_derive",
]
[[package]]
name = "serde_derive"
-version = "1.0.159"
+version = "1.0.160"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4c614d17805b093df4b147b51339e7e44bf05ef59fba1e45d83500bcfb4d8585"
+checksum = "291a097c63d8497e00160b166a967a4a79c64f3facdd01cbd7502231688d77df"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.13",
+ "syn 2.0.14",
]
[[package]]
@@ 1396,9 1396,9 @@ dependencies = [
[[package]]
name = "syn"
-version = "2.0.13"
+version = "2.0.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4c9da457c5285ac1f936ebd076af6dac17a61cfe7826f2076b4d015cf47bc8ec"
+checksum = "fcf316d5356ed6847742d036f8a39c3b8435cac10bd528a4bd461928a6ab34d5"
dependencies = [
"proc-macro2",
"quote",
@@ 1422,7 1422,7 @@ checksum = "f9456a42c5b0d803c8cd86e73dd7cc9edd429499f37a3550d286d5e86720569f"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.13",
+ "syn 2.0.14",
]
[[package]]
@@ 1505,7 1505,7 @@ checksum = "61a573bdc87985e9d6ddeed1b3d864e8a302c847e40d647746df2f1de209d1ce"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.13",
+ "syn 2.0.14",
]
[[package]]
M protocol/src/lib.rs => protocol/src/lib.rs +6 -3
@@ 46,11 46,14 @@ pub enum MessageS2C {
Pong {},
- Position {
- x: f64,
- y: f64,
+ PlayersUpdate {
+ rotation: Vec<f64>,
+ x: Vec<f64>,
+ y: Vec<f64>,
+ username: Vec<String>,
},
+
PlanetData {
planets: Vec<ProtocolPlanet>
}
M server/src/handler.rs => server/src/handler.rs +5 -3
@@ 33,10 33,12 @@ pub async fn handle_client(mgr: ClientManager, data: Arc<RwLock<PhysicsData>>, r
from
}).await?;
}
- ClientHandlerMessage::Position { x, y } => {
- send!(client_tx, &MessageS2C::Position {
+ ClientHandlerMessage::PlayersUpdate { rotation, x, y, usernames } => {
+ send!(client_tx, &MessageS2C::PlayersUpdate {
+ rotation,
x,
- y
+ y,
+ username: usernames
}).await?;
}
ClientHandlerMessage::PlanetData { planets } => {
M server/src/main.rs => server/src/main.rs +1 -0
@@ 23,6 23,7 @@ pub mod manager;
pub mod timer;
#[macro_use]
pub mod macros;
+pub mod planet;
const SCALE: f64 = 10.0;
M server/src/manager.rs => server/src/manager.rs +1 -1
@@ 61,6 61,6 @@ impl PhysicsData {
pub enum ClientHandlerMessage {
Tick,
ChatMessage { from: String, message: String },
- Position { x: f64, y: f64 },
+ PlayersUpdate { rotation: Vec<f64>, x: Vec<f64>, y: Vec<f64>, usernames: Vec<String> },
PlanetData { planets: Vec<ProtocolPlanet> },
}
A server/src/planet.rs => server/src/planet.rs +48 -0
@@ 0,0 1,48 @@
+use rapier2d_f64::prelude::{RigidBodyHandle, ColliderHandle, RigidBodySet, ColliderBuilder, RigidBodyBuilder, ColliderSet};
+
+use crate::SCALE;
+
+pub struct Planet {
+ pub body_handle: RigidBodyHandle,
+ pub position: (f64, f64),
+ pub radius: f64,
+ pub mass: f64
+}
+
+pub struct Planets {
+ pub planets: Vec<Planet>,
+}
+
+impl Planets {
+ pub fn make_planet(planets: &mut Vec<Planet>, mass: f64, radius: f64, position: (f64, f64), rigid_body_set: &mut RigidBodySet, collider_set: &mut ColliderSet) {
+ let collider = ColliderBuilder::ball(1000.0 / SCALE)
+ .build();
+ let body = RigidBodyBuilder::fixed()
+ .additional_mass(0.0);
+ let body_handle = rigid_body_set.insert(body);
+
+ collider_set.insert_with_parent(collider, body_handle, rigid_body_set);
+
+ planets.push(Planet {
+ body_handle,
+ position,
+ radius,
+ mass,
+ });
+ }
+
+ pub fn new(rigid_body_set: &mut RigidBodySet, collider_set: &mut ColliderSet) -> Planets {
+ let mut planets = Vec::new();
+
+ let earth = Planets::make_planet(
+ &mut planets,
+ 2000.0,
+ 1000.0,
+ (0.0, 0.0),
+ rigid_body_set,
+ collider_set,
+ );
+
+ Planets { planets }
+ }
+}
M server/src/timer.rs => server/src/timer.rs +16 -6
@@ 17,13 17,23 @@ pub async fn timer_main(mgr: ClientManager, physics_data: Arc<RwLock<PhysicsData
for (addr, client_thread) in mgr.handlers.read().await.iter() {
match client_thread.tx.send(ClientHandlerMessage::Tick).await {
Ok(_) => {
- let player_handle = match mgr.players.read().await.get(addr) {
- Some(s) => s.handle,
- None => { continue; }
- };
+ let player_handles = mgr.players.read().await.values().map(|s| {s.handle}).collect::<Vec<_>>();
let data = physics_data.read().await;
- let player_body = data.rigid_body_set.get(player_handle).unwrap();
- match client_thread.tx.send(ClientHandlerMessage::Position { x: (player_body.translation().x * SCALE) as f64, y: (player_body.translation().y * SCALE) as f64 }).await {
+ let mut translations = Vec::new();
+ let mut rotations = Vec::new();
+ for handle in player_handles {
+ let player_body = data.rigid_body_set.get(handle).unwrap();
+ translations.push(player_body.translation());
+ rotations.push(player_body.rotation().angle());
+ }
+ let usernames_raw = mgr.usernames.read().await;
+ let usernames = usernames_raw.values().collect::<Vec<_>>();
+
+ match client_thread.tx.send(ClientHandlerMessage::PlayersUpdate {
+ rotation: rotations,
+ usernames: usernames.into_iter().map(|s| s.clone()).collect(),
+ x: translations.clone().into_iter().map(|s| { s.x * SCALE}).collect(),
+ y: translations.into_iter().map(|s| { s.y * SCALE}).collect() }).await {
Ok(_) => (),
Err(e) => {
error!("unable to send position packet: {}", e);
A spacetime_py/__pycache__/ninja_syntax.cpython-310.pyc => spacetime_py/__pycache__/ninja_syntax.cpython-310.pyc +0 -0