@@ 35,7 35,10 @@ use component::*;
use hmac::{Hmac, Mac};
use jwt::VerifyWithKey;
use packet::*;
-use part::{HEARTY_CAPACITY, HEARTY_THRUST_ENERGY, LANDING_THRUSTER_CAPACITY, LANDING_THRUSTER_ENERGY, LANDING_THRUSTER_FORCE};
+use part::{
+ HEARTY_CAPACITY, HEARTY_THRUST_ENERGY, LANDING_THRUSTER_CAPACITY, LANDING_THRUSTER_ENERGY,
+ LANDING_THRUSTER_FORCE,
+};
use rand::Rng;
use serde::{Deserialize, Serialize};
use sha2::Sha256;
@@ 49,8 52,8 @@ pub mod component;
pub mod macros;
pub mod mathutil;
pub mod packet;
-pub mod ws;
pub mod part;
+pub mod ws;
const CLIENT_SCALE: f32 = 50.0;
@@ 641,7 644,7 @@ fn on_message(
if attached_query.contains(select) {
let module = attached_query.get(select).unwrap();
let attach = module.3.clone();
- detach_recursive(
+ let lost_energy_capacity = detach_recursive(
&mut commands,
module.0,
&mut attached_query,
@@ 655,6 658,9 @@ fn on_message(
attached_query.get_mut(sub_entity).unwrap();
suspension.2.translation = vec3(x, y, 0.);
}
+ let mut player = player_query.get_mut(entity).unwrap().1;
+ player.energy_capacity -= lost_energy_capacity;
+ player.energy = std::cmp::min(player.energy, player.energy_capacity);
break;
}
if attach_on_module_tree(
@@ 1038,14 1044,15 @@ fn detach_recursive(
),
Without<PlanetType>,
>,
-) {
+) -> u32 {
+ let mut energy = 0;
let f_attach = if attached_query.contains(this) {
attached_query.get(this).unwrap().3.clone()
} else {
player_query.get(this).unwrap().4.clone()
};
for child in f_attach.children.iter().flatten() {
- detach_recursive(commands, *child, attached_query, player_query);
+ energy += detach_recursive(commands, *child, attached_query, player_query);
}
let (entity, part_type, attach, mut flags) = if attached_query.contains(this) {
let (entity, part_type, _, attach, _, _, _, flags) = attached_query.get_mut(this).unwrap();
@@ 1054,6 1061,7 @@ fn detach_recursive(
let (entity, _, _, _, attach, part_flags) = player_query.get_mut(this).unwrap();
(entity, &PartType::Hearty, attach, part_flags)
};
+ energy += capacity!(*part_type);
commands.entity(entity).remove::<Attach>();
flags.attached = false;
if *part_type == PartType::LandingThrusterSuspension {
@@ 1086,6 1094,7 @@ fn detach_recursive(
}
}
}
+ energy
}
fn attach_on_module_tree(
@@ 1571,13 1580,17 @@ fn break_modules(
detach_list.push((entity, *part_type, attach.clone()));
}
}
- for (entity, _part_type, _attach) in detach_list {
- detach_recursive(
+ for (entity, _part_type, attach) in detach_list {
+ let lost_energy_capacity = detach_recursive(
&mut commands,
entity,
&mut attached_query,
&mut player_query,
);
+ let id = attach.associated_player.unwrap();
+ let mut player = player_query.get_mut(id).unwrap().1;
+ player.energy_capacity -= lost_energy_capacity;
+ player.energy = std::cmp::min(player.energy, player.energy_capacity);
}
}
@@ 1703,14 1716,17 @@ fn despawn_module_tree(
}
}
-fn send_player_energy(
- player_query: Query<&Player>,
- mut packet_send: EventWriter<WsEvent>,
-) {
+fn send_player_energy(player_query: Query<&Player>, mut packet_send: EventWriter<WsEvent>) {
for player in &player_query {
- let packet = Packet::EnergyUpdate { amount: player.energy, max: player.energy_capacity };
+ let packet = Packet::EnergyUpdate {
+ amount: player.energy,
+ max: player.energy_capacity,
+ };
- packet_send.send(WsEvent::Send { to: player.addr, message: packet.into() });
+ packet_send.send(WsEvent::Send {
+ to: player.addr,
+ message: packet.into(),
+ });
}
}