From fbb24e7c8a4798390389589c05481bf6141ede15 Mon Sep 17 00:00:00 2001 From: timokoesters Date: Mon, 23 Mar 2020 22:52:35 +0100 Subject: [PATCH] Even better fireballs --- common/src/comp/inventory/item.rs | 6 +++--- common/src/states/cast_fireball.rs | 2 +- server/src/events/entity_manipulation.rs | 22 ++++++++++++++-------- 3 files changed, 18 insertions(+), 12 deletions(-) diff --git a/common/src/comp/inventory/item.rs b/common/src/comp/inventory/item.rs index 0af04fcd93..729eabda62 100644 --- a/common/src/comp/inventory/item.rs +++ b/common/src/comp/inventory/item.rs @@ -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), diff --git a/common/src/states/cast_fireball.rs b/common/src/states/cast_fireball.rs index 911562be72..d9e54e65a0 100644 --- a/common/src/states/cast_fireball.rs +++ b/common/src/states/cast_fireball.rs @@ -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, diff --git a/server/src/events/entity_manipulation.rs b/server/src/events/entity_manipulation.rs index 4d17cc6b5c..714d35933d 100644 --- a/server/src/events/entity_manipulation.rs +++ b/server/src/events/entity_manipulation.rs @@ -236,6 +236,7 @@ pub fn handle_explosion(server: &Server, pos: Vec3, 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::() - 0.5, @@ -246,7 +247,7 @@ pub fn handle_explosion(server: &Server, pos: Vec3, power: f32, owner: Opti let _ = ecs .read_resource::() - .ray(pos, pos + dir * power * 2.5) + .ray(pos, pos + dir * color_range) .until(|_| rand::random::() < 0.05) .for_each(|pos| touched_blocks.push(pos)) .cast(); @@ -254,13 +255,18 @@ pub fn handle_explosion(server: &Server, pos: Vec3, power: f32, owner: Opti let terrain = ecs.read_resource::(); let mut block_change = ecs.write_resource::(); - 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, power: f32, owner: Opti let dir = Vec3::new( rand::random::() - 0.5, rand::random::() - 0.5, - rand::random::() - 0.5, + rand::random::() - 0.15, ) .normalized();