M assets/dist/spritesheet-125.json => assets/dist/spritesheet-125.json +7 -7
@@ 45,7 45,7 @@
"pivot": { "x": 32, "y": 32 },
"9slicedFrame": { "x": 0, "y": 0, "w": 64, "h": 64 }
},
- "autoplr_cfg.png": {
+ "hearty.png": {
"frame": { "x": 0, "y": 896, "w": 64, "h": 64 },
"rotated": false,
"trimmed": false,
@@ 54,7 54,7 @@
"pivot": { "x": 32, "y": 32 },
"9slicedFrame": { "x": 0, "y": 0, "w": 64, "h": 64 }
},
- "hearty.png": {
+ "autoplr_cfg.png": {
"frame": { "x": 0, "y": 960, "w": 64, "h": 64 },
"rotated": false,
"trimmed": false,
@@ 108,7 108,7 @@
"pivot": { "x": 32, "y": 32 },
"9slicedFrame": { "x": 0, "y": 0, "w": 64, "h": 64 }
},
- "hub_on.png": {
+ "autoplr_on.png": {
"frame": { "x": 0, "y": 1344, "w": 64, "h": 64 },
"rotated": false,
"trimmed": false,
@@ 117,7 117,7 @@
"pivot": { "x": 32, "y": 32 },
"9slicedFrame": { "x": 0, "y": 0, "w": 64, "h": 64 }
},
- "powerhub_on.png": {
+ "hub_on.png": {
"frame": { "x": 0, "y": 1408, "w": 64, "h": 64 },
"rotated": false,
"trimmed": false,
@@ 126,7 126,7 @@
"pivot": { "x": 32, "y": 32 },
"9slicedFrame": { "x": 0, "y": 0, "w": 64, "h": 64 }
},
- "autoplr_on.png": {
+ "powerhub_on.png": {
"frame": { "x": 0, "y": 1472, "w": 64, "h": 64 },
"rotated": false,
"trimmed": false,
@@ 180,7 180,7 @@
"pivot": { "x": 32, "y": 32 },
"9slicedFrame": { "x": 0, "y": 0, "w": 64, "h": 64 }
},
- "hub_off.png": {
+ "powerhub_off.png": {
"frame": { "x": 0, "y": 1856, "w": 64, "h": 64 },
"rotated": false,
"trimmed": false,
@@ 189,7 189,7 @@
"pivot": { "x": 32, "y": 32 },
"9slicedFrame": { "x": 0, "y": 0, "w": 64, "h": 64 }
},
- "powerhub_off.png": {
+ "hub_off.png": {
"frame": { "x": 0, "y": 1920, "w": 64, "h": 64 },
"rotated": false,
"trimmed": false,
M assets/dist/spritesheet-125.png => assets/dist/spritesheet-125.png +0 -0
M assets/dist/spritesheet-375.json => assets/dist/spritesheet-375.json +7 -7
@@ 45,7 45,7 @@
"pivot": { "x": 96, "y": 96 },
"9slicedFrame": { "x": 0, "y": 0, "w": 192, "h": 192 }
},
- "autoplr_cfg.png": {
+ "hearty.png": {
"frame": { "x": 0, "y": 2688, "w": 192, "h": 192 },
"rotated": false,
"trimmed": false,
@@ 54,7 54,7 @@
"pivot": { "x": 96, "y": 96 },
"9slicedFrame": { "x": 0, "y": 0, "w": 192, "h": 192 }
},
- "hearty.png": {
+ "autoplr_cfg.png": {
"frame": { "x": 0, "y": 2880, "w": 192, "h": 192 },
"rotated": false,
"trimmed": false,
@@ 108,7 108,7 @@
"pivot": { "x": 96, "y": 96 },
"9slicedFrame": { "x": 0, "y": 0, "w": 192, "h": 192 }
},
- "hub_on.png": {
+ "autoplr_on.png": {
"frame": { "x": 0, "y": 4032, "w": 192, "h": 192 },
"rotated": false,
"trimmed": false,
@@ 117,7 117,7 @@
"pivot": { "x": 96, "y": 96 },
"9slicedFrame": { "x": 0, "y": 0, "w": 192, "h": 192 }
},
- "powerhub_on.png": {
+ "hub_on.png": {
"frame": { "x": 0, "y": 4224, "w": 192, "h": 192 },
"rotated": false,
"trimmed": false,
@@ 126,7 126,7 @@
"pivot": { "x": 96, "y": 96 },
"9slicedFrame": { "x": 0, "y": 0, "w": 192, "h": 192 }
},
- "autoplr_on.png": {
+ "powerhub_on.png": {
"frame": { "x": 0, "y": 4416, "w": 192, "h": 192 },
"rotated": false,
"trimmed": false,
@@ 180,7 180,7 @@
"pivot": { "x": 96, "y": 96 },
"9slicedFrame": { "x": 0, "y": 0, "w": 192, "h": 192 }
},
- "hub_off.png": {
+ "powerhub_off.png": {
"frame": { "x": 0, "y": 5568, "w": 192, "h": 192 },
"rotated": false,
"trimmed": false,
@@ 189,7 189,7 @@
"pivot": { "x": 96, "y": 96 },
"9slicedFrame": { "x": 0, "y": 0, "w": 192, "h": 192 }
},
- "powerhub_off.png": {
+ "hub_off.png": {
"frame": { "x": 0, "y": 5760, "w": 192, "h": 192 },
"rotated": false,
"trimmed": false,
M assets/dist/spritesheet-375.png => assets/dist/spritesheet-375.png +0 -0
M assets/dist/spritesheet-full.json => assets/dist/spritesheet-full.json +4 -4
@@ 108,7 108,7 @@
"pivot": { "x": 256, "y": 256 },
"9slicedFrame": { "x": 0, "y": 0, "w": 512, "h": 512 }
},
- "hub_on.png": {
+ "autoplr_on.png": {
"frame": { "x": 1536, "y": 6144, "w": 512, "h": 512 },
"rotated": false,
"trimmed": false,
@@ 126,7 126,7 @@
"pivot": { "x": 256, "y": 256 },
"9slicedFrame": { "x": 0, "y": 0, "w": 512, "h": 512 }
},
- "autoplr_on.png": {
+ "hub_on.png": {
"frame": { "x": 1536, "y": 7168, "w": 512, "h": 512 },
"rotated": false,
"trimmed": false,
@@ 180,7 180,7 @@
"pivot": { "x": 256, "y": 256 },
"9slicedFrame": { "x": 0, "y": 0, "w": 512, "h": 512 }
},
- "hub_off.png": {
+ "powerhub_off.png": {
"frame": { "x": 4608, "y": 0, "w": 512, "h": 512 },
"rotated": false,
"trimmed": false,
@@ 189,7 189,7 @@
"pivot": { "x": 256, "y": 256 },
"9slicedFrame": { "x": 0, "y": 0, "w": 512, "h": 512 }
},
- "powerhub_off.png": {
+ "hub_off.png": {
"frame": { "x": 5120, "y": 0, "w": 512, "h": 512 },
"rotated": false,
"trimmed": false,
M assets/dist/spritesheet-full.png => assets/dist/spritesheet-full.png +0 -0
M client/index.html => client/index.html +5 -1
@@ 42,7 42,11 @@
let servers = [];
function server_url_to_ping_url(server) {
- return server + "/ping"
+ if(server.endsWith('/')) {
+ return server + "ping"
+ } else {
+ return server + "/ping"
+ }
}
function server_url_to_gateway_url(server) {
M server/src/entity.rs => server/src/entity.rs +10 -0
@@ 141,6 141,16 @@ impl EntityHandler {
}
None
}
+ pub fn get_id_from_attached(&self, p_module: AttachedModule) -> Option<EntityId> {
+ for (id, entity) in self.entities.iter() {
+ if let Entity::AttachedModule(module) = entity {
+ if module.handle == p_module.handle {
+ return Some(*id);
+ }
+ }
+ }
+ None
+ }
pub fn gravity(&self, position: (f64, f64), mass: f64) -> (f64, f64) {
let mut direction = Vector2::zeros();
M server/src/handler.rs => server/src/handler.rs +3 -18
@@ 275,7 275,7 @@ pub async fn handle_client(
data_handle.rigid_body_set = rigid_body_set;
data_handle.collider_set = collider_set;
- let module_id = AttachedModule::attach_new(
+ /*let module_id = AttachedModule::attach_new(
&mut data_handle,
&mut e_write_handle,
player_id,
@@ 306,23 306,8 @@ pub async fn handle_client(
module_type: ModuleType::Cargo,
},
2,
- );
- let module_id = AttachedModule::attach_new(
- &mut data_handle,
- &mut e_write_handle,
- module_id,
- player_id,
- ModuleTemplate {
- translation: vector![0.0, 50.0],
- mass_properties: MassProperties::new(
- point![0.0, 0.0],
- 0.0001,
- 0.005,
- ),
- module_type: ModuleType::Hub,
- },
- 2,
- );
+ );*/
+
}
}
MessageC2S::Goodbye(pkt) => {
M server/src/main.rs => server/src/main.rs +17 -4
@@ 9,7 9,7 @@ use async_std::sync::RwLock;
use entity::EntityHandler;
use futures::StreamExt;
use lazy_static::lazy_static;
-use log::{error, info, warn, Level};
+use log::{error, info, warn, Level, debug};
use manager::PhysicsData;
use nalgebra::vector;
use rapier2d_f64::prelude::{
@@ 146,20 146,21 @@ async fn _handle_request(
mgr.handlers.write().await.remove(&remote_addr);
mgr.usernames.write().await.remove(&remote_addr);
// remove player physics body
+ let mut entity_write = entities.write().await;
let mut data = physics_data.write().await;
let mut rigid_body_set = data.rigid_body_set.clone();
let mut island_manager = data.island_manager.clone();
let mut collider_set = data.collider_set.clone();
let mut impulse_joint_set = data.impulse_joint_set.clone();
let mut multibody_joint_set = data.multibody_joint_set.clone();
- let player_id = match entities.read().await.get_player_id(remote_addr) {
+ let player_id = match entity_write.get_player_id(remote_addr) {
Some(s) => s,
None => {
warn!("[{}] player missing from entities.players", remote_addr);
return Err("Player missing from entities.players".into());
}
};
- if let Entity::Player(player) = entities.read().await.entities.get(&player_id).unwrap() {
+ if let Entity::Player(player) = entity_write.entities.get(&player_id).unwrap() {
rigid_body_set.remove(
player.handle,
&mut island_manager,
@@ 168,13 169,25 @@ async fn _handle_request(
&mut multibody_joint_set,
true,
);
+ for module in player.search_modules(&entity_write) {
+ rigid_body_set.remove(
+ module.handle,
+ &mut island_manager,
+ &mut collider_set,
+ &mut impulse_joint_set,
+ &mut multibody_joint_set,
+ true,
+ );
+ let module_id = entity_write.get_id_from_attached(module).unwrap();
+ entity_write.entities.remove(&module_id);
+ }
}
data.rigid_body_set = rigid_body_set;
data.collider_set = collider_set;
data.island_manager = island_manager;
data.impulse_joint_set = impulse_joint_set;
data.multibody_joint_set = multibody_joint_set;
- entities.write().await.entities.remove(&player_id);
+ entity_write.entities.remove(&player_id);
}
Ok(())
M server/src/module.rs => server/src/module.rs +1 -1
@@ 242,7 242,7 @@ impl AttachedModule {
}
pub fn search_modules(&self, entities: &EntityHandler) -> Vec<AttachedModule> {
- let mut modules = Vec::new();
+ let mut modules = vec![self.clone()];
for attachment in self.children.iter().flatten() {
if let Entity::AttachedModule(child_module) =
entities.entities.get(&attachment.child).unwrap()
M server/src/timer.rs => server/src/timer.rs +1 -1
@@ 12,7 12,7 @@ use crate::{
};
use async_std::sync::RwLock;
use async_std::task::sleep;
-use log::{info, warn};
+use log::{info, warn, debug};
use nalgebra::{point, vector};
use rand::Rng;
use rapier2d_f64::prelude::{