mirror of
https://gitlab.com/veloren/veloren.git
synced 2024-08-30 18:12:32 +00:00
Even better fireballs
This commit is contained in:
parent
9d47fd8c3e
commit
fbb24e7c8a
@ -123,15 +123,15 @@ impl ToolData {
|
||||
CastFireball {
|
||||
projectile: Projectile {
|
||||
hit_ground: vec![
|
||||
projectile::Effect::Explode { power: 1.5 },
|
||||
projectile::Effect::Explode { power: 1.4 },
|
||||
projectile::Effect::Vanish,
|
||||
],
|
||||
hit_wall: vec![
|
||||
projectile::Effect::Explode { power: 1.5 },
|
||||
projectile::Effect::Explode { power: 1.4 },
|
||||
projectile::Effect::Vanish,
|
||||
],
|
||||
hit_entity: vec![
|
||||
projectile::Effect::Explode { power: 1.5 },
|
||||
projectile::Effect::Explode { power: 1.4 },
|
||||
projectile::Effect::Vanish,
|
||||
],
|
||||
time_left: Duration::from_secs(20),
|
||||
|
@ -47,7 +47,7 @@ impl CharacterBehavior for Data {
|
||||
dir: data.inputs.look_dir,
|
||||
body: self.projectile_body,
|
||||
light: Some(LightEmitter {
|
||||
col: (0.0, 1.0, 0.3).into(),
|
||||
col: (0.72, 0.11, 0.11).into(),
|
||||
..Default::default()
|
||||
}),
|
||||
projectile,
|
||||
|
@ -236,6 +236,7 @@ pub fn handle_explosion(server: &Server, pos: Vec3<f32>, power: f32, owner: Opti
|
||||
|
||||
// Color terrain
|
||||
let mut touched_blocks = Vec::new();
|
||||
let color_range = power * 2.7;
|
||||
for _ in 0..RAYS {
|
||||
let dir = Vec3::new(
|
||||
rand::random::<f32>() - 0.5,
|
||||
@ -246,7 +247,7 @@ pub fn handle_explosion(server: &Server, pos: Vec3<f32>, power: f32, owner: Opti
|
||||
|
||||
let _ = ecs
|
||||
.read_resource::<TerrainGrid>()
|
||||
.ray(pos, pos + dir * power * 2.5)
|
||||
.ray(pos, pos + dir * color_range)
|
||||
.until(|_| rand::random::<f32>() < 0.05)
|
||||
.for_each(|pos| touched_blocks.push(pos))
|
||||
.cast();
|
||||
@ -254,13 +255,18 @@ pub fn handle_explosion(server: &Server, pos: Vec3<f32>, power: f32, owner: Opti
|
||||
|
||||
let terrain = ecs.read_resource::<TerrainGrid>();
|
||||
let mut block_change = ecs.write_resource::<BlockChange>();
|
||||
for pos in touched_blocks {
|
||||
if let Ok(block) = terrain.get(pos) {
|
||||
for block_pos in touched_blocks {
|
||||
if let Ok(block) = terrain.get(block_pos) {
|
||||
let diff2 = block_pos.map(|b| b as f32).distance_squared(pos);
|
||||
let fade = (1.0 - diff2 / color_range.powi(2)).max(0.0);
|
||||
if let Some(mut color) = block.get_color() {
|
||||
color[0] /= 2;
|
||||
color[1] /= 3;
|
||||
color[2] /= 3;
|
||||
block_change.set(pos, Block::new(block.kind(), color));
|
||||
let r = color[0] as f32 + (fade * (color[0] as f32 * 0.5 - color[0] as f32));
|
||||
let g = color[1] as f32 + (fade * (color[1] as f32 * 0.3 - color[1] as f32));
|
||||
let b = color[2] as f32 + (fade * (color[2] as f32 * 0.3 - color[2] as f32));
|
||||
color[0] = r as u8;
|
||||
color[1] = g as u8;
|
||||
color[2] = b as u8;
|
||||
block_change.set(block_pos, Block::new(block.kind(), color));
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -270,7 +276,7 @@ pub fn handle_explosion(server: &Server, pos: Vec3<f32>, power: f32, owner: Opti
|
||||
let dir = Vec3::new(
|
||||
rand::random::<f32>() - 0.5,
|
||||
rand::random::<f32>() - 0.5,
|
||||
rand::random::<f32>() - 0.5,
|
||||
rand::random::<f32>() - 0.15,
|
||||
)
|
||||
.normalized();
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user