add radiation damage
This commit is contained in:
parent
56bab3f526
commit
b6b8e6a8d0
24
src/actor.rs
24
src/actor.rs
|
@ -71,7 +71,7 @@ pub enum DamageType {
|
|||
Asphyxiation,
|
||||
Depressurization,
|
||||
//Poison,
|
||||
//Radiation,
|
||||
Radiation,
|
||||
//Freeze,
|
||||
//Burn,
|
||||
}
|
||||
|
@ -175,6 +175,7 @@ pub struct OrbitsJupiter;
|
|||
#[derive(Component)]
|
||||
pub struct LifeForm {
|
||||
pub is_alive: bool,
|
||||
pub is_radioactively_damaged: bool,
|
||||
pub adrenaline: f32,
|
||||
pub adrenaline_baseline: f32,
|
||||
pub adrenaline_jolt: f32,
|
||||
|
@ -183,6 +184,7 @@ impl Default for LifeForm {
|
|||
fn default() -> Self {
|
||||
Self {
|
||||
is_alive: true,
|
||||
is_radioactively_damaged: false,
|
||||
adrenaline: 0.3,
|
||||
adrenaline_baseline: 0.3,
|
||||
adrenaline_jolt: 0.0,
|
||||
|
@ -339,10 +341,12 @@ pub fn update_power(
|
|||
|
||||
pub fn update_physics_lifeforms(
|
||||
time: Res<Time>,
|
||||
mut query: Query<(&mut LifeForm, &mut HitPoints, &mut Suit, &LinearVelocity)>,
|
||||
settings: Res<Settings>,
|
||||
id2pos: Res<game::Id2Pos>,
|
||||
mut query: Query<(&mut LifeForm, &mut HitPoints, &mut Suit, &LinearVelocity, &Position, Option<&Player>)>,
|
||||
) {
|
||||
let d = time.delta_seconds();
|
||||
for (mut lifeform, mut hp, mut suit, velocity) in query.iter_mut() {
|
||||
for (mut lifeform, mut hp, mut suit, velocity, pos, player) in query.iter_mut() {
|
||||
if lifeform.adrenaline_jolt.abs() > 1e-3 {
|
||||
lifeform.adrenaline_jolt *= 0.99;
|
||||
} else {
|
||||
|
@ -355,6 +359,20 @@ pub fn update_physics_lifeforms(
|
|||
lifeform.adrenaline =
|
||||
(lifeform.adrenaline - 0.0001 + lifeform.adrenaline_jolt * 0.01).clamp(0.0, 1.0);
|
||||
|
||||
if player.is_some() {
|
||||
lifeform.is_radioactively_damaged = if settings.reactor_state == 2 {
|
||||
true
|
||||
} else if let Some(pos_jupiter) = id2pos.0.get(cmd::ID_JUPITER) {
|
||||
pos_jupiter.distance(pos.0) < 140_000_000.0
|
||||
} else {
|
||||
false
|
||||
};
|
||||
if lifeform.is_radioactively_damaged {
|
||||
hp.damage += 0.3 * d;
|
||||
hp.damagetype = DamageType::Radiation;
|
||||
}
|
||||
}
|
||||
|
||||
let mut oxygen_drain = nature::OXY_S;
|
||||
let integr_threshold = 0.5;
|
||||
if suit.integrity < integr_threshold {
|
||||
|
|
|
@ -331,7 +331,14 @@ fn handle_player_death(
|
|||
duration: 1.0,
|
||||
});
|
||||
}
|
||||
_ => {
|
||||
actor::DamageType::Radiation => {
|
||||
settings.death_cause = "Acute radiation poisoning".to_string();
|
||||
ew_effect.send(visual::SpawnEffectEvent {
|
||||
class: visual::Effects::FadeIn(Color::BLACK),
|
||||
duration: 4.0,
|
||||
});
|
||||
}
|
||||
actor::DamageType::Unknown => {
|
||||
settings.death_cause = "Unknown".to_string();
|
||||
ew_effect.send(visual::SpawnEffectEvent {
|
||||
class: visual::Effects::FadeIn(css::MAROON.into()),
|
||||
|
|
15
src/hud.rs
15
src/hud.rs
|
@ -682,8 +682,7 @@ pub fn setup(
|
|||
fn update_dashboard(
|
||||
timer: ResMut<FPSUpdateTimer>,
|
||||
mut q_dashboard: Query<(&mut Visibility, &Dashboard)>,
|
||||
id2pos: Res<game::Id2Pos>,
|
||||
q_player: Query<(&actor::Suit, &actor::Battery, &Position), With<actor::Player>>,
|
||||
q_player: Query<(&actor::Suit, &actor::Battery, &actor::LifeForm), With<actor::Player>>,
|
||||
settings: Res<Settings>,
|
||||
) {
|
||||
if !settings.hud_active || !timer.0.just_finished() {
|
||||
|
@ -693,7 +692,7 @@ fn update_dashboard(
|
|||
if player.is_err() {
|
||||
return;
|
||||
}
|
||||
let (suit, battery, pos) = player.unwrap();
|
||||
let (suit, battery, lifeform) = player.unwrap();
|
||||
|
||||
for (mut vis, icon) in &mut q_dashboard {
|
||||
*vis = bool2vis(match icon {
|
||||
|
@ -702,15 +701,7 @@ fn update_dashboard(
|
|||
Dashboard::Battery => battery.overloaded_recovering,
|
||||
Dashboard::RotationStabiliser => !settings.rotation_stabilizer_active,
|
||||
Dashboard::CruiseControl => settings.cruise_control_active,
|
||||
Dashboard::Radioactivity => {
|
||||
if settings.reactor_state == 2 {
|
||||
true
|
||||
} else if let Some(pos_jupiter) = id2pos.0.get(cmd::ID_JUPITER) {
|
||||
pos_jupiter.distance(pos.0) < 140_000_000.0
|
||||
} else {
|
||||
false
|
||||
}
|
||||
}
|
||||
Dashboard::Radioactivity => lifeform.is_radioactively_damaged,
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue