mirror of
https://gitlab.com/veloren/veloren.git
synced 2024-08-30 18:12:32 +00:00
fix divide by zero in state::apply_terrain_changes_internal
This commit is contained in:
parent
185ccea579
commit
3a61fb15b2
@ -119,7 +119,7 @@ pub enum Outcome {
|
|||||||
wielded: bool,
|
wielded: bool,
|
||||||
},
|
},
|
||||||
SpriteDelete {
|
SpriteDelete {
|
||||||
pos: Vec3<f32>,
|
pos: Vec3<i32>,
|
||||||
sprite: SpriteKind,
|
sprite: SpriteKind,
|
||||||
},
|
},
|
||||||
SpriteUnlocked {
|
SpriteUnlocked {
|
||||||
@ -171,7 +171,6 @@ impl Outcome {
|
|||||||
| Outcome::FireShockwave { pos }
|
| Outcome::FireShockwave { pos }
|
||||||
| Outcome::IceCrack { pos }
|
| Outcome::IceCrack { pos }
|
||||||
| Outcome::Utterance { pos, .. }
|
| Outcome::Utterance { pos, .. }
|
||||||
| Outcome::SpriteDelete { pos, .. }
|
|
||||||
| Outcome::CyclopsCharge { pos }
|
| Outcome::CyclopsCharge { pos }
|
||||||
| Outcome::FlamethrowerCharge { pos }
|
| Outcome::FlamethrowerCharge { pos }
|
||||||
| Outcome::LaserBeam { pos }
|
| Outcome::LaserBeam { pos }
|
||||||
@ -181,6 +180,7 @@ impl Outcome {
|
|||||||
| Outcome::Glider { pos, .. } => Some(*pos),
|
| Outcome::Glider { pos, .. } => Some(*pos),
|
||||||
Outcome::BreakBlock { pos, .. }
|
Outcome::BreakBlock { pos, .. }
|
||||||
| Outcome::SpriteUnlocked { pos }
|
| Outcome::SpriteUnlocked { pos }
|
||||||
|
| Outcome::SpriteDelete { pos, .. }
|
||||||
| Outcome::FailedSpriteUnlock { pos } => Some(pos.map(|e| e as f32 + 0.5)),
|
| Outcome::FailedSpriteUnlock { pos } => Some(pos.map(|e| e as f32 + 0.5)),
|
||||||
Outcome::ExpChange { .. }
|
Outcome::ExpChange { .. }
|
||||||
| Outcome::ComboChange { .. }
|
| Outcome::ComboChange { .. }
|
||||||
|
@ -574,16 +574,8 @@ impl State {
|
|||||||
let outcome = self.ecs.read_resource::<EventBus<Outcome>>();
|
let outcome = self.ecs.read_resource::<EventBus<Outcome>>();
|
||||||
while let Some(outcomes) = scheduled_changes.outcomes.poll(current_time) {
|
while let Some(outcomes) = scheduled_changes.outcomes.poll(current_time) {
|
||||||
for (pos, block) in outcomes.iter() {
|
for (pos, block) in outcomes.iter() {
|
||||||
let offset_dir = Vec3::<i32>::zero() - pos;
|
|
||||||
let offset = offset_dir
|
|
||||||
/ Vec3::new(offset_dir.x.abs(), offset_dir.y.abs(), offset_dir.z.abs());
|
|
||||||
let outcome_pos = Vec3::new(pos.x as f32, pos.y as f32, pos.z as f32)
|
|
||||||
- (Vec3::new(offset.x as f32, offset.y as f32, offset.z as f32) / 2.0);
|
|
||||||
if let Some(sprite) = block.get_sprite() {
|
if let Some(sprite) = block.get_sprite() {
|
||||||
outcome.emit_now(Outcome::SpriteDelete {
|
outcome.emit_now(Outcome::SpriteDelete { pos: *pos, sprite });
|
||||||
pos: outcome_pos,
|
|
||||||
sprite,
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -740,13 +740,14 @@ impl SfxMgr {
|
|||||||
Outcome::SpriteDelete { pos, sprite } => {
|
Outcome::SpriteDelete { pos, sprite } => {
|
||||||
match sprite {
|
match sprite {
|
||||||
SpriteKind::SeaUrchin => {
|
SpriteKind::SeaUrchin => {
|
||||||
|
let pos = pos.map(|e| e as f32 + 0.5);
|
||||||
let power = (0.6 - pos.distance(audio.listener.pos) / 5_000.0)
|
let power = (0.6 - pos.distance(audio.listener.pos) / 5_000.0)
|
||||||
.max(0.0)
|
.max(0.0)
|
||||||
.powi(7);
|
.powi(7);
|
||||||
let sfx_trigger_item = triggers.get_key_value(&SfxEvent::Explosion);
|
let sfx_trigger_item = triggers.get_key_value(&SfxEvent::Explosion);
|
||||||
audio.emit_sfx(
|
audio.emit_sfx(
|
||||||
sfx_trigger_item,
|
sfx_trigger_item,
|
||||||
*pos,
|
pos,
|
||||||
Some((power.abs() / 2.5).min(0.3)),
|
Some((power.abs() / 2.5).min(0.3)),
|
||||||
underwater,
|
underwater,
|
||||||
);
|
);
|
||||||
|
@ -79,13 +79,14 @@ impl ParticleMgr {
|
|||||||
},
|
},
|
||||||
Outcome::SpriteDelete { pos, sprite } => match sprite {
|
Outcome::SpriteDelete { pos, sprite } => match sprite {
|
||||||
SpriteKind::SeaUrchin => {
|
SpriteKind::SeaUrchin => {
|
||||||
|
let pos = pos.map(|e| e as f32 + 0.5);
|
||||||
self.particles.resize_with(self.particles.len() + 10, || {
|
self.particles.resize_with(self.particles.len() + 10, || {
|
||||||
Particle::new_directed(
|
Particle::new_directed(
|
||||||
Duration::from_secs_f32(rng.gen_range(0.1..0.5)),
|
Duration::from_secs_f32(rng.gen_range(0.1..0.5)),
|
||||||
time,
|
time,
|
||||||
ParticleMode::Steam,
|
ParticleMode::Steam,
|
||||||
*pos + Vec3::new(0.0, 0.0, rng.gen_range(0.0..1.5)),
|
pos + Vec3::new(0.0, 0.0, rng.gen_range(0.0..1.5)),
|
||||||
*pos,
|
pos,
|
||||||
)
|
)
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
Loading…
Reference in New Issue
Block a user