public void Update()
{
if (WorkingRevision == Revision || WorkingShape != null)
return;
int currentRevision = WorkingRevision;
lock (PublicShape)
{
WorkingShape = new TerrainShape
{
TerrainBitmap = PublicShape.TerrainBitmap.Clone() as TerrainType[,]
};
}
// Enqueue update-task
var Task = new Task(() =>
{
ExtractTrianglesAndOutline();
BuildTerrainTypeTexture();
lock (PublicShape)
{
// Copy new triangles/outline to TerrainShape
PublicShape = WorkingShape;
WorkingShape = null;
Revision = currentRevision;
}
});
Task.Start();
if (currentRevision == 1)
Task.Wait();
}