mirror of
https://git.ngram.ca/OpenJam/rc-servers
synced 2026-08-23 23:08:52 +00:00
Factor in connection latency when respawning player, bump LiteRustLib (with fix #143)
This commit is contained in:
8
Cargo.lock
generated
8
Cargo.lock
generated
@@ -2706,9 +2706,7 @@ checksum = "92daf443525c4cce67b150400bc2316076100ce0b3686209eb8cf3c31612e6f0"
|
||||
|
||||
[[package]]
|
||||
name = "literustlib"
|
||||
version = "0.4.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "c053853b6b4fbb6907900433ec84772b464088a2c8c508e95e05998800d01d42"
|
||||
version = "0.5.0"
|
||||
dependencies = [
|
||||
"bytes",
|
||||
"num_enum 0.7.6",
|
||||
@@ -2716,9 +2714,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "literustlib_server"
|
||||
version = "0.4.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "dab424002ff8523d212b08ccc5db462d797ca51bd7cca820329e173881e5fa71"
|
||||
version = "0.5.0"
|
||||
dependencies = [
|
||||
"async-recursion",
|
||||
"async-trait",
|
||||
|
||||
@@ -22,10 +22,10 @@ num-quaternion.workspace = true
|
||||
rand.workspace = true
|
||||
git-version.workspace = true
|
||||
|
||||
#literustlib_server = { version = "0.4", path = "../../LiteRustLib/server" }
|
||||
#literustlib = { version = "0.4", path = "../../LiteRustLib" }
|
||||
literustlib_server = { version = "0.4" }
|
||||
literustlib = { version = "0.4" }
|
||||
literustlib_server = { version = "0.5", path = "../../LiteRustLib/server" }
|
||||
literustlib = { version = "0.5", path = "../../LiteRustLib" }
|
||||
#literustlib_server = { version = "0.4" }
|
||||
#literustlib = { version = "0.4" }
|
||||
rlnl = { version = "0.1", path = "../../rlnl" }
|
||||
|
||||
oj_serdes.workspace = true
|
||||
|
||||
@@ -1298,6 +1298,12 @@ impl BattleArenaLogic {
|
||||
};
|
||||
if let Some(player_desc) = generic.user_descriptor(player_id) {
|
||||
let connections = generic.users.read().await.values().map(|player_info| player_info.connection.clone()).collect();
|
||||
let my_connection_latency = generic.users.read().await
|
||||
.iter()
|
||||
.filter(|(user_player_id, _)| **user_player_id == player_id)
|
||||
.next()
|
||||
.unwrap()
|
||||
.1.connection.connection.latency();
|
||||
tokio::task::spawn(super::respawn_player_after(
|
||||
respawn_timestamp,
|
||||
connections,
|
||||
@@ -1305,6 +1311,7 @@ impl BattleArenaLogic {
|
||||
Some(self.map_center.clone()),
|
||||
player_id,
|
||||
player_desc.machine.is_alive.clone(),
|
||||
my_connection_latency,
|
||||
));
|
||||
} else {
|
||||
log::error!("Player {} cannot respawn because they are not in the game!?", player_id);
|
||||
|
||||
@@ -16,8 +16,8 @@ pub use team_death_match::TeamDeathMatchLogic;
|
||||
|
||||
pub(super) mod trackers;
|
||||
|
||||
async fn respawn_player_after(after: chrono::DateTime<chrono::Utc>, players: Vec<crate::matches::generic::UserSender>, spawn: oj_rc_core::persist::config::Point, looking_at: Option<oj_rc_core::persist::config::Point>, player_id: u8, alive_flag: std::sync::Arc<std::sync::atomic::AtomicBool>) {
|
||||
let sleep_dur = after.signed_duration_since(chrono::Utc::now()).to_std().expect("Respawn duration too long to sleep");
|
||||
async fn respawn_player_after(after: chrono::DateTime<chrono::Utc>, players: Vec<crate::matches::generic::UserSender>, spawn: oj_rc_core::persist::config::Point, looking_at: Option<oj_rc_core::persist::config::Point>, player_id: u8, alive_flag: std::sync::Arc<std::sync::atomic::AtomicBool>, player_latency: std::time::Duration) {
|
||||
let sleep_dur = after.signed_duration_since(chrono::Utc::now()).to_std().expect("Respawn duration too long to sleep") - player_latency;
|
||||
tokio::time::sleep(sleep_dur).await;
|
||||
let spawn_payload = rlnl::events::sync::SpawnPoint {
|
||||
pos: rlnl::types::PosQuatPair {
|
||||
|
||||
@@ -368,6 +368,12 @@ impl PitLogic {
|
||||
).await;
|
||||
let spawn_point = Self::choose_spawn_point(&generic.map_config, player_id).1;
|
||||
let connections = generic.users.read().await.values().map(|player_info| player_info.connection.clone()).collect();
|
||||
let my_connection_latency = generic.users.read().await
|
||||
.iter()
|
||||
.filter(|(user_player_id, _)| **user_player_id == player_id)
|
||||
.next()
|
||||
.unwrap()
|
||||
.1.connection.connection.latency();
|
||||
tokio::task::spawn(super::respawn_player_after(
|
||||
respawn_timestamp,
|
||||
connections,
|
||||
@@ -375,6 +381,7 @@ impl PitLogic {
|
||||
Some(self.map_center.clone()),
|
||||
player_id,
|
||||
player_desc.machine.is_alive.clone(),
|
||||
my_connection_latency,
|
||||
));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -307,6 +307,12 @@ impl TeamDeathMatchLogic {
|
||||
};
|
||||
if let Some(player_desc) = generic.user_descriptor(player_id) {
|
||||
let connections = generic.users.read().await.values().map(|player_info| player_info.connection.clone()).collect();
|
||||
let my_connection_latency = generic.users.read().await
|
||||
.iter()
|
||||
.filter(|(user_player_id, _)| **user_player_id == player_id)
|
||||
.next()
|
||||
.unwrap()
|
||||
.1.connection.connection.latency();
|
||||
tokio::task::spawn(super::respawn_player_after(
|
||||
respawn_timestamp,
|
||||
connections,
|
||||
@@ -314,6 +320,7 @@ impl TeamDeathMatchLogic {
|
||||
Some(self.map_center.clone()),
|
||||
player_id,
|
||||
player_desc.machine.is_alive.clone(),
|
||||
my_connection_latency,
|
||||
));
|
||||
} else {
|
||||
log::error!("Player {} cannot respawn because they are not in the game!?", player_id);
|
||||
|
||||
Reference in New Issue
Block a user