From efc7915f4fe7e047906695cbe09060d11b050e6b Mon Sep 17 00:00:00 2001 From: reaperrr Date: Mon, 3 Aug 2015 23:36:16 +0200 Subject: [PATCH] Made projectile shadows heightmap-aware. --- OpenRA.Mods.Common/Effects/Bullet.cs | 6 ++++-- OpenRA.Mods.Common/Effects/GravityBomb.cs | 6 ++++-- OpenRA.Mods.Common/Effects/Missile.cs | 6 ++++-- 3 files changed, 12 insertions(+), 6 deletions(-) diff --git a/OpenRA.Mods.Common/Effects/Bullet.cs b/OpenRA.Mods.Common/Effects/Bullet.cs index bef851c0da..e8576b3078 100644 --- a/OpenRA.Mods.Common/Effects/Bullet.cs +++ b/OpenRA.Mods.Common/Effects/Bullet.cs @@ -177,11 +177,13 @@ namespace OpenRA.Mods.Common.Effects if (anim == null || ticks >= length) yield break; - if (!args.SourceActor.World.FogObscures(pos)) + var world = args.SourceActor.World; + if (!world.FogObscures(pos)) { if (info.Shadow) { - var shadowPos = pos - new WVec(0, 0, pos.Z); + var dat = world.Map.DistanceAboveTerrain(pos); + var shadowPos = pos - new WVec(0, 0, dat.Length); foreach (var r in anim.Render(shadowPos, wr.Palette(info.ShadowPalette))) yield return r; } diff --git a/OpenRA.Mods.Common/Effects/GravityBomb.cs b/OpenRA.Mods.Common/Effects/GravityBomb.cs index 0a3bb40a08..196053eb50 100644 --- a/OpenRA.Mods.Common/Effects/GravityBomb.cs +++ b/OpenRA.Mods.Common/Effects/GravityBomb.cs @@ -84,11 +84,13 @@ namespace OpenRA.Mods.Common.Effects public IEnumerable Render(WorldRenderer wr) { - if (!args.SourceActor.World.FogObscures(pos)) + var world = args.SourceActor.World; + if (!world.FogObscures(pos)) { if (info.Shadow) { - var shadowPos = pos - new WVec(0, 0, pos.Z); + var dat = world.Map.DistanceAboveTerrain(pos); + var shadowPos = pos - new WVec(0, 0, dat.Length); foreach (var r in anim.Render(shadowPos, wr.Palette("shadow"))) yield return r; } diff --git a/OpenRA.Mods.Common/Effects/Missile.cs b/OpenRA.Mods.Common/Effects/Missile.cs index bfd59ea81c..e621d0245f 100644 --- a/OpenRA.Mods.Common/Effects/Missile.cs +++ b/OpenRA.Mods.Common/Effects/Missile.cs @@ -227,11 +227,13 @@ namespace OpenRA.Mods.Common.Effects if (info.ContrailLength > 0) yield return contrail; - if (!args.SourceActor.World.FogObscures(pos)) + var world = args.SourceActor.World; + if (!world.FogObscures(pos)) { if (info.Shadow) { - var shadowPos = new WPos(pos.X, pos.Y, 0); + var dat = world.Map.DistanceAboveTerrain(pos); + var shadowPos = new WPos(pos.X, pos.Y, dat.Length); foreach (var r in anim.Render(shadowPos, wr.Palette("shadow"))) yield return r; }