From b3bbdbf589c36c9fc48b96dd5ca17212d12efaa6 Mon Sep 17 00:00:00 2001 From: Regalis Date: Tue, 4 Apr 2017 19:54:28 +0300 Subject: [PATCH] Explosion damage is reduced if there are walls or other solid obstacles between an explosion and a character --- Subsurface/Source/Map/Explosion.cs | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/Subsurface/Source/Map/Explosion.cs b/Subsurface/Source/Map/Explosion.cs index ba3a750f3..1dc482b7e 100644 --- a/Subsurface/Source/Map/Explosion.cs +++ b/Subsurface/Source/Map/Explosion.cs @@ -3,6 +3,7 @@ using Barotrauma.Lights; using System; using System.Collections.Generic; using System.Xml.Linq; +using FarseerPhysics; namespace Barotrauma { @@ -116,6 +117,11 @@ namespace Barotrauma foreach (Character c in Character.CharacterList) { + Vector2 explosionPos = worldPosition; + if (c.Submarine != null) explosionPos -= c.Submarine.Position; + + explosionPos = ConvertUnits.ToSimUnits(explosionPos); + foreach (Limb limb in c.AnimController.Limbs) { float dist = Vector2.Distance(limb.WorldPosition, worldPosition); @@ -129,6 +135,9 @@ namespace Barotrauma float distFactor = 1.0f - dist / range; + //solid obstacles between the explosion and the limb reduce the effect of the explosion by 90% + if (Submarine.CheckVisibility(limb.SimPosition, explosionPos) != null) distFactor *= 0.1f; + c.AddDamage(limb.WorldPosition, DamageType.None, damage / c.AnimController.Limbs.Length * distFactor, 0.0f, stun * distFactor, false);