~starkingdoms/starkingdoms

6516d7c756f9f5aaeaaae2e871a7e53c65174cc3 — ghostly_zsh 16 days ago 8d0982f
fix: orbit indicator is continuous
M crates/unified/src/client/mod.rs => crates/unified/src/client/mod.rs +2 -1
@@ 7,7 7,7 @@ use crate::client::ui::ui_plugin;
use crate::client::zoom::zoom_plugin;
use crate::client::starguide::init::starguide_init_plugin;
use crate::client::starguide::input::starguide_input_plugin;
use crate::ecs::{Hi, Part, Player};
use crate::ecs::{Hi, Part, Player, StarguideGizmos};
use aeronet_websocket::client::WebSocketClient;
use bevy::dev_tools::picking_debug::DebugPickingMode;
use crate::prelude::*;


@@ 46,6 46,7 @@ impl Plugin for ClientPlugin {
                    .spawn(Name::new("default-session"))
                    .queue(WebSocketClient::connect(config, server.clone()));
            })
            .init_gizmo_group::<StarguideGizmos>()
            .add_plugins(rendering::render_plugin)
            .add_plugins(input::input_plugin)
            .add_plugins(ship::thrusters::client_thrusters_plugin)

M crates/unified/src/client/rendering/mod.rs => crates/unified/src/client/rendering/mod.rs +4 -4
@@ 2,7 2,7 @@ use bevy::anti_alias::fxaa::Fxaa;
use bevy::app::{App, Startup};
use bevy::core_pipeline::tonemapping::DebandDither;
use bevy::post_process::bloom::Bloom;
use crate::ecs::{GameplayState, MAIN_LAYER, MAIN_STAR_LAYERS, MainCamera, Me, StarguideCamera};
use crate::ecs::{GameplayState, MAIN_LAYER, MAIN_STAR_LAYERS, MainCamera, Me, STARGUIDE_LAYER, StarguideCamera, StarguideGizmos};
use crate::prelude::*;

pub fn render_plugin(app: &mut App) {


@@ 24,9 24,9 @@ pub fn setup_graphics(mut config_store: ResMut<GizmoConfigStore>, mut commands: 
        .insert(DebandDither::Enabled)
        .insert(Fxaa::default())
        .insert(MainCamera);
    for (_, config, _) in config_store.iter_mut() {
        config.render_layers = MAIN_STAR_LAYERS.clone();
    }
    let (gizmo_config, _) = config_store.config_mut::<StarguideGizmos>();
    gizmo_config.render_layers = STARGUIDE_LAYER;
    gizmo_config.depth_bias = 1.0;
}

fn follow_camera(

M crates/unified/src/client/starguide/orbit.rs => crates/unified/src/client/starguide/orbit.rs +13 -6
@@ 2,7 2,7 @@ use std::{f32::consts::PI, ops::Range};

use bevy::window::WindowResized;

use crate::{config::planet::Planet, ecs::{Me, StarguideCamera, StarguideOrbit, StarguideOrbitImage}, prelude::*, world_config::WorldConfigResource};
use crate::{config::planet::Planet, ecs::{Me, StarguideCamera, StarguideGizmos, StarguideOrbit, StarguideOrbitImage}, prelude::*, world_config::WorldConfigResource};
use bevy::render::render_resource::Extent3d;

pub fn starguide_orbit_plugin(app: &mut App) {


@@ 16,7 16,7 @@ fn update_orbits(
    camera: Single<(&Camera, &GlobalTransform, &Projection), With<StarguideCamera>>,
    me: Single<(&Transform, &LinearVelocity), (With<Me>, Without<StarguideCamera>)>,
    //orbit: Single<&Transform, (With<StarguideOrbit>, Without<Me>, Without<StarguideCamera>)>,
    mut gizmos: Gizmos,
    mut gizmos: Gizmos<StarguideGizmos>,
    world_config: Res<WorldConfigResource>,
    planets: Query<(&Mass, &Planet, &Transform)>,
) {


@@ 61,11 61,14 @@ fn update_orbits(
    let f_y = -2.0*a*e_y;

    // 200 steps in the revolution
    let mut last_pos = Vec2::ZERO;
    let mut first_pos = None;
    let mut last_pos = None;
    for i in 0..200 {
        let theta = 2.0*PI*(i as f32)/200.0;
        let r = (1.0/2.0) * ((f_x*f_x + f_y*f_y - 4.0*a*a) / (-2.0*a - f_x*theta.cos() - f_y*theta.sin()));

        if r < 0.0 { continue }

        // convert r to image coords
        let pos = Vec2::new(r*theta.cos(), r*theta.sin()) + p_transform.translation.truncate();
        /*let pos = pos + p_transform.translation.truncate() - orbit.translation.truncate();


@@ 74,10 77,14 @@ fn update_orbits(
        let pos = pos + image.size_f32()/2.0;*/

        //if !(pos.x as u32 >= image.size().x || pos.y as u32 >= image.size().y) && i != 0 {
        if i != 0 {
            gizmos.line_2d(last_pos, pos, Color::linear_rgb(1.0, 0.0, 0.0));
        if last_pos.is_some() {
            gizmos.line_2d(last_pos.unwrap(), pos, Color::linear_rgb(1.0, 0.0, 0.0));
        }
        last_pos = pos;
        if first_pos.is_none() { first_pos = Some(pos) }
        last_pos = Some(pos);
    }
    if first_pos.is_some() && last_pos.is_some() {
        gizmos.line_2d(first_pos.unwrap(), last_pos.unwrap(), Color::linear_rgb(1.0, 0.0, 0.0));
    }
}


M crates/unified/src/ecs.rs => crates/unified/src/ecs.rs +3 -0
@@ 29,6 29,9 @@ pub struct StarguideCamera;
#[derive(Component)]
pub struct OrbitCamera;

#[derive(Default, Reflect, GizmoConfigGroup)]
pub struct StarguideGizmos;

#[derive(Component)]
pub struct StarfieldFront;
#[derive(Component)]