~starkingdoms/starkingdoms

dacb89641c32bd0452be3671611633b71f7750e0 — ghostlyzsh 1 year, 8 months ago e3a9258
no more memory leak, some fixes to bring back to old stk but not all
3 files changed, 29 insertions(+), 16 deletions(-)

M server/Cargo.toml
M server/src/component.rs
M server/src/main.rs
M server/Cargo.toml => server/Cargo.toml +3 -3
@@ 5,10 5,10 @@ edition = "2021"
license = "AGPL-3"

[dependencies]
bevy = { version = "0.12", default-features = false }
bevy = { version = "0.13.1", default-features = false }
serde = { version = "1", features = ["derive"] }
serde_json = "1"
bevy_rapier2d = "0.23.0"
bevy_rapier2d = "0.25.0"
rand = "0.8.5"
tracing-subscriber = "0.3"
starkingdoms-common = { version = "0.1", path = "../starkingdoms-common" }


@@ 22,4 22,4 @@ tungstenite = "0.21"

[features]
default = []
profiling = ["bevy/trace_tracy"]
\ No newline at end of file
profiling = ["bevy/trace_tracy"]

M server/src/component.rs => server/src/component.rs +1 -1
@@ 121,7 121,7 @@ pub struct PlayerBundle {
pub struct ModuleTimer(pub Timer);
impl ModuleTimer {
    pub fn new() -> Self {
        Self(Timer::from_seconds(3.0, TimerMode::Repeating))
        Self(Timer::from_seconds(0.3, TimerMode::Repeating))
    }
}
impl Default for ModuleTimer {

M server/src/main.rs => server/src/main.rs +25 -12
@@ 20,6 20,7 @@
static GLOBAL: tikv_jemallocator::Jemalloc = tikv_jemallocator::Jemalloc;

use std::net::IpAddr;
use std::num::NonZeroUsize;

use crate::mathutil::rot2d;
use crate::ws::{StkTungsteniteServerConfig, StkTungsteniteServerPlugin, WsEvent};


@@ 89,6 90,7 @@ impl PluginGroup for StkPluginGroup {
            .add(bevy::log::LogPlugin {
                level: bevy::log::Level::DEBUG,
                filter: "wgpu=error,bevy_render=info,bevy_ecs=trace".to_string(),
                update_subscriber: None,
            })
    }
}


@@ 153,7 155,7 @@ fn main() {
        )
        .add_systems(FixedUpdate, save_eligibility)
        .add_systems(FixedUpdate, convert_modules)
        //.insert_resource(Time::<Fixed>::from_seconds(1.0/1.0))
        .insert_resource(Time::<Fixed>::from_seconds(1.0/1.0))
        .run();

    info!("Goodbye!");


@@ 163,7 165,7 @@ fn setup_integration_parameters(mut context: ResMut<RapierContext>) {
    context.integration_parameters.dt = 1.0 / 60.0;
    context.integration_parameters.joint_erp = 0.2;
    context.integration_parameters.erp = 0.5;
    context.integration_parameters.max_stabilization_iterations = 16;
    //context.integration_parameters.num_solver_iterations = NonZeroUsize::new(16).unwrap();
}
fn spawn_planets(mut commands: Commands) {
    info!("Spawning planets");


@@ 224,21 226,20 @@ fn module_spawn(
    mut packet_send: EventWriter<WsEvent>,
) {
    if module_timer.0.tick(time.delta()).just_finished() {
        let angle: f32 = {
            let mut rng = rand::thread_rng();
            rng.gen::<f32>() * std::f32::consts::PI * 2.
        };
        let mut transform = Transform::from_xyz(angle.cos() * 30.0, angle.sin() * 30.0, 0.0);
        transform.rotate_z(angle);
        if part_query.iter().count() < FREE_MODULE_CAP {
            let angle: f32 = {
                let mut rng = rand::thread_rng();
                rng.gen::<f32>() * std::f32::consts::PI * 2.
            };
            let mut transform = Transform::from_xyz(angle.cos() * 30.0, angle.sin() * 30.0, 0.0);
            transform.rotate_z(angle);
            let flags = PartFlags { attached: false };
            let mut entity = commands.spawn(PartBundle {
                part_type: PartType::Cargo,
                transform: TransformBundle::from(transform),
                flags,
            });
            entity
                .insert(RigidBody::Dynamic)
            entity.insert(RigidBody::Dynamic)
                .with_children(|children| {
                    children
                        .spawn(Collider::cuboid(0.375, 0.46875))


@@ 1301,7 1302,7 @@ fn convert_modules(
) {
    for (_planet_entity, planet_type, children) in &planet_query {
        for (entity1, entity2, intersecting) in
            rapier_context.intersections_with(*children.first().unwrap())
            rapier_context.intersection_pairs_with(*children.first().unwrap())
        {
            if intersecting {
                let other = if *children.first().unwrap() == entity1 {


@@ 1573,7 1574,7 @@ fn save_eligibility(
) {
    for (_planet_entity, _planet_type, children) in &planet_query {
        for (entity1, entity2, intersecting) in
            rapier_context.intersections_with(*children.first().unwrap())
            rapier_context.intersection_pairs_with(*children.first().unwrap())
        {
            if intersecting {
                let other = if *children.first().unwrap() == entity1 {


@@ 1717,7 1718,12 @@ fn on_position_change(
        packet_send.send(WsEvent::Broadcast {
            message: packet.into(),
        });

    }
    /*let packet = Packet::SaveEligibility { eligible: true };
    for _ in 0..10000 {
        packet_send.send(WsEvent::Broadcast { message: packet.clone().into() });
    }*/

    let mut planets = Vec::new();
    for (entity, planet_type, transform) in planet_query.iter() {


@@ 1981,6 1987,13 @@ fn gravity_update(
            let distance = planet_translate.distance(part_translate);
            let force = GRAVITY * ((part_mass * planet_mass) / (distance * distance));
            let direction = (planet_translate - part_translate).normalize() * force;
            /*let gravity_force = ExternalForce::at_point(
                direction.xy(),
                part_transform.translation.xy(),
                part_transform.translation.xy(),
            );
            forces.force += gravity_force.force;
            forces.torque += gravity_force.torque;*/
            impulses.impulse += direction.xy();
        }
    }