Lazily initialize cell projection mapping.

This commit is contained in:
Paul Chote
2015-08-02 17:15:39 +01:00
parent f888886c35
commit 3d65ba39f6

View File

@@ -246,6 +246,8 @@ namespace OpenRA
[FieldLoader.Ignore] public Lazy<CellLayer<byte>> MapHeight;
[FieldLoader.Ignore] public CellLayer<byte> CustomTerrain;
[FieldLoader.Ignore] bool initializedCellProjection;
[FieldLoader.Ignore] CellLayer<PPos[]> cellProjection;
[FieldLoader.Ignore] CellLayer<List<MPos>> 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];