atmosphere: implement implosion
This commit is contained in:
parent
707275e5ef
commit
12c7f537c5
11
src/actor.rs
11
src/actor.rs
|
@ -102,6 +102,7 @@ pub enum DamageType {
|
|||
Radiation,
|
||||
//Freeze,
|
||||
//Burn,
|
||||
Implosion,
|
||||
}
|
||||
|
||||
#[derive(Event)]
|
||||
|
@ -1130,14 +1131,14 @@ fn handle_atmosphere(
|
|||
mut settings: ResMut<Settings>,
|
||||
q_atmosphere: Query<(&Position, Option<&LinearVelocity>, &HasAtmosphere)>,
|
||||
mut q_actor: Query<
|
||||
(&Position, &mut LinearVelocity, Option<&PlayerCamera>),
|
||||
(&Position, &mut LinearVelocity, Option<&mut HitPoints>, Option<&PlayerCamera>),
|
||||
(With<ExperiencesAtmosphere>, Without<HasAtmosphere>),
|
||||
>,
|
||||
) {
|
||||
let dt = time.delta_seconds() as f64;
|
||||
let mut reset_player_gauges = true;
|
||||
|
||||
for (pos, mut v, player) in &mut q_actor {
|
||||
for (pos, mut v, mut hp, player) in &mut q_actor {
|
||||
for (atmo_pos, atmo_v, atmo) in &q_atmosphere {
|
||||
let distance = atmo_pos.distance(pos.0);
|
||||
if distance < atmo.r_outer {
|
||||
|
@ -1157,6 +1158,12 @@ fn handle_atmosphere(
|
|||
v.0 -= friction;
|
||||
|
||||
let pressure = nature::jupiter_altitude_to_pressure(distance);
|
||||
if let Some(ref mut hp) = hp {
|
||||
if pressure > 1000.0 {
|
||||
hp.damage += f32::INFINITY; // better luck next time
|
||||
hp.damagetype = DamageType::Implosion;
|
||||
}
|
||||
}
|
||||
|
||||
if player.is_some() {
|
||||
settings.atmo_pressure = Some(pressure);
|
||||
|
|
|
@ -409,6 +409,13 @@ fn handle_player_death(
|
|||
duration: 4.0,
|
||||
});
|
||||
}
|
||||
actor::DamageType::Implosion => {
|
||||
settings.death_cause = "Implosion".to_string();
|
||||
ew_effect.send(visual::SpawnEffectEvent {
|
||||
class: visual::Effects::FadeIn(css::MAROON.into()),
|
||||
duration: 0.1,
|
||||
});
|
||||
}
|
||||
actor::DamageType::Unknown => {
|
||||
settings.death_cause = "Unknown".to_string();
|
||||
ew_effect.send(visual::SpawnEffectEvent {
|
||||
|
|
Loading…
Reference in a new issue