diff --git a/OpenRA.Mods.Common/EditorBrushes/EditorBlit.cs b/OpenRA.Mods.Common/EditorBrushes/EditorBlit.cs index f132430c55..9ec9b59e62 100644 --- a/OpenRA.Mods.Common/EditorBrushes/EditorBlit.cs +++ b/OpenRA.Mods.Common/EditorBrushes/EditorBlit.cs @@ -172,8 +172,11 @@ namespace OpenRA.Mods.Common.EditorBrushes if (blitFilters.HasFlag(MapBlitFilters.Resources) && resourceLayerContents.HasValue && - !string.IsNullOrWhiteSpace(resourceLayerContents.Value.Type)) + !string.IsNullOrWhiteSpace(resourceLayerContents.Value.Type) && + resourceLayer.CanAddResource(resourceLayerContents.Value.Type, position)) + { resourceLayer.AddResource(resourceLayerContents.Value.Type, position, resourceLayerContents.Value.Density); + } } if (blitFilters.HasFlag(MapBlitFilters.Actors)) @@ -220,13 +223,11 @@ namespace OpenRA.Mods.Common.EditorBrushes var world = wr.World; var map = world.Map; - var terrainRenderer = world.WorldActor.Trait(); - var resourceRenderers = world.WorldActor.TraitsImplementing().ToArray(); - var wOffset = map.CenterOfCell(CPos.Zero + offset) - map.CenterOfCell(CPos.Zero); if (filters.HasFlag(MapBlitFilters.Terrain)) { + var terrainRenderer = world.WorldActor.Trait(); foreach (var (cpos, tile) in blitSource.Tiles) { var preview = @@ -241,16 +242,22 @@ namespace OpenRA.Mods.Common.EditorBrushes if (filters.HasFlag(MapBlitFilters.Resources)) { - foreach (var (cpos, tile) in blitSource.Tiles) + var resourceRenderers = world.WorldActor.TraitsImplementing().ToArray(); + var resourceLayer = world.WorldActor.Trait(); + foreach (var (pos, tile) in blitSource.Tiles) { if (tile.ResourceLayerContents == null || tile.ResourceLayerContents.Value.Type == null) continue; + var cPos = pos + offset; + if (!filters.HasFlag(MapBlitFilters.Terrain) && !resourceLayer.CanAddResource(tile.ResourceLayerContents.Value.Type, cPos)) + continue; + var preview = resourceRenderers .SelectMany(r => r.RenderPreview( wr, tile.ResourceLayerContents.Value.Type, - map.CenterOfCell(cpos + offset))); + map.CenterOfCell(cPos))); foreach (var renderable in preview) yield return renderable; }