From a951ca2ae8244471dd9d432f02cc85be418a202a Mon Sep 17 00:00:00 2001 From: Joshua Barretto Date: Mon, 27 Jan 2020 01:51:38 +0000 Subject: [PATCH 1/2] Added point light ambiance --- assets/voxygen/shaders/include/light.glsl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assets/voxygen/shaders/include/light.glsl b/assets/voxygen/shaders/include/light.glsl index 7c81b95c35..e937535b78 100644 --- a/assets/voxygen/shaders/include/light.glsl +++ b/assets/voxygen/shaders/include/light.glsl @@ -48,7 +48,7 @@ vec3 light_at(vec3 wpos, vec3 wnorm) { // Multiply the vec3 only once vec3 color = srgb_to_linear(L.light_col.rgb) * (strength * L.light_col.a); - light += color * (max(0, dot(normalize(difference), wnorm) + 0.15) + LIGHT_AMBIENCE); + light += color * (max(0, max(dot(normalize(difference), wnorm), 0.15)) + LIGHT_AMBIENCE); } return light; } From 95647f10f52ff311480ca1a6eab96f5434e0ee1e Mon Sep 17 00:00:00 2001 From: Joshua Barretto Date: Mon, 27 Jan 2020 10:02:36 +0000 Subject: [PATCH 2/2] Improved NPC spawning and names, made idle NPCs stop before hitting things --- common/src/sys/agent.rs | 23 ++++++++++++++++++++++- server/src/sys/terrain.rs | 18 +++++++++++++----- 2 files changed, 35 insertions(+), 6 deletions(-) diff --git a/common/src/sys/agent.rs b/common/src/sys/agent.rs index a96daa166c..61f198fc94 100644 --- a/common/src/sys/agent.rs +++ b/common/src/sys/agent.rs @@ -4,6 +4,7 @@ use crate::{ path::Chaser, state::Time, sync::UidAllocator, + vol::ReadVol, }; use rand::{seq::SliceRandom, thread_rng, Rng}; use specs::{ @@ -93,9 +94,29 @@ impl<'a> System<'a> for Sys { } else { Vec2::zero() }; + // Stop if we're too close to a wall + *bearing *= 0.1 + + if terrain + .ray( + pos.0 + Vec3::unit_z(), + pos.0 + + Vec3::from(*bearing).normalized() * 1.5 + + Vec3::unit_z(), + ) + .until(|block| block.is_solid()) + .cast() + .1 + .map(|b| b.is_none()) + .unwrap_or(true) + { + 0.9 + } else { + 0.0 + }; if bearing.magnitude_squared() > 0.25f32.powf(2.0) { - inputs.move_dir = bearing.normalized() * 0.65; + inputs.move_dir = + bearing.try_normalized().unwrap_or(Vec2::zero()) * 0.65; } // Sometimes try searching for new targets diff --git a/server/src/sys/terrain.rs b/server/src/sys/terrain.rs index f20c21dc32..b243a7b445 100644 --- a/server/src/sys/terrain.rs +++ b/server/src/sys/terrain.rs @@ -111,6 +111,14 @@ impl<'a> System<'a> for Sys { "Traveler".into(), comp::Body::Humanoid(comp::humanoid::Body::random()), Some(assets::load_expect_cloned("common.items.weapons.staff_1")), + comp::Alignment::Npc, + ) + }) as _, + (|| { + ( + "Bandit".into(), + comp::Body::Humanoid(comp::humanoid::Body::random()), + Some(assets::load_expect_cloned("common.items.weapons.staff_1")), comp::Alignment::Enemy, ) }) as _, @@ -147,7 +155,7 @@ impl<'a> System<'a> for Sys { ) }), ]; - let (name, mut body, main, alignment) = SPAWN_NPCS + let (name, mut body, main, mut alignment) = SPAWN_NPCS .choose(&mut rand::thread_rng()) .expect("SPAWN_NPCS is nonempty")( ); @@ -159,11 +167,11 @@ impl<'a> System<'a> for Sys { stats.level.set_level(rand::thread_rng().gen_range(1, 4)); if let EntityKind::Boss = entity.kind { - if rand::random::() < 0.8 { - let hbody = comp::humanoid::Body::random(); - body = comp::Body::Humanoid(hbody); + if rand::random::() < 0.65 { + body = comp::Body::Humanoid(comp::humanoid::Body::random()); + alignment = comp::Alignment::Npc; stats = comp::Stats::new( - "Fearless Wanderer".to_string(), + "Fearless Giant".to_string(), body, Some(assets::load_expect_cloned("common.items.weapons.hammer_1")), );