From 1b1d7c95ea5b0a1cf064d57cf501f1624d4eb6a9 Mon Sep 17 00:00:00 2001 From: ghostlyzsh Date: Sat, 6 Jan 2024 18:34:02 -0600 Subject: [PATCH] save eligibility --- server/src/component.rs | 1 + server/src/main.rs | 53 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 54 insertions(+) diff --git a/server/src/component.rs b/server/src/component.rs index b13286a1e791ed4d442e20ee932f8373790eb678..a812e22ffc0b3b2542c447f4ee74397abfc8bd5d 100644 --- a/server/src/component.rs +++ b/server/src/component.rs @@ -63,6 +63,7 @@ pub struct Player { pub username: String, pub input: Input, pub selected: Option, + pub save_eligibility: bool, } #[derive(Bundle)] diff --git a/server/src/main.rs b/server/src/main.rs index cc671b1861e23cd592e397e2068ba8e74d3a03c9..9a07b909210cb7fdc222a96e2de2909fc16906bf 100644 --- a/server/src/main.rs +++ b/server/src/main.rs @@ -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::::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, + planet_query: Query<(Entity, &PlanetType, &Children)>, + mut player_query: Query<&mut Player>, + mut packet_send: EventWriter, +) { + 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>,