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
fa4a3f3323
commit
7ec211ddab
@ -123,15 +123,15 @@ impl ToolData {
|
|||||||
CastFireball {
|
CastFireball {
|
||||||
projectile: Projectile {
|
projectile: Projectile {
|
||||||
hit_ground: vec![
|
hit_ground: vec![
|
||||||
projectile::Effect::Explode { power: 1.5 },
|
projectile::Effect::Explode { power: 1.4 },
|
||||||
projectile::Effect::Vanish,
|
projectile::Effect::Vanish,
|
||||||
],
|
],
|
||||||
hit_wall: vec![
|
hit_wall: vec![
|
||||||
projectile::Effect::Explode { power: 1.5 },
|
projectile::Effect::Explode { power: 1.4 },
|
||||||
projectile::Effect::Vanish,
|
projectile::Effect::Vanish,
|
||||||
],
|
],
|
||||||
hit_entity: vec![
|
hit_entity: vec![
|
||||||
projectile::Effect::Explode { power: 1.5 },
|
projectile::Effect::Explode { power: 1.4 },
|
||||||
projectile::Effect::Vanish,
|
projectile::Effect::Vanish,
|
||||||
],
|
],
|
||||||
time_left: Duration::from_secs(20),
|
time_left: Duration::from_secs(20),
|
||||||
|
@ -47,7 +47,7 @@ impl CharacterBehavior for Data {
|
|||||||
dir: data.inputs.look_dir,
|
dir: data.inputs.look_dir,
|
||||||
body: self.projectile_body,
|
body: self.projectile_body,
|
||||||
light: Some(LightEmitter {
|
light: Some(LightEmitter {
|
||||||
col: (0.0, 1.0, 0.3).into(),
|
col: (0.72, 0.11, 0.11).into(),
|
||||||
..Default::default()
|
..Default::default()
|
||||||
}),
|
}),
|
||||||
projectile,
|
projectile,
|
||||||
|
@ -236,6 +236,7 @@ pub fn handle_explosion(server: &Server, pos: Vec3<f32>, power: f32, owner: Opti
|
|||||||
|
|
||||||
// Color terrain
|
// Color terrain
|
||||||
let mut touched_blocks = Vec::new();
|
let mut touched_blocks = Vec::new();
|
||||||
|
let color_range = power * 2.7;
|
||||||
for _ in 0..RAYS {
|
for _ in 0..RAYS {
|
||||||
let dir = Vec3::new(
|
let dir = Vec3::new(
|
||||||
rand::random::<f32>() - 0.5,
|
rand::random::<f32>() - 0.5,
|
||||||
@ -246,7 +247,7 @@ pub fn handle_explosion(server: &Server, pos: Vec3<f32>, power: f32, owner: Opti
|
|||||||
|
|
||||||
let _ = ecs
|
let _ = ecs
|
||||||
.read_resource::<TerrainGrid>()
|
.read_resource::<TerrainGrid>()
|
||||||
.ray(pos, pos + dir * power * 2.5)
|
.ray(pos, pos + dir * color_range)
|
||||||
.until(|_| rand::random::<f32>() < 0.05)
|
.until(|_| rand::random::<f32>() < 0.05)
|
||||||
.for_each(|pos| touched_blocks.push(pos))
|
.for_each(|pos| touched_blocks.push(pos))
|
||||||
.cast();
|
.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 terrain = ecs.read_resource::<TerrainGrid>();
|
||||||
let mut block_change = ecs.write_resource::<BlockChange>();
|
let mut block_change = ecs.write_resource::<BlockChange>();
|
||||||
for pos in touched_blocks {
|
for block_pos in touched_blocks {
|
||||||
if let Ok(block) = terrain.get(pos) {
|
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() {
|
if let Some(mut color) = block.get_color() {
|
||||||
color[0] /= 2;
|
let r = color[0] as f32 + (fade * (color[0] as f32 * 0.5 - color[0] as f32));
|
||||||
color[1] /= 3;
|
let g = color[1] as f32 + (fade * (color[1] as f32 * 0.3 - color[1] as f32));
|
||||||
color[2] /= 3;
|
let b = color[2] as f32 + (fade * (color[2] as f32 * 0.3 - color[2] as f32));
|
||||||
block_change.set(pos, Block::new(block.kind(), color));
|
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(
|
let dir = Vec3::new(
|
||||||
rand::random::<f32>() - 0.5,
|
rand::random::<f32>() - 0.5,
|
||||||
rand::random::<f32>() - 0.5,
|
rand::random::<f32>() - 0.5,
|
||||||
rand::random::<f32>() - 0.5,
|
rand::random::<f32>() - 0.15,
|
||||||
)
|
)
|
||||||
.normalized();
|
.normalized();
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user