~starkingdoms/starkingdoms

8e102fc626dd77ec76b80425ef7f63e7be708406 — ghostlyzsh 2 years ago cde0f4a
added player (yay) does it work? idk, client broke
4 files changed, 25 insertions(+), 7 deletions(-)

M client/src/lib.rs
M server/src/handler.rs
M server/src/manager.rs
M server/src/timer.rs
M client/src/lib.rs => client/src/lib.rs +3 -3
@@ 6,7 6,7 @@ use futures::StreamExt;
use log::{debug, error, info, Level, trace, warn};
use wasm_bindgen::prelude::*;
use ws_stream_wasm::{WsErr, WsMessage, WsMeta, WsStream};
use starkingdoms_protocol::{Planet, State};
use starkingdoms_protocol::{ProtocolPlanet, State};
use starkingdoms_protocol::PROTOCOL_VERSION;
use starkingdoms_protocol::MessageS2C;
use starkingdoms_protocol::MessageC2S;


@@ 39,7 39,7 @@ extern {
#[derive(Debug)]
pub struct Client {
    pub client_data: Option<ClientData>,
    pub planets: Vec<Planet>,
    pub planets: Vec<ProtocolPlanet>,
    pub x: f64,
    pub y: f64
}


@@ 286,4 286,4 @@ pub fn get_texture(texture_id: &str) -> Option<String> {
    } else {
        None
    }
}
\ No newline at end of file
}

M server/src/handler.rs => server/src/handler.rs +6 -0
@@ 32,6 32,12 @@ pub async fn handle_client(mgr: ClientManager, data: Arc<RwLock<PhysicsData>>, r
                        from
                    }).await?;
                }
                ClientHandlerMessage::Position { x, y } => {
                    send!(client_tx, &MessageS2C::Position {
                        x,
                        y
                    }).await?;
                }
            }
        } else {
            info!("channel closed, shutting down");

M server/src/manager.rs => server/src/manager.rs +3 -1
@@ 57,7 57,9 @@ impl PhysicsData {
    }
}

#[derive(Debug)]
pub enum ClientHandlerMessage {
    Tick,
    ChatMessage { from: String, message: String }
    ChatMessage { from: String, message: String },
    Position { x: f64, y: f64 },
}

M server/src/timer.rs => server/src/timer.rs +13 -3
@@ 4,7 4,7 @@ use log::{error};

use rapier2d::prelude::{PhysicsPipeline};
use tokio::{time::sleep, sync::RwLock};
use crate::{manager::{ClientHandlerMessage, ClientManager, PhysicsData}, SCALE};
use crate::{manager::{ClientHandlerMessage, ClientManager, PhysicsData}, SCALE, send};

pub async fn timer_main(mgr: ClientManager, physics_data: Arc<RwLock<PhysicsData>>) {
    let mut pipeline = PhysicsPipeline::new();


@@ 13,9 13,19 @@ pub async fn timer_main(mgr: ClientManager, physics_data: Arc<RwLock<PhysicsData

        physics_data.write().await.tick(&mut pipeline);

        for (_addr, client_thread) in mgr.handlers.read().await.iter() {
        for (addr, client_thread) in mgr.handlers.read().await.iter() {
            match client_thread.tx.send(ClientHandlerMessage::Tick).await {
                Ok(_) => (),
                Ok(_) => {
                    let player_handle = mgr.players.read().await.get(addr).unwrap().handle;
                    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 as f64, y: player_body.translation().y as f64 }).await {
                        Ok(_) => (),
                        Err(e) => {
                            error!("unable to send position packet: {}", e);
                        }
                    };
                }
                Err(e) => {
                    error!("unable to update a client thread: {}", e);
                }