From 6f03a2af64cfda2fe804d9701d4383db08ba7cb2 Mon Sep 17 00:00:00 2001 From: ghostlyzsh Date: Sat, 6 Apr 2024 19:05:24 -0500 Subject: [PATCH] save eligibility fixed, but when its a module touching a planet, theres a ton of packets sent every second all saying true --- server/src/main.rs | 70 +++++++++++++++++------ starkingdoms-client/src/globals.ts | 2 +- starkingdoms-client/src/hub.ts | 3 + starkingdoms-client/src/pages/Play.svelte | 4 +- 4 files changed, 59 insertions(+), 20 deletions(-) diff --git a/server/src/main.rs b/server/src/main.rs index 652b9d985a2db9cac698e6d1760f1a31e9f39520..aa3e6482690dc4d043d0f0279a4c4a043fb9a3a6 100644 --- a/server/src/main.rs +++ b/server/src/main.rs @@ -1614,9 +1614,18 @@ fn break_modules( fn save_eligibility( rapier_context: Res, planet_query: Query<(Entity, &PlanetType, &Children)>, + attached_query: Query< + &Attach, + (Without, Without), + >, + collider_query: Query< + (&Collider, &Parent), + (Without, Without), + >, mut player_query: Query<&mut Player>, mut packet_send: EventWriter, ) { + let mut player_eligibilities = HashMap::new(); for (_planet_entity, _planet_type, children) in &planet_query { for (entity1, entity2, intersecting) in rapier_context.intersection_pairs_with(*children.first().unwrap()) @@ -1627,17 +1636,36 @@ fn save_eligibility( } else { entity1 }; - if player_query.contains(other) { - let mut player = player_query.get_mut(other).unwrap(); - if !player.save_eligibility { - let packet = Packet::SaveEligibility { eligible: true }; - - packet_send.send(WsEvent::Send { - to: player.addr, - message: packet.into(), - }); + let player_entity = if player_query.contains(other) { + other + } else if attached_query.contains(other) { + attached_query + .get(other) + .unwrap() + .associated_player + .unwrap() + } else if collider_query.contains(other) { + let parent = collider_query.get(other).unwrap().1.get(); + if attached_query.contains(parent) { + attached_query + .get(parent) + .unwrap() + .associated_player + .unwrap() + } else { + continue; + } + } else { + continue; + }; + let player = player_query.get(player_entity).unwrap(); + if !player.save_eligibility { + if player_eligibilities.contains_key(&player_entity) { + println!("here"); + player_eligibilities.remove(&player_entity); } - player.save_eligibility = true; + println!("heretrue"); + player_eligibilities.insert(player_entity, true); } } else { let other = if *children.first().unwrap() == entity1 { @@ -1647,19 +1675,25 @@ fn save_eligibility( }; if player_query.contains(other) { let mut player = player_query.get_mut(other).unwrap(); - if player.save_eligibility { - let packet = Packet::SaveEligibility { eligible: false }; - - packet_send.send(WsEvent::Send { - to: player.addr, - message: packet.into(), - }); + if player.save_eligibility && !(player_eligibilities.contains_key(&other) && *player_eligibilities.get(&other).unwrap()) { + println!("herefalse"); + player.save_eligibility = false; + player_eligibilities.insert(other, false); } - player.save_eligibility = false; } } } } + for (other, eligible) in player_eligibilities.iter() { + let mut player = player_query.get_mut(*other).unwrap(); + player.save_eligibility = *eligible; + let packet = Packet::SaveEligibility { eligible: *eligible }; + + packet_send.send(WsEvent::Send { + to: player.addr, + message: packet.into(), + }); + } } fn on_close( diff --git a/starkingdoms-client/src/globals.ts b/starkingdoms-client/src/globals.ts index cd668bccbd51916520bd3eca74d8fa83b6c06025..cfd77dff39ee20a40f7fd603433f4bc1f09dfaf8 100644 --- a/starkingdoms-client/src/globals.ts +++ b/starkingdoms-client/src/globals.ts @@ -57,7 +57,7 @@ export const global: GlobalData = { left: false, right: false, rendering: null, - saveEligible: true, + saveEligible: false, }; export function player(): Part | undefined { diff --git a/starkingdoms-client/src/hub.ts b/starkingdoms-client/src/hub.ts index 7d057a220198cf8a147a5bac33113f56a6fa09e4..dcd99178c4ae918cc0cfa36cb775d0dcbe01ef47 100644 --- a/starkingdoms-client/src/hub.ts +++ b/starkingdoms-client/src/hub.ts @@ -19,6 +19,7 @@ import { global } from "./globals.ts"; import { startRender } from "./rendering.ts"; import { ButtonType } from "./protocol.ts"; import type Chatbox from "./components/Chatbox.svelte"; +import type Button from "./components/ui/Button.svelte"; import { part_texture_url } from "./textures.js"; import * as PIXI from "pixi.js"; @@ -46,6 +47,7 @@ export async function hub_connect( x_pos: HTMLSpanElement, y_pos: HTMLSpanElement, energy: HTMLDivElement, + beam_out_button: Button, ): Promise { logger("connecting to client hub at " + url); @@ -317,6 +319,7 @@ export async function hub_connect( } else if (packet.t == PacketType.SaveEligibility) { let p = packet.c; global.saveEligible = p.eligible; + console.log(global.saveEligible); } else if (packet.t == PacketType.SaveData) { let p = packet.c; // request save diff --git a/starkingdoms-client/src/pages/Play.svelte b/starkingdoms-client/src/pages/Play.svelte index d14cf93bf02887a9da7594aaf7d99f7c35a18adf..afd1e60a223b2035dfcaf320705c23d7fec753e9 100644 --- a/starkingdoms-client/src/pages/Play.svelte +++ b/starkingdoms-client/src/pages/Play.svelte @@ -25,6 +25,7 @@ //let antialiasing: boolean = false; let chatbox: Chatbox; + let beam_out_button: Button; const logger = createDebug("main"); logger( @@ -107,6 +108,7 @@ x_pos, y_pos, energy, + beam_out_button, ); }); @@ -165,7 +167,7 @@ -