-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathrwr.rs
65 lines (55 loc) · 2.29 KB
/
rwr.rs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
use bevy::{prelude::*, sprite::MaterialMesh2dBundle, render::view::RenderLayers};
use crate::{definitions::{COLOR_ORANGE_RED, COLOR_YELLOW, RADAR_PULSE_TIMEOUT, RENDERLAYER_COCKPIT}, player::Player, radar::RadarDetectable, util::get_time_millis};
#[derive(Component)]
pub struct RwrRcsBar;
#[derive(Component)]
pub struct RwrReturnEnergyBar;
pub fn setup_rwr(
mut commands: Commands,
mut meshes: ResMut<Assets<Mesh>>,
mut materials: ResMut<Assets<ColorMaterial>>,
) {
let rcr_bar = Rectangle::new(600.0, 20.);
commands.spawn(MaterialMesh2dBundle {
mesh: meshes.add(rcr_bar).into(),
material: materials.add(ColorMaterial::from(COLOR_ORANGE_RED)),
transform: Transform::from_translation(Vec3::new(0., -500., 0.)),
..default()
}
)
.insert(RwrRcsBar)
.insert(RenderLayers::layer(RENDERLAYER_COCKPIT));
let return_energy_bar = Rectangle::new(600.0, 20.);
commands.spawn(MaterialMesh2dBundle {
mesh: meshes.add(return_energy_bar).into(),
material: materials.add(ColorMaterial::from(COLOR_YELLOW)),
transform: Transform::from_translation(Vec3::new(0., -500., 0.)),
..default()
}
)
.insert(RwrReturnEnergyBar)
.insert(RenderLayers::layer(RENDERLAYER_COCKPIT));
}
pub fn update_rwr(
mut detectables: Query<&mut RadarDetectable, With<Player>>,
mut rwr_rcs_bars: Query<&mut Transform, (With<RwrRcsBar>, Without<RwrReturnEnergyBar>)>,
mut rwr_return_energy_bars: Query<&mut Transform, (With<RwrReturnEnergyBar>, Without<RwrRcsBar>)>,
) {
for mut transform in rwr_rcs_bars.iter_mut() {
for detectable in detectables.iter() {
transform.scale.x = detectable.radar_cross_section;
transform.translation.x = 200. - detectable.radar_cross_section * 300.;
}
}
for mut transform in rwr_return_energy_bars.iter_mut() {
for mut detectable in detectables.iter_mut() {
let milliseconds = get_time_millis();
if (milliseconds - detectable.last_impulse_time) > RADAR_PULSE_TIMEOUT {
detectable.reflected_energy = 0.;
}
let energy = detectable.reflected_energy.clamp(0.0, 1.0);
transform.scale.x = energy;
transform.translation.x = energy * 300. - 200.;
}
}
}