From d1aef196f5bb5526aefa6f3785dcbaa4d9471e2d Mon Sep 17 00:00:00 2001 From: core Date: Thu, 4 Jan 2024 22:07:55 -0500 Subject: [PATCH] fix some weird stuff that happens on ff sometimes --- server/src/main.rs | 81 +++++++++++++++++++---------- starkingdoms-client/src/hub.ts | 17 +++--- starkingdoms-client/src/protocol.ts | 6 +-- 3 files changed, 65 insertions(+), 39 deletions(-) diff --git a/server/src/main.rs b/server/src/main.rs index 0ffc63f9c93a246dad13b7ce0e596c3e260b51d7..703a642e024633aa7c0ffbbb0615fa5b09bf51e8 100644 --- a/server/src/main.rs +++ b/server/src/main.rs @@ -97,7 +97,8 @@ fn spawn_planets(mut commands: Commands) { .insert(AdditionalMassProperties::Mass(EARTH_MASS)) .insert(ReadMassProperties::default()) .with_children(|children| { - children.spawn(Collider::ball((EARTH_SIZE + 3.) / SCALE)) + children + .spawn(Collider::ball((EARTH_SIZE + 3.) / SCALE)) .insert(ActiveEvents::COLLISION_EVENTS) .insert(Sensor); }) @@ -112,7 +113,8 @@ fn spawn_planets(mut commands: Commands) { .insert(AdditionalMassProperties::Mass(MOON_MASS)) .insert(ReadMassProperties::default()) .with_children(|children| { - children.spawn(Collider::ball((MOON_SIZE + 3.) / SCALE)) + children + .spawn(Collider::ball((MOON_SIZE + 3.) / SCALE)) .insert(ActiveEvents::COLLISION_EVENTS) .insert(Sensor); }) @@ -137,12 +139,12 @@ fn module_spawn( ); transform.rotate_z(angle); if part_query.iter().count() < FREE_MODULE_CAP { - let mut entity = commands - .spawn(PartBundle { - part_type: PartType::Cargo, - transform: TransformBundle::from(transform), - }); - entity.insert(RigidBody::Dynamic) + let mut entity = commands.spawn(PartBundle { + part_type: PartType::Cargo, + transform: TransformBundle::from(transform), + }); + entity + .insert(RigidBody::Dynamic) .with_children(|children| { children .spawn(Collider::cuboid(18.75 / SCALE, 23.4375 / SCALE)) @@ -162,7 +164,7 @@ fn module_spawn( part: Part { part_type: PartType::Cargo, transform: proto_transform!(transform), - } + }, }; let buf = serde_json::to_vec(&packet).unwrap(); @@ -558,10 +560,8 @@ fn on_message( } } } - let mut module = - attached_query.get_mut(select).unwrap(); - module.2.translation = - vec3(x / SCALE, y / SCALE, 0.); + let mut module = attached_query.get_mut(select).unwrap(); + module.2.translation = vec3(x / SCALE, y / SCALE, 0.); } else { for (i, child) in attach.children.clone().iter().enumerate() { @@ -823,7 +823,9 @@ fn convert_modules( 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()) { + for (entity1, entity2, intersecting) in + rapier_context.intersections_with(*children.first().unwrap()) + { if intersecting { let other = if *children.first().unwrap() == entity1 { entity2 @@ -833,10 +835,23 @@ fn convert_modules( let player_entity = if player_query.contains(other) { other } else if attached_query.contains(other) { - attached_query.get(other).unwrap().1.associated_player.unwrap() - } else { continue }; + attached_query + .get(other) + .unwrap() + .1 + .associated_player + .unwrap() + } else { + continue; + }; let player_attach = player_query.get(player_entity).unwrap(); - convert_modules_recursive(*planet_type, player_attach.clone(), &mut attached_query, &mut collider_query, &mut packet_send); + convert_modules_recursive( + *planet_type, + player_attach.clone(), + &mut attached_query, + &mut collider_query, + &mut packet_send, + ); } } } @@ -857,12 +872,12 @@ fn convert_modules_recursive( match planet_type { PlanetType::Moon => { *part_type = PartType::Hub; - let (mut collider, mut transform) = collider_query.get_mut(*children.first().unwrap()).unwrap(); - *collider = Collider::cuboid(PART_HALF_SIZE / SCALE, PART_HALF_SIZE / SCALE); + let (mut collider, mut transform) = + collider_query.get_mut(*children.first().unwrap()).unwrap(); + *collider = + Collider::cuboid(PART_HALF_SIZE / SCALE, PART_HALF_SIZE / SCALE); *transform = Transform::from_xyz(0., 0., 0.); - let packet = Packet::DespawnPart { - id: child.index(), - }; + let packet = Packet::DespawnPart { id: child.index() }; let buf = serde_json::to_vec(&packet).unwrap(); packet_send.send(ServerEvent::Broadcast(MessageType::Text, buf.clone())); @@ -871,7 +886,7 @@ fn convert_modules_recursive( part: Part { part_type: PartType::Hub, transform: proto_transform!(transform), - } + }, }; let buf = serde_json::to_vec(&packet).unwrap(); @@ -880,7 +895,13 @@ fn convert_modules_recursive( _ => {} } } - convert_modules_recursive(planet_type, attach.clone(), attached_query, collider_query, packet_send); + convert_modules_recursive( + planet_type, + attach.clone(), + attached_query, + collider_query, + packet_send, + ); } } } @@ -898,7 +919,13 @@ fn on_close( if let ServerEvent::Close(addr) = packet { for (entity, player, attach) in &player_query { if player.addr == *addr { - despawn_module_tree(&mut commands, attach, &attached_query, &part_query, &mut packets); + despawn_module_tree( + &mut commands, + attach, + &attached_query, + &part_query, + &mut packets, + ); commands.entity(entity).despawn_recursive(); let packet = Packet::PlayerLeave { id: entity.index() }; @@ -931,9 +958,7 @@ fn despawn_module_tree( for child in attach.children { if let Some(child) = child { commands.entity(child).despawn_recursive(); - let packet = Packet::DespawnPart { - id: child.index(), - }; + let packet = Packet::DespawnPart { id: child.index() }; let buf = serde_json::to_vec(&packet).unwrap(); packets.push(ServerEvent::Broadcast(MessageType::Text, buf.clone())); diff --git a/starkingdoms-client/src/hub.ts b/starkingdoms-client/src/hub.ts index 0d5b8d3f688fa2981cf50b4f8e40439891d748fd..3a088e920cd94d5509235c74acc816b9b3943456 100644 --- a/starkingdoms-client/src/hub.ts +++ b/starkingdoms-client/src/hub.ts @@ -1,6 +1,6 @@ import createDebug from "debug"; import type { - DespawnPartPacket, + DespawnPartPacket, MessagePacket, Packet, PartPositionsPacket, @@ -16,7 +16,7 @@ import { global } from "./globals.ts"; import { startRender } from "./rendering.ts"; import { ButtonType } from "./protocol.ts"; import type Chatbox from "./components/Chatbox.svelte"; -import {part_texture_url} from "./textures.js"; +import { part_texture_url } from "./textures.js"; import * as PIXI from "pixi.js"; const logger = createDebug("hub"); @@ -201,7 +201,7 @@ export async function hub_connect( let id = p.parts[i][0]; let new_part = p.parts[i][1]; - /*if (global.parts_map.has(id)) { + if (global.parts_map.has(id)) { let old_part = global.parts_map.get(id)!; let dx = new_part.transform.x - old_part.transform.x; let dy = new_part.transform.y - old_part.transform.y; @@ -211,7 +211,8 @@ export async function hub_connect( if (dx < CUTOFF_XY && dy < CUTOFF_XY && drot < CUTOFF_ROT) { continue; // this packet is under the cutoff, we don't care about it } - }*/ + } + global.parts_map.set(id, new_part); if (id === global.me?.part_id) { document.getElementById("pos-val-x")!.innerText = Math.round( @@ -235,11 +236,11 @@ export async function hub_connect( } else if (packet.t == PacketType.DespawnPart) { let p = packet.c; let id = p.id; - let part_sprite = global.rendering!.part_sprite_map.get(id); - logger(`despawned part`); - global.parts_map.delete(id); - global.rendering!.part_sprite_map.delete(id); + let part_sprite = global.rendering!.part_sprite_map.get(id)!; + global.rendering!.app.stage.removeChild(part_sprite); + global.rendering!.part_sprite_map.delete(id); + global.parts_map.delete(id); } else if (packet.t == PacketType.PlayerLeave) { let p = packet.c; let username = global.players_map.get(p.id)!; diff --git a/starkingdoms-client/src/protocol.ts b/starkingdoms-client/src/protocol.ts index 13edcbd47dc9673769ecde672d1fd0a17d867b2c..e6ea1cf9d543ede013aa55b62b7d19dc6a88427e 100644 --- a/starkingdoms-client/src/protocol.ts +++ b/starkingdoms-client/src/protocol.ts @@ -41,11 +41,11 @@ export interface PartPositionsPacket { parts: [number, Part][]; } export interface SpawnPartPacket { - id: number; - part: Part; + id: number; + part: Part; } export interface DespawnPartPacket { - id: number; + id: number; } export interface PlayerInputPacket { up: boolean;