diff --git a/OpenRA.Game/Graphics/TerrainRenderer.cs b/OpenRA.Game/Graphics/TerrainRenderer.cs index 1f6a123159..a6011527b0 100644 --- a/OpenRA.Game/Graphics/TerrainRenderer.cs +++ b/OpenRA.Game/Graphics/TerrainRenderer.cs @@ -18,11 +18,13 @@ namespace OpenRA.Graphics readonly TerrainSpriteLayer terrain; readonly Theater theater; readonly CellLayer mapTiles; + readonly CellLayer mapHeight; public TerrainRenderer(World world, WorldRenderer wr) { theater = wr.Theater; mapTiles = world.Map.MapTiles.Value; + mapHeight = world.Map.MapHeight.Value; terrain = new TerrainSpriteLayer(world, wr, theater.Sheet, BlendMode.Alpha, wr.Palette("terrain"), wr.World.Type != WorldType.Editor); @@ -30,8 +32,8 @@ namespace OpenRA.Graphics foreach (var cell in world.Map.AllCells) UpdateCell(cell); - world.Map.MapTiles.Value.CellEntryChanged += UpdateCell; - world.Map.MapHeight.Value.CellEntryChanged += UpdateCell; + mapTiles.CellEntryChanged += UpdateCell; + mapHeight.CellEntryChanged += UpdateCell; } public void UpdateCell(CPos cell) @@ -48,6 +50,8 @@ namespace OpenRA.Graphics public void Dispose() { + mapTiles.CellEntryChanged -= UpdateCell; + mapHeight.CellEntryChanged -= UpdateCell; terrain.Dispose(); } } diff --git a/OpenRA.Mods.Common/Traits/World/EditorResourceLayer.cs b/OpenRA.Mods.Common/Traits/World/EditorResourceLayer.cs index 3224e6b4aa..56fc6dd836 100644 --- a/OpenRA.Mods.Common/Traits/World/EditorResourceLayer.cs +++ b/OpenRA.Mods.Common/Traits/World/EditorResourceLayer.cs @@ -207,6 +207,8 @@ namespace OpenRA.Mods.Common.Traits foreach (var kv in spriteLayers.Values) kv.Dispose(); + Map.MapResources.Value.CellEntryChanged -= UpdateCell; + disposed = true; } } diff --git a/OpenRA.Mods.Common/Traits/World/ResourceLayer.cs b/OpenRA.Mods.Common/Traits/World/ResourceLayer.cs index f11e9c9e95..570deb906d 100644 --- a/OpenRA.Mods.Common/Traits/World/ResourceLayer.cs +++ b/OpenRA.Mods.Common/Traits/World/ResourceLayer.cs @@ -294,6 +294,8 @@ namespace OpenRA.Mods.Common.Traits foreach (var kv in spriteLayers.Values) kv.Dispose(); + RenderContent.CellEntryChanged -= UpdateSpriteLayers; + disposed = true; } diff --git a/OpenRA.Mods.Common/Widgets/RadarWidget.cs b/OpenRA.Mods.Common/Widgets/RadarWidget.cs index 99c1164f7a..4c194f6321 100644 --- a/OpenRA.Mods.Common/Widgets/RadarWidget.cs +++ b/OpenRA.Mods.Common/Widgets/RadarWidget.cs @@ -442,5 +442,12 @@ namespace OpenRA.Mods.Common.Widgets var v = (int)((p.Y - mapRect.Y) / previewScale) + world.Map.Bounds.Top; return new MPos(u, v).ToCPos(world.Map); } + + public override void Removed() + { + base.Removed(); + world.Map.MapTiles.Value.CellEntryChanged -= UpdateTerrainCell; + world.Map.CustomTerrain.CellEntryChanged -= UpdateTerrainCell; + } } }