M Cargo.lock => Cargo.lock +1 -0
@@ 3311,6 3311,7 @@ dependencies = [
"lazy_static",
"log",
"nalgebra",
+ "rand",
"rapier2d-f64",
"serde",
"serde_json",
M server/Cargo.toml => server/Cargo.toml +1 -0
@@ 25,6 25,7 @@ starkingdoms-protocol = { version = "0.1.0", path = "../protocol" }
lazy_static = "1.4.0"
rapier2d-f64 = { version = "0.17.2", features = [ "simd-stable" ] }
nalgebra = "0.32.2"
+rand = "0.8.5"
[build-dependencies]
cargo_metadata = "0.15"
M server/src/handler.rs => server/src/handler.rs +8 -1
@@ 1,4 1,5 @@
use std::error::Error;
+use std::f64::consts::PI;
use std::net::SocketAddr;
use std::sync::Arc;
use std::time::{Duration, SystemTime};
@@ 6,6 7,7 @@ use futures::stream::{SplitSink, SplitStream};
use futures::{FutureExt, SinkExt, StreamExt};
use log::{error, info, debug, warn};
use nalgebra::{vector, point};
+use rand::Rng;
use rapier2d_f64::prelude::{RigidBodyBuilder, RigidBodyType, ColliderBuilder, MassProperties, Collider};
use tungstenite::Message;
use starkingdoms_protocol::goodbye_reason::GoodbyeReason;
@@ 141,8 143,13 @@ pub async fn handle_client(mgr: ClientManager, entities: Arc<RwLock<EntityHandle
let mut rigid_body_set = data_handle.rigid_body_set.clone();
let mut collider_set = data_handle.collider_set.clone();
+ let angle: f64 = {
+ let mut rng = rand::thread_rng();
+ rng.gen::<f64>() * PI * 2.
+ };
let player_body = RigidBodyBuilder::new(RigidBodyType::Dynamic)
- .translation(vector![0.0, 2100.0/SCALE])
+ .translation(vector![angle.cos() * 2050. / SCALE, angle.sin() * 2050.0/SCALE])
+ .rotation(angle + PI / 2.)
.build();
let player_collider: Collider = ColliderBuilder::cuboid(25.0 / SCALE, 25.0 / SCALE)
.mass_properties(MassProperties::new(point![0.0, 0.0], 120.0, 122500.0))