From 86a4fb1d6fad54617aa20c14d315804187c2cfb0 Mon Sep 17 00:00:00 2001 From: Gustas <37534529+PunkPun@users.noreply.github.com> Date: Wed, 6 Aug 2025 19:44:07 +0300 Subject: [PATCH] Fix illegal resources being placed by pasting --- .../EditorBrushes/EditorBlit.cs | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) 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; }