mirror of
https://gitlab.com/veloren/veloren.git
synced 2024-08-30 18:12:32 +00:00
Aura particles.
This commit is contained in:
parent
935aec743d
commit
d711c77468
@ -10,5 +10,5 @@ CastAura(
|
||||
category: Magical,
|
||||
),
|
||||
range: 25.0,
|
||||
energy_cost: 400,
|
||||
energy_cost: 00,
|
||||
)
|
@ -342,22 +342,22 @@ void main() {
|
||||
spin_in_axis(inst_dir, tick.z)
|
||||
);
|
||||
} else if (inst_mode == LIFESTEAL_BEAM) {
|
||||
f_reflect = 0.01;
|
||||
float green_col = 0.8 + 1.0 * sin(tick.x * 5 + lifetime * 5);
|
||||
float purple_col = 1.1 + 0.15 * sin(tick.x * 3 - lifetime * 3) - max(green_col, 1) + 1;
|
||||
f_reflect = 0.0;
|
||||
float green_col = 0.2 + 1.4 * sin(tick.x * 5 + lifetime * 5);
|
||||
float purple_col = 1.2 + 0.1 * sin(tick.x * 3 - lifetime * 3) - max(green_col, 1) + 1;
|
||||
attr = Attr(
|
||||
spiral_motion(inst_dir, 0.3 * (floor(2 * rand0 + 0.5) - 0.5) * min(linear_scale(10), 1), lifetime / inst_lifespan, 10.0, inst_time),
|
||||
vec3((1.7 - 0.7 * abs(floor(2 * rand0 - 0.5) + 0.5)) * (1.5 + 0.5 * sin(tick.x * 10 - lifetime * 4))),
|
||||
vec4(vec3(purple_col, green_col, purple_col), 1 /*0.3*/),
|
||||
vec4(vec3(purple_col, green_col, 0.75 * purple_col), 1),
|
||||
spin_in_axis(inst_dir, tick.z)
|
||||
);
|
||||
} else if (inst_mode == ENERGY_NATURE) {
|
||||
f_reflect = 0.0;
|
||||
float spiral_radius = start_end(1 - pow(abs(rand5), 5), 1) * length(inst_dir);
|
||||
attr = Attr(
|
||||
inst_dir * slow_end(0.03) + spiral_motion(vec3(rand1, rand2, rand3),
|
||||
0.2 * (rand4 + 1.3) * slow_end(0.02), percent() * 3 * (rand4 + 4.0) + rand0, 1.0, 0.0),
|
||||
vec3(1.0),
|
||||
vec4(vec3(0, 2.5, 1.5 + rand7 * 0.7), 1),
|
||||
spiral_motion(vec3(0, 0, rand3 + 1), spiral_radius, lifetime, abs(rand0), rand1 * 2 * PI) + vec3(0, 0, rand2),
|
||||
vec3(6 * abs(rand4) * (1 - slow_start(2)) * pow(spiral_radius / length(inst_dir), 0.5)),
|
||||
vec4(vec3(0, 1.7, 1.3), 1),
|
||||
spin_in_axis(vec3(rand6, rand7, rand8), rand9 * 3)
|
||||
);
|
||||
} else if (inst_mode == FLAMETHROWER) {
|
||||
|
@ -8,7 +8,10 @@ use crate::{
|
||||
};
|
||||
use common::{
|
||||
assets::{AssetExt, DotVoxAsset},
|
||||
comp::{beam, item::Reagent, object, BeamSegment, Body, CharacterState, Ori, Pos, Shockwave},
|
||||
comp::{
|
||||
self, aura, beam, buff, item::Reagent, object, BeamSegment, Body, CharacterState, Ori, Pos,
|
||||
Shockwave,
|
||||
},
|
||||
figure::Segment,
|
||||
outcome::Outcome,
|
||||
resources::DeltaTime,
|
||||
@ -179,6 +182,7 @@ impl ParticleMgr {
|
||||
self.maintain_beam_particles(scene_data, lights);
|
||||
self.maintain_block_particles(scene_data, terrain);
|
||||
self.maintain_shockwave_particles(scene_data);
|
||||
self.maintain_aura_particles(scene_data);
|
||||
} else {
|
||||
// remove all particle lifespans
|
||||
self.particles.clear();
|
||||
@ -468,6 +472,48 @@ impl ParticleMgr {
|
||||
}
|
||||
}
|
||||
|
||||
fn maintain_aura_particles(&mut self, scene_data: &SceneData) {
|
||||
let state = scene_data.state;
|
||||
let ecs = state.ecs();
|
||||
let time = state.get_time();
|
||||
|
||||
for (pos, auras) in (
|
||||
&ecs.read_storage::<Pos>(),
|
||||
&ecs.read_storage::<comp::Auras>(),
|
||||
)
|
||||
.join()
|
||||
{
|
||||
for (_, aura) in auras.auras.iter() {
|
||||
#[allow(clippy::single_match)]
|
||||
match aura.aura_kind {
|
||||
aura::AuraKind::Buff {
|
||||
kind: buff::BuffKind::ProtectingWard,
|
||||
..
|
||||
} => {
|
||||
let mut rng = thread_rng();
|
||||
let heartbeats = self.scheduler.heartbeats(Duration::from_millis(5));
|
||||
self.particles.resize_with(
|
||||
self.particles.len()
|
||||
+ aura.radius.powi(2) as usize * usize::from(heartbeats) / 300,
|
||||
|| {
|
||||
let rand_dist = aura.radius * (1.0 - rng.gen::<f32>().powi(100));
|
||||
let init_pos = Vec3::new(rand_dist, 0_f32, 0_f32);
|
||||
Particle::new_directed(
|
||||
aura.duration.unwrap_or_else(|| Duration::from_secs(1)),
|
||||
time,
|
||||
ParticleMode::EnergyNature,
|
||||
pos.0,
|
||||
pos.0 + init_pos,
|
||||
)
|
||||
},
|
||||
);
|
||||
},
|
||||
_ => {},
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[allow(clippy::same_item_push)] // TODO: Pending review in #587
|
||||
fn maintain_block_particles(
|
||||
&mut self,
|
||||
|
Loading…
Reference in New Issue
Block a user