From 65d6071378a8425636d04cef9991632e339afc85 Mon Sep 17 00:00:00 2001 From: Joonas Rikkonen Date: Sat, 30 Dec 2017 04:51:39 +0200 Subject: [PATCH] Fixed damageshader ignoring sprite colors. Closes #212 --- .../BarotraumaClient/Source/Map/Structure.cs | 5 ++++- .../BarotraumaClient/Source/Map/Submarine.cs | 1 + .../BarotraumaShared/Content/damageshader.fx | 5 +++-- .../BarotraumaShared/Content/damageshader.xnb | Bin 1241 -> 1370 bytes .../Content/damageshader_opengl.xnb | Bin 1216 -> 1315 bytes 5 files changed, 8 insertions(+), 3 deletions(-) diff --git a/Barotrauma/BarotraumaClient/Source/Map/Structure.cs b/Barotrauma/BarotraumaClient/Source/Map/Structure.cs index acdb62496..451929be8 100644 --- a/Barotrauma/BarotraumaClient/Source/Map/Structure.cs +++ b/Barotrauma/BarotraumaClient/Source/Map/Structure.cs @@ -148,14 +148,17 @@ namespace Barotrauma { float newCutoff = Math.Min((sections[i].damage / prefab.Health), 0.65f); - if (Math.Abs(newCutoff - Submarine.DamageEffectCutoff) > 0.01f) + if (Math.Abs(newCutoff - Submarine.DamageEffectCutoff) > 0.01f || color != Submarine.DamageEffectColor) { damageEffect.Parameters["aCutoff"].SetValue(newCutoff); damageEffect.Parameters["cCutoff"].SetValue(newCutoff * 1.2f); + damageEffect.Parameters["color"].SetValue(color.ToVector4()); + damageEffect.CurrentTechnique.Passes[0].Apply(); Submarine.DamageEffectCutoff = newCutoff; + Submarine.DamageEffectColor = color; } } diff --git a/Barotrauma/BarotraumaClient/Source/Map/Submarine.cs b/Barotrauma/BarotraumaClient/Source/Map/Submarine.cs index ffa0cacc5..24f89c20f 100644 --- a/Barotrauma/BarotraumaClient/Source/Map/Submarine.cs +++ b/Barotrauma/BarotraumaClient/Source/Map/Submarine.cs @@ -67,6 +67,7 @@ namespace Barotrauma } public static float DamageEffectCutoff; + public static Color DamageEffectColor; public static void DrawDamageable(SpriteBatch spriteBatch, Effect damageEffect, bool editing = false) { diff --git a/Barotrauma/BarotraumaShared/Content/damageshader.fx b/Barotrauma/BarotraumaShared/Content/damageshader.fx index 554df8415..41b3356e4 100644 --- a/Barotrauma/BarotraumaShared/Content/damageshader.fx +++ b/Barotrauma/BarotraumaShared/Content/damageshader.fx @@ -5,6 +5,7 @@ sampler TextureSampler : register (s0) = sampler_state { Texture = ; } Texture xStencil; sampler StencilSampler = sampler_state { Texture = ; }; +float4 color; float aCutoff; float aMultiplier; @@ -14,9 +15,9 @@ float cMultiplier; float4 main(float4 position : SV_Position, float4 color : COLOR0, float2 texCoord : TEXCOORD0) : COLOR0 { - float4 c = tex2D(TextureSampler, texCoord); + float4 c = xTexture.Sample(TextureSampler, texCoord) * color; - float4 stencilColor = tex2D(StencilSampler, texCoord); + float4 stencilColor = xStencil.Sample(StencilSampler, texCoord); float aDiff = stencilColor.a - aCutoff; diff --git a/Barotrauma/BarotraumaShared/Content/damageshader.xnb b/Barotrauma/BarotraumaShared/Content/damageshader.xnb index ca70b20de0fe6c4499cdee6c618159f5054a122c..5d3aad9e71b57dc253b255e7342dd52269c1e35f 100644 GIT binary patch delta 484 zcmZ8dF-t;G7(L&;K7C5?9?=jI(QrVW% z?b|g$0u}&qp$4D_5gLNvO#{VpVLFv_W5&7!w zRFd2P%J)Cn(u5!xoYGJj@oaJ8LNzElhv_G40#4f-mGcJULxMAg4-|6%>ck3nN*4*9er`}u*^mPJxc>Y6rBBtS!0NYU?T`Ati(b|ghUHX45xw$D#+Q0pkN^wu`z`oi&%;vTiEyy zM6k41u+!Gq3HKjtgmw1FgV{GbZ&s;gtS-ih5$b*GLm&bL z2n}hViV(00XeG^ssh45(y#L!iJb&!$U3~5c+QKZ@Cy6SBFA1zrYqXE*f7AjXy?K+2xl0-zKO@7~HxXNVc(5~=kb*j#FD zJTPeKvF8ewk|{mXU1)D~mkSDnS0K9A(-F bePPX+;CD~zj2YwlctAr?&Jlg?Rp0*uK7Bq6 diff --git a/Barotrauma/BarotraumaShared/Content/damageshader_opengl.xnb b/Barotrauma/BarotraumaShared/Content/damageshader_opengl.xnb index 49535dde048c5682c54097548eb1b2818c2630e6..9249f145f8ac61010960e07af83eb0ab17e7fd25 100644 GIT binary patch delta 204 zcmX@WxtNP1!p|v%l|h+xB1a3~WEKVnUw5|%4u(e)Z*)(brOdct;`2{eEcsIv&fsZy|2&_HmsAVz{DG!?WJbU`u(ARadHLpb H%tDL+=KVko delta 120 zcmZ3?b%2v2!p|v%mEi!(M2;3d0~Q7bUw5|%4u(Lrww{Tzlo@?D?n`ByT*f59W1vtL zl3L-MpI?+>Fxitye)1e914e_%XPMq;8|YP3YFhJhaTXNE7a0OMRSLEWx*!fnrb