~starkingdoms/starkingdoms

1b1d7c95ea5b0a1cf064d57cf501f1624d4eb6a9 — ghostlyzsh 1 year, 11 months ago 9e32164
save eligibility
2 files changed, 54 insertions(+), 0 deletions(-)

M server/src/component.rs
M server/src/main.rs
M server/src/component.rs => server/src/component.rs +1 -0
@@ 63,6 63,7 @@ pub struct Player {
    pub username: String,
    pub input: Input,
    pub selected: Option<Entity>,
    pub save_eligibility: bool,
}

#[derive(Bundle)]

M server/src/main.rs => server/src/main.rs +53 -0
@@ 80,6 80,7 @@ fn main() {
            FixedUpdate,
            (break_modules, gravity_update, player_input_update).chain(),
        )
        .add_systems(FixedUpdate, save_eligibility)
        .add_systems(FixedUpdate, convert_modules)
        //.insert_resource(Time::<Fixed>::from_seconds(1.0/20.0))
        .run();


@@ 263,6 264,7 @@ fn on_message(
                                username: username.to_string(),
                                input: component::Input::default(),
                                selected: None,
                                save_eligibility: false,
                            },
                            attach: Attach {
                                associated_player: None,


@@ 1360,6 1362,57 @@ fn break_modules(
    }
}

fn save_eligibility(
    rapier_context: Res<RapierContext>,
    planet_query: Query<(Entity, &PlanetType, &Children)>,
    mut player_query: Query<&mut Player>,
    mut packet_send: EventWriter<ServerEvent>,
) {
    for (_planet_entity, _planet_type, children) in &planet_query {
        for (entity1, entity2, intersecting) in
            rapier_context.intersections_with(*children.first().unwrap())
        {
            if intersecting {
                let other = if *children.first().unwrap() == entity1 {
                    entity2
                } else {
                    entity1
                };
                if player_query.contains(other) {
                    let mut player = player_query.get_mut(other).unwrap();
                    if player.save_eligibility != true {
                        let packet = Packet::SaveEligibility {
                            eligible: true
                        };
                        let buf = serde_json::to_vec(&packet).unwrap();

                        packet_send.send(ServerEvent::Send(player.addr, MessageType::Text, buf));
                    }
                    player.save_eligibility = true;
                }
            } else {
                let other = if *children.first().unwrap() == entity1 {
                    entity2
                } else {
                    entity1
                };
                if player_query.contains(other) {
                    let mut player = player_query.get_mut(other).unwrap();
                    if player.save_eligibility != false {
                        let packet = Packet::SaveEligibility {
                            eligible: false
                        };
                        let buf = serde_json::to_vec(&packet).unwrap();

                        packet_send.send(ServerEvent::Send(player.addr, MessageType::Text, buf));
                    }
                    player.save_eligibility = false;
                }
            }
        }
    }
}

fn on_close(
    player_query: Query<(Entity, &Player, &Attach)>,
    attached_query: Query<&Attach, With<PartType>>,