~starkingdoms/starkingdoms

1158be88d364f10e4348e66817906c2eeab7182e — ghostlyzsh 1 year, 8 months ago 0b02e9a
detaching and breaking off energy working
2 files changed, 38 insertions(+), 15 deletions(-)

M server/src/main.rs
M starkingdoms-client/src/pages/Play.svelte
M server/src/main.rs => server/src/main.rs +29 -13
@@ 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(),
        });
    }
}


M starkingdoms-client/src/pages/Play.svelte => starkingdoms-client/src/pages/Play.svelte +9 -2
@@ 157,8 157,15 @@
        </tr>
        <tr>
          <td class="hud-d"><strong>Energy:</strong></td>
          <td colspan="2" id="energy-bg" style="height:100%;width:100%;padding:0;box-sizing:border-box;border: 0.125em solid rgb(var(--text));border-radius: 0.5em;overflow:hidden;">
            <div id="energy" style="height:22px;background-color:#Af8f4f;" bind:this={energy}></div>
          <td
            colspan="2"
            id="energy-bg"
            style="height:100%;width:100%;padding:0;box-sizing:border-box;border: 0.125em solid rgb(var(--text));border-radius: 0.5em;overflow:hidden;">
            <div
              id="energy"
              style="height:22px;background-color:#Af8f4f;"
              bind:this={energy}>
            </div>
          </td>
        </tr>
      </tbody>