M client/src/index.ts => client/src/index.ts +0 -1
@@ 212,7 212,6 @@ async function client_main(server: string, username: string, texture_quality: st
for (let i = 0; i < global.modules.length; i++) {
let module = global.modules[i];
- console.log(module);
// @ts-ignore
let tex = global.spritesheet!["frames"][module_type_to_tex_id(module.moduleType)];
M server/src/entity.rs => server/src/entity.rs +10 -0
@@ 97,6 97,16 @@ impl EntityHandler {
}
module_count
}
+ pub fn get_from_module(&self, p_module: &Module) -> Option<EntityId> {
+ for (id, entity) in self.entities.iter() {
+ if let Entity::Module(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/manager.rs => server/src/manager.rs +1 -0
@@ 37,6 37,7 @@ impl Player {
pub struct Module {
pub handle: RigidBodyHandle,
pub module_type: ModuleType,
+ pub lifetime: f64,
}
#[derive(Default, Clone)]
M server/src/timer.rs => server/src/timer.rs +25 -6
@@ 13,7 13,7 @@ use crate::orbit::orbit::{calculate_point_on_orbit, calculate_world_position_of_
pub const ROTATIONAL_FORCE: f64 = 100.0;
pub const LATERAL_FORCE: f64 = 100.0;
-pub const MODULE_SPAWN: f64 = 3000.0;
+pub const MODULE_SPAWN: f64 = 3.0;
pub const MODULE_MAX: u32 = 10;
pub async fn timer_main(mgr: ClientManager, physics_data_orig: Arc<RwLock<PhysicsData>>, entities: Arc<RwLock<EntityHandler>>) {
@@ 66,8 66,7 @@ pub async fn timer_main(mgr: ClientManager, physics_data_orig: Arc<RwLock<Physic
let mut protocol_players = vec![];
{
- if module_timer > 1.0 && entities.read().await.get_module_count() < MODULE_MAX {
- debug!("module spawn");
+ if module_timer > MODULE_SPAWN && entities.read().await.get_module_count() < MODULE_MAX {
module_timer = 0.;
let mut rigid_body_set = physics_data.rigid_body_set.clone();
@@ 93,17 92,37 @@ pub async fn timer_main(mgr: ClientManager, physics_data_orig: Arc<RwLock<Physic
let module = Module {
handle: module_handler,
module_type: ModuleType::Cargo,
+ lifetime: 0.0,
};
entities.write().await.entities.insert(get_entity_id(), Entity::Module(module));
}
- for module in entities.read().await.get_modules().iter() {
+ let mut entities = entities.write().await;
+ for mut module in entities.get_modules().iter_mut() {
let module_handle = module.handle;
let module_body = physics_data.rigid_body_set.get_mut(module_handle).unwrap();
module_body.reset_forces(true);
module_body.reset_torques(true);
- let planets = entities.read().await;
- let grav_force = planets.gravity((module_body.translation().x, module_body.translation().y), module_body.mass());
+ let grav_force = entities.gravity((module_body.translation().x, module_body.translation().y), module_body.mass());
module_body.apply_impulse(vector![grav_force.0, grav_force.1], true);
+ let id = entities.get_from_module(module).unwrap();
+ if let Entity::Module(p_module) = entities.entities.get_mut(&id).unwrap() {
+ p_module.lifetime += 5./1000.;
+ }
+ if module.lifetime > 80. {
+ let mut rigid_body_set = physics_data.rigid_body_set.clone();
+ let mut island_manager = physics_data.island_manager.clone();
+ let mut collider_set = physics_data.collider_set.clone();
+ let mut impulse_joint_set = physics_data.impulse_joint_set.clone();
+ let mut multibody_joint_set = physics_data.multibody_joint_set.clone();
+ rigid_body_set.remove(module.handle, &mut island_manager, &mut collider_set,
+ &mut impulse_joint_set, &mut multibody_joint_set, true);
+ physics_data.rigid_body_set = rigid_body_set;
+ physics_data.collider_set = collider_set;
+ physics_data.island_manager = island_manager;
+ physics_data.impulse_joint_set = impulse_joint_set;
+ physics_data.multibody_joint_set = multibody_joint_set;
+ entities.entities.remove(&id);
+ }
}
}