~starkingdoms/starkingdoms

dde594033510bf885cbcf5cac608c66edaaa5961 — ghostlyzsh 2 years ago f2f8ab0
players can now leave
2 files changed, 36 insertions(+), 1 deletions(-)

M server/src/main.rs
M server/src/packet.rs
M server/src/main.rs => server/src/main.rs +32 -0
@@ 23,6 23,7 @@ fn main() {
        .add_systems(Startup, spawn_planets)
        //.add_systems(Update, on_connection)
        .add_systems(Update, on_message)
        .add_systems(Update, on_close)
        .add_systems(FixedUpdate, on_position_change)
        .run();



@@ 168,6 169,37 @@ fn on_message(
    }
}

fn on_close(
    player_query: Query<(Entity, &Player)>,
    mut commands: Commands,
    mut packet_recv: Local<ManualEventReader<ServerEvent>>,
    mut packet_send: ResMut<Events<ServerEvent>>,
) {
    let mut packets = Vec::new();
    for packet in packet_recv.read(&packet_send) {
        if let ServerEvent::Close(addr) = packet {
            for (entity, player) in &player_query {
                if player.addr == *addr {
                    commands.entity(entity).despawn();

                    let packet = Packet::PlayerLeave {
                        id: entity.index()
                    };
                    let buf = serde_json::to_vec(&packet).unwrap();
                    for (in_entity, player) in &player_query {
                        if entity != in_entity {
                            packets.push(ServerEvent::Send(player.addr, MessageType::Text, buf.clone()));
                        }
                    }
                }
            }
        }
    }
    for packet in packets {
        packet_send.send(packet);
    }
}

fn on_position_change(
    mut commands: Commands,
    part_query: Query<(Entity, &PartType, &Transform), Changed<Transform>>,

M server/src/packet.rs => server/src/packet.rs +4 -1
@@ 50,5 50,8 @@ pub enum Packet {
    },
    PartPositions {
        parts: Vec<(u32, Part)>
    }
    },
    PlayerLeave {
        id: u32,
    },
}