M server/src/main.rs => server/src/main.rs +52 -18
@@ 1614,9 1614,18 @@ fn break_modules(
fn save_eligibility(
rapier_context: Res<RapierContext>,
planet_query: Query<(Entity, &PlanetType, &Children)>,
+ attached_query: Query<
+ &Attach,
+ (Without<PlanetType>, Without<Player>),
+ >,
+ collider_query: Query<
+ (&Collider, &Parent),
+ (Without<Player>, Without<Attach>),
+ >,
mut player_query: Query<&mut Player>,
mut packet_send: EventWriter<WsEvent>,
) {
+ 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(
M starkingdoms-client/src/globals.ts => starkingdoms-client/src/globals.ts +1 -1
@@ 57,7 57,7 @@ export const global: GlobalData = {
left: false,
right: false,
rendering: null,
- saveEligible: true,
+ saveEligible: false,
};
export function player(): Part | undefined {
M starkingdoms-client/src/hub.ts => starkingdoms-client/src/hub.ts +3 -0
@@ 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<ClientHub | null> {
logger("connecting to client hub at " + url);
@@ 317,6 319,7 @@ export async function hub_connect(
} else if (packet.t == PacketType.SaveEligibility) {
let p = <SaveEligibilityPacket>packet.c;
global.saveEligible = p.eligible;
+ console.log(global.saveEligible);
} else if (packet.t == PacketType.SaveData) {
let p = <SaveDataPacket>packet.c;
// request save
M starkingdoms-client/src/pages/Play.svelte => starkingdoms-client/src/pages/Play.svelte +3 -1
@@ 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,
);
});
</script>
@@ 165,7 167,7 @@
<tbody>
<tr>
<td id="leave">
- <Button disabled={!global.saveEligible} on:click={beam_out}>
+ <Button on:click={beam_out} bind:this={beam_out_button}>
Beam out
</Button>
</td>