1
1
use bevy:: { prelude:: { App , Entity , Gizmos , in_state, IntoSystemConfigs , Plugin , PreUpdate , Query , Res , Resource , Transform , Vec3 , With , Without , Camera } , time:: Time } ;
2
2
3
- use crate :: { body:: { BodyChildren , Moon , OrbitSettings , Planet , SimPosition , Star , Diameter , BillboardVisible } , constants:: M_TO_UNIT , physics:: { apply_physics, Pause , SubSteps } , SimState , speed:: Speed , selection:: SelectedEntity , ui:: UiState } ;
3
+ use crate :: { body:: { BodyChildren , Moon , OrbitSettings , Planet , SimPosition , Star , Diameter , BillboardVisible } , constants:: M_TO_UNIT , physics:: { apply_physics, Pause , SubSteps } , SimState , speed:: Speed , selection:: SelectedEntity , ui:: UiState , camera :: PanOrbitCamera } ;
4
4
5
5
pub struct OrbitLinePlugin ;
6
6
@@ -32,12 +32,13 @@ impl Default for OrbitOffset {
32
32
}
33
33
34
34
const MULTIPLIER : f32 = 0.0001 ;
35
- const HIDE_MULTIPLIER : f32 = 10000.0 ;
35
+ const PLANET_HIDE_MULTIPLIER : f32 = 10000.0 ;
36
+ const HIDE_MULTIPLIER : f32 = 100.0 ;
36
37
37
38
fn update_lines (
38
- mut planet_query : Query < ( Entity , & mut OrbitSettings , & SimPosition , & BodyChildren , & Transform , & Diameter , & BillboardVisible ) , ( With < Planet > , Without < Moon > , Without < Star > ) > ,
39
- mut moon_query : Query < ( Entity , & SimPosition , & mut OrbitSettings , & Transform , & Diameter , & BillboardVisible ) , ( With < Moon > , Without < Planet > , Without < Star > ) > ,
40
- camera : Query < & Transform , With < Camera > > ,
39
+ mut planet_query : Query < ( Entity , & mut OrbitSettings , & SimPosition , & BodyChildren , & Diameter , & BillboardVisible ) , ( With < Planet > , Without < Moon > , Without < Star > ) > ,
40
+ mut moon_query : Query < ( Entity , & SimPosition , & mut OrbitSettings , & Diameter , & BillboardVisible ) , ( With < Moon > , Without < Planet > , Without < Star > ) > ,
41
+ camera : Query < & PanOrbitCamera , With < Camera > > ,
41
42
time : Res < Time > ,
42
43
speed : Res < Speed > ,
43
44
substeps : Res < SubSteps > ,
@@ -49,10 +50,9 @@ fn update_lines(
49
50
return ;
50
51
}
51
52
let cam = camera. single ( ) ;
52
- for ( entity, mut orbit, pos, _, transform , diameter, billboard_visible) in & mut planet_query {
53
+ for ( entity, mut orbit, pos, _, diameter, billboard_visible) in & mut planet_query {
53
54
if orbit. draw_lines {
54
- let distance_to_cam = transform. translation . distance ( cam. translation ) ;
55
- orbit. hide_lines = ( distance_to_cam < diameter. num * HIDE_MULTIPLIER && entity == selected_entity. entity . unwrap ( ) || !billboard_visible. 0 ) && ui_state. dyn_hide_orbit_lines ;
55
+ orbit. hide_lines = ( cam. radius < diameter. num * PLANET_HIDE_MULTIPLIER && entity == selected_entity. entity . unwrap ( ) || !billboard_visible. 0 ) && ui_state. dyn_hide_orbit_lines ;
56
56
let speed = speed. 0 as f32 * ( substeps. 0 as f32 ) ;
57
57
let max_step = ( orbit. period as f32 / speed) * MULTIPLIER ;
58
58
if orbit. step >= max_step {
@@ -64,13 +64,12 @@ fn update_lines(
64
64
}
65
65
}
66
66
}
67
- for ( entity, pos, mut orbit, transform , diameter, billboard_visible) in & mut moon_query {
67
+ for ( entity, pos, mut orbit, diameter, billboard_visible) in & mut moon_query {
68
68
if orbit. draw_lines {
69
- if let Some ( ( _, _, p_pos, _, _, _, _ ) ) = planet_query. iter ( ) . find ( |( _, _, _, children, _ , _, _) | {
69
+ if let Some ( ( _, _, p_pos, _, _, _) ) = planet_query. iter ( ) . find ( |( _, _, _, children, _, _) | {
70
70
children. 0 . contains ( & entity)
71
71
} ) {
72
- let distance_to_cam = transform. translation . distance ( cam. translation ) ;
73
- orbit. hide_lines = ( distance_to_cam < diameter. num * HIDE_MULTIPLIER && entity == selected_entity. entity . unwrap ( ) || !billboard_visible. 0 ) && ui_state. dyn_hide_orbit_lines ;
72
+ orbit. hide_lines = ( cam. radius < diameter. num * HIDE_MULTIPLIER && entity == selected_entity. entity . unwrap ( ) || !billboard_visible. 0 ) && ui_state. dyn_hide_orbit_lines ;
74
73
let speed = speed. 0 as f32 * ( substeps. 0 as f32 ) ;
75
74
let max_step = ( orbit. period as f32 / speed) * MULTIPLIER ;
76
75
if orbit. step >= max_step {
0 commit comments