Implement ball_sync
This commit is contained in:
parent
3faeb9fd2c
commit
d117bb2f72
@ -4,7 +4,7 @@ use godot::{
|
|||||||
};
|
};
|
||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
net::util::NetVector3,
|
net::{network_manager::BallSync, util::NetVector3},
|
||||||
player::{IPlayer, NetTransform},
|
player::{IPlayer, NetTransform},
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -61,4 +61,22 @@ impl Ball {
|
|||||||
self.run_deferred(move |s| s.signals().on_ball_pickup().emit(player_id));
|
self.run_deferred(move |s| s.signals().on_ball_pickup().emit(player_id));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn get_sync(&self) -> BallSync {
|
||||||
|
BallSync {
|
||||||
|
transform: NetTransform {
|
||||||
|
location: self.base().get_global_position().into(),
|
||||||
|
rotation: self.base().get_global_rotation().into(),
|
||||||
|
},
|
||||||
|
velocity: self.base().get_linear_velocity().into(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn apply_sync(&mut self, sync: BallSync) {
|
||||||
|
self.base_mut()
|
||||||
|
.set_global_position(sync.transform.location.into());
|
||||||
|
self.base_mut()
|
||||||
|
.set_global_rotation(sync.transform.rotation.into());
|
||||||
|
self.base_mut().set_linear_velocity(sync.velocity.into());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -9,7 +9,7 @@ use crate::{
|
|||||||
map_resource::MapResource,
|
map_resource::MapResource,
|
||||||
net::{
|
net::{
|
||||||
network_manager::{
|
network_manager::{
|
||||||
NetworkManager,
|
BallSync, NetworkManager,
|
||||||
Package::{self, Kill, SelfSync, SpawnPlayer, TakeDamage},
|
Package::{self, Kill, SelfSync, SpawnPlayer, TakeDamage},
|
||||||
PeerKind, SyncPackage,
|
PeerKind, SyncPackage,
|
||||||
},
|
},
|
||||||
@ -147,7 +147,10 @@ impl INode for Game {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
peer.broadcast_unreliable(Package::Sync(sync_data));
|
peer.broadcast_unreliable(Package::Sync(
|
||||||
|
sync_data,
|
||||||
|
self.world_ball.as_ref().map(|b| b.bind().get_sync()),
|
||||||
|
));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -458,7 +461,11 @@ impl Game {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Handle a sync package from the server
|
// Handle a sync package from the server
|
||||||
pub fn handle_sync(&mut self, sync_data: HashMap<u16, SyncPackage>) {
|
pub fn handle_sync(
|
||||||
|
&mut self,
|
||||||
|
sync_data: HashMap<u16, SyncPackage>,
|
||||||
|
ball_sync: Option<BallSync>,
|
||||||
|
) {
|
||||||
for (
|
for (
|
||||||
player_id,
|
player_id,
|
||||||
SyncPackage {
|
SyncPackage {
|
||||||
@ -486,6 +493,12 @@ impl Game {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if let Some(ball_sync) = ball_sync
|
||||||
|
&& let Some(ball) = &mut self.world_ball
|
||||||
|
{
|
||||||
|
ball.bind_mut().apply_sync(ball_sync);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Handle a jump, either from the server or from a client
|
// Handle a jump, either from the server or from a client
|
||||||
|
|||||||
@ -218,9 +218,9 @@ impl INode for NetworkManager {
|
|||||||
game.bind_mut().spawn_player_client(id, transform);
|
game.bind_mut().spawn_player_client(id, transform);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Package::Sync(sync_data) => {
|
Package::Sync(sync_data, ball_sync) => {
|
||||||
if let Some(game) = &mut Game::singleton() {
|
if let Some(game) = &mut Game::singleton() {
|
||||||
game.bind_mut().handle_sync(sync_data);
|
game.bind_mut().handle_sync(sync_data, ball_sync);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Package::Jump(player_id) => {
|
Package::Jump(player_id) => {
|
||||||
@ -592,7 +592,7 @@ pub enum Package {
|
|||||||
|
|
||||||
// Game packages
|
// Game packages
|
||||||
SpawnPlayer(u16, NetTransform),
|
SpawnPlayer(u16, NetTransform),
|
||||||
Sync(HashMap<u16, SyncPackage>),
|
Sync(HashMap<u16, SyncPackage>, Option<BallSync>),
|
||||||
SelfSync(SyncPackage),
|
SelfSync(SyncPackage),
|
||||||
Jump(u16),
|
Jump(u16),
|
||||||
Shoot(u16, NetVector3, NetTransform, f32),
|
Shoot(u16, NetVector3, NetTransform, f32),
|
||||||
@ -610,6 +610,12 @@ pub struct SyncPackage {
|
|||||||
pub transform: NetTransform,
|
pub transform: NetTransform,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Debug, Clone, Serialize, Deserialize)]
|
||||||
|
pub struct BallSync {
|
||||||
|
pub transform: NetTransform,
|
||||||
|
pub velocity: NetVector3,
|
||||||
|
}
|
||||||
|
|
||||||
pub enum PeerKind {
|
pub enum PeerKind {
|
||||||
Client(Peer<Package>, SocketAddr),
|
Client(Peer<Package>, SocketAddr),
|
||||||
Server(Peer<Package>, u16),
|
Server(Peer<Package>, u16),
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user