From 3d65ba39f65c7e71d861e42fd4a1bca2e9d3c2e3 Mon Sep 17 00:00:00 2001 From: Paul Chote Date: Sun, 2 Aug 2015 17:15:39 +0100 Subject: [PATCH] Lazily initialize cell projection mapping. --- OpenRA.Game/Map/Map.cs | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/OpenRA.Game/Map/Map.cs b/OpenRA.Game/Map/Map.cs index fb3be8f6c2..05d72b0a93 100644 --- a/OpenRA.Game/Map/Map.cs +++ b/OpenRA.Game/Map/Map.cs @@ -246,6 +246,8 @@ namespace OpenRA [FieldLoader.Ignore] public Lazy> MapHeight; [FieldLoader.Ignore] public CellLayer CustomTerrain; + + [FieldLoader.Ignore] bool initializedCellProjection; [FieldLoader.Ignore] CellLayer cellProjection; [FieldLoader.Ignore] CellLayer> inverseCellProjection; @@ -437,6 +439,14 @@ namespace OpenRA rightDelta + new WVec(0, 0, 512 * ramp[2]), bottomDelta + new WVec(0, 0, 512 * ramp[3]) }).ToArray(); + } + + void InitializeCellProjection() + { + if (initializedCellProjection) + return; + + initializedCellProjection = true; if (MaximumTerrainHeight != 0) { @@ -462,6 +472,9 @@ namespace OpenRA if (MaximumTerrainHeight == 0) return; + if (!initializedCellProjection) + InitializeCellProjection(); + var uv = cell.ToMPos(TileShape); // Remove old reverse projection @@ -813,6 +826,9 @@ namespace OpenRA if (MaximumTerrainHeight == 0) return new[] { (PPos)uv }; + if (!initializedCellProjection) + InitializeCellProjection(); + if (!cellProjection.Contains(uv)) return NoProjectedCells; @@ -827,6 +843,9 @@ namespace OpenRA if (MaximumTerrainHeight == 0) return new[] { uv }; + if (!initializedCellProjection) + InitializeCellProjection(); + if (!inverseCellProjection.Contains(uv)) return new MPos[0];