mirror of
https://gitlab.com/veloren/veloren.git
synced 2024-08-30 18:12:32 +00:00
Merge branch 'blood_particle_fix' into 'master'
Fixed blood particles showing on projectile hit for bodies not supposed to bleed from gameplay perspective See merge request veloren/veloren!3290
This commit is contained in:
commit
a8601bc76e
@ -225,6 +225,13 @@ impl Body {
|
|||||||
|
|
||||||
pub fn is_campfire(&self) -> bool { matches!(self, Body::Object(object::Body::CampfireLit)) }
|
pub fn is_campfire(&self) -> bool { matches!(self, Body::Object(object::Body::CampfireLit)) }
|
||||||
|
|
||||||
|
pub fn bleeds(&self) -> bool {
|
||||||
|
!matches!(
|
||||||
|
self,
|
||||||
|
Body::Object(_) | Body::Ship(_) | Body::ItemDrop(_) | Body::Golem(_)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
/// Average density of the body
|
/// Average density of the body
|
||||||
// Units are based on kg/m³
|
// Units are based on kg/m³
|
||||||
pub fn density(&self) -> Density {
|
pub fn density(&self) -> Density {
|
||||||
|
@ -18,12 +18,13 @@ use common::{
|
|||||||
spiral::Spiral2d,
|
spiral::Spiral2d,
|
||||||
states::{self, utils::StageSection},
|
states::{self, utils::StageSection},
|
||||||
terrain::{Block, TerrainChunk, TerrainGrid},
|
terrain::{Block, TerrainChunk, TerrainGrid},
|
||||||
|
uid::UidAllocator,
|
||||||
vol::{ReadVol, RectRasterableVol, SizedVol},
|
vol::{ReadVol, RectRasterableVol, SizedVol},
|
||||||
};
|
};
|
||||||
use common_base::span;
|
use common_base::span;
|
||||||
use hashbrown::HashMap;
|
use hashbrown::HashMap;
|
||||||
use rand::prelude::*;
|
use rand::prelude::*;
|
||||||
use specs::{Join, WorldExt};
|
use specs::{saveload::MarkerAllocator, Join, WorldExt};
|
||||||
use std::{
|
use std::{
|
||||||
f32::consts::{PI, TAU},
|
f32::consts::{PI, TAU},
|
||||||
time::Duration,
|
time::Duration,
|
||||||
@ -218,10 +219,29 @@ impl ParticleMgr {
|
|||||||
},
|
},
|
||||||
Outcome::ProjectileHit { pos, target, .. } => {
|
Outcome::ProjectileHit { pos, target, .. } => {
|
||||||
if target.is_some() {
|
if target.is_some() {
|
||||||
self.particles.resize_with(self.particles.len() + 30, || {
|
let ecs = scene_data.state.ecs();
|
||||||
Particle::new(Duration::from_millis(250), time, ParticleMode::Blood, *pos)
|
if target
|
||||||
});
|
.and_then(|target| {
|
||||||
}
|
ecs.read_resource::<UidAllocator>()
|
||||||
|
.retrieve_entity_internal(target.0)
|
||||||
|
})
|
||||||
|
.and_then(|entity| {
|
||||||
|
ecs.read_storage::<Body>()
|
||||||
|
.get(entity)
|
||||||
|
.map(|body| body.bleeds())
|
||||||
|
})
|
||||||
|
.unwrap_or(false)
|
||||||
|
{
|
||||||
|
self.particles.resize_with(self.particles.len() + 30, || {
|
||||||
|
Particle::new(
|
||||||
|
Duration::from_millis(250),
|
||||||
|
time,
|
||||||
|
ParticleMode::Blood,
|
||||||
|
*pos,
|
||||||
|
)
|
||||||
|
})
|
||||||
|
};
|
||||||
|
};
|
||||||
},
|
},
|
||||||
Outcome::Block { pos, parry, .. } => {
|
Outcome::Block { pos, parry, .. } => {
|
||||||
if *parry {
|
if *parry {
|
||||||
|
Loading…
Reference in New Issue
Block a user