diff --git a/OpenRA.Game/Graphics/TerrainSpriteLayer.cs b/OpenRA.Game/Graphics/TerrainSpriteLayer.cs index 70a7a7b152..69ec803577 100644 --- a/OpenRA.Game/Graphics/TerrainSpriteLayer.cs +++ b/OpenRA.Game/Graphics/TerrainSpriteLayer.cs @@ -76,15 +76,15 @@ namespace OpenRA.Graphics public void Clear(CPos cell) { - Update(cell, null, null, 1f, true); + Update(cell, null, null, 1f, 1f, true); } public void Update(CPos cell, ISpriteSequence sequence, PaletteReference palette, int frame) { - Update(cell, sequence.GetSprite(frame), palette, sequence.Scale, sequence.IgnoreWorldTint); + Update(cell, sequence.GetSprite(frame), palette, sequence.Scale, sequence.GetAlpha(frame), sequence.IgnoreWorldTint); } - public void Update(CPos cell, Sprite sprite, PaletteReference palette, float scale = 1f, bool ignoreTint = false) + public void Update(CPos cell, Sprite sprite, PaletteReference palette, float scale = 1f, float alpha = 1f, bool ignoreTint = false) { var xyz = float3.Zero; if (sprite != null) @@ -93,7 +93,7 @@ namespace OpenRA.Graphics xyz = worldRenderer.Screen3DPosition(cellOrigin) + scale * (sprite.Offset - 0.5f * sprite.Size); } - Update(cell.ToMPos(map.Grid.Type), sprite, palette, xyz, scale, ignoreTint); + Update(cell.ToMPos(map.Grid.Type), sprite, palette, xyz, scale, alpha, ignoreTint); } void UpdateTint(MPos uv) @@ -101,11 +101,10 @@ namespace OpenRA.Graphics var offset = rowStride * uv.V + 6 * uv.U; if (ignoreTint[offset]) { - var noTint = float3.Ones; for (var i = 0; i < 6; i++) { var v = vertices[offset + i]; - vertices[offset + i] = new Vertex(v.X, v.Y, v.Z, v.S, v.T, v.U, v.V, v.P, v.C, noTint, 1f); + vertices[offset + i] = new Vertex(v.X, v.Y, v.Z, v.S, v.T, v.U, v.V, v.P, v.C, v.A * float3.Ones, v.A); } return; @@ -130,7 +129,7 @@ namespace OpenRA.Graphics for (var i = 0; i < 6; i++) { var v = vertices[offset + i]; - vertices[offset + i] = new Vertex(v.X, v.Y, v.Z, v.S, v.T, v.U, v.V, v.P, v.C, weights[CornerVertexMap[i]], 1f); + vertices[offset + i] = new Vertex(v.X, v.Y, v.Z, v.S, v.T, v.U, v.V, v.P, v.C, v.A * weights[CornerVertexMap[i]], v.A); } dirtyRows.Add(uv.V); @@ -156,7 +155,7 @@ namespace OpenRA.Graphics throw new InvalidDataException("Sheet overflow"); } - public void Update(MPos uv, Sprite sprite, PaletteReference palette, in float3 pos, float scale, bool ignoreTint) + public void Update(MPos uv, Sprite sprite, PaletteReference palette, in float3 pos, float scale, float alpha, bool ignoreTint) { int2 samplers; if (sprite != null) @@ -177,7 +176,7 @@ namespace OpenRA.Graphics return; var offset = rowStride * uv.V + 6 * uv.U; - Util.FastCreateQuad(vertices, pos, sprite, samplers, palette?.TextureIndex ?? 0, offset, scale * sprite.Size, float3.Ones, 1f); + Util.FastCreateQuad(vertices, pos, sprite, samplers, palette?.TextureIndex ?? 0, offset, scale * sprite.Size, alpha * float3.Ones, alpha); palettes[uv.V * map.MapSize.X + uv.U] = palette; if (worldRenderer.TerrainLighting != null) diff --git a/OpenRA.Mods.Common/Traits/World/ResourceRenderer.cs b/OpenRA.Mods.Common/Traits/World/ResourceRenderer.cs index 82a441c95d..c5fc14630a 100644 --- a/OpenRA.Mods.Common/Traits/World/ResourceRenderer.cs +++ b/OpenRA.Mods.Common/Traits/World/ResourceRenderer.cs @@ -107,7 +107,7 @@ namespace OpenRA.Mods.Common.Traits // resource.Type is meaningless (and may be null) if resource.Sequence is null if (sequence != null) { - shadowLayer?.Update(cell, sequence.GetShadow(frame, WAngle.Zero), palette, 1f, sequence.IgnoreWorldTint); + shadowLayer?.Update(cell, sequence.GetShadow(frame, WAngle.Zero), palette, 1f, 1f, sequence.IgnoreWorldTint); spriteLayer.Update(cell, sequence, palette, frame); } else diff --git a/OpenRA.Mods.Common/Traits/World/ShroudRenderer.cs b/OpenRA.Mods.Common/Traits/World/ShroudRenderer.cs index aa13288f53..0b22ff6689 100644 --- a/OpenRA.Mods.Common/Traits/World/ShroudRenderer.cs +++ b/OpenRA.Mods.Common/Traits/World/ShroudRenderer.cs @@ -294,8 +294,8 @@ namespace OpenRA.Mods.Common.Traits if (fogSprite != null) fogPos += fogSprite.Offset - 0.5f * fogSprite.Size; - shroudLayer.Update(uv, shroudSprite, shroudPaletteReference, shroudPos, 1f, true); - fogLayer.Update(uv, fogSprite, fogPaletteReference, fogPos, 1f, true); + shroudLayer.Update(uv, shroudSprite, shroudPaletteReference, shroudPos, 1f, 1f, true); + fogLayer.Update(uv, fogSprite, fogPaletteReference, fogPos, 1f, 1f, true); } anyCellDirty = false;