implement player id allocation (#90)
* implement player id allocation * move `bevy/debug` to `dbg`
This commit is contained in:
@@ -2,7 +2,7 @@ use crate::{
|
||||
GameState, global_observer,
|
||||
heads_database::HeadsDatabase,
|
||||
player::ClientPlayerId,
|
||||
protocol::{ClientEnteredPlaying, PlayerId, SetGameTick, messages::AssignClientPlayer},
|
||||
protocol::{ClientEnteredPlaying, PlayerIdCounter, SetGameTick, messages::AssignClientPlayer},
|
||||
tb_entities::SpawnPoint,
|
||||
tick::GameTick,
|
||||
};
|
||||
@@ -38,12 +38,14 @@ pub fn plugin(app: &mut App) {
|
||||
fn on_client_playing(
|
||||
trigger: On<FromClient<ClientEnteredPlaying>>,
|
||||
commands: Commands,
|
||||
clients: Query<&ClientPlayerId>,
|
||||
query: Query<&Transform, With<SpawnPoint>>,
|
||||
heads_db: Res<HeadsDatabase>,
|
||||
) -> Result {
|
||||
info!("client has entered playing gamestate");
|
||||
|
||||
crate::player::spawn(commands, trigger.client_id, query, heads_db)
|
||||
let id = clients.get(trigger.client_id.entity().unwrap()).unwrap();
|
||||
crate::player::spawn(commands, trigger.client_id, id.0, query, heads_db)
|
||||
.ok_or("failed to spawn player")?;
|
||||
|
||||
Ok(())
|
||||
@@ -100,16 +102,17 @@ fn on_connected(
|
||||
game_tick: Res<GameTick>,
|
||||
mut commands: Commands,
|
||||
mut assign_id: MessageWriter<ToClients<AssignClientPlayer>>,
|
||||
mut ids: ResMut<PlayerIdCounter>,
|
||||
) {
|
||||
let client = trigger.event_target();
|
||||
info!("{client} connected to server!");
|
||||
|
||||
let id = ClientPlayerId(PlayerId { id: 0 });
|
||||
commands.entity(client).insert(id);
|
||||
let id = ids.alloc();
|
||||
commands.entity(client).insert(ClientPlayerId(id));
|
||||
|
||||
assign_id.write(ToClients {
|
||||
mode: SendMode::Direct(ClientId::Client(trigger.entity)),
|
||||
message: AssignClientPlayer(id.0),
|
||||
message: AssignClientPlayer(id),
|
||||
});
|
||||
|
||||
commands.server_trigger(ToClients {
|
||||
|
||||
Reference in New Issue
Block a user