CreateGridBasedMockProvidingFunctionWithMergeStatus(Dictionary <IntVector2, TextureWithMergingStatus> terrainDetailForGridElements, TextureWithMergingStatus defaultDetail) { var copyOfDictionary = terrainDetailForGridElements.ToDictionary(e => e.Key, e => e.Value); return((type, queryArea, resolution, cornersMergeStatus) => { TextureWithMergingStatus outTextureWithMergeStatus = null; foreach (var pair in copyOfDictionary) { var realPosition = new Vector2(pair.Key.X * 90f, pair.Key.Y * 90f); if (Math.Abs(queryArea.X - realPosition.x) < 0.0001f && Math.Abs(queryArea.Y - realPosition.y) < 0.0001f) { outTextureWithMergeStatus = pair.Value; } } if (outTextureWithMergeStatus == null) { if (defaultDetail == null) { Preconditions.Fail("E911 Failed to return detail in " + queryArea); } else { outTextureWithMergeStatus = defaultDetail; } } return new TerrainDetailElementOutput() { TokenizedElement = new TokenizedTerrainDetailElement() { DetailElement = new TerrainDetailElement() { CornersMergeStatus = outTextureWithMergeStatus.MergeStatus, DetailArea = queryArea, Resolution = resolution, Texture = outTextureWithMergeStatus.Texture }, Token = new TerrainDetailElementToken(queryArea, resolution, type, CornersMergeStatus.NOT_MERGED) }, UvBase = new MyRectangle(0, 0, 1, 1) }; }); }
public async Task Test8() // Merging corners of all details where some are arleady merged { var ourBaseTexture = CreateBaseTexture(0.5f, DebugTerrainCharacter.Flat); var defaultDetail = new TextureWithMergingStatus() { MergeStatus = CornersMergeStatus.NOT_MERGED, Texture = CreateBaseTexture(0f, DebugTerrainCharacter.Flat) }; var gridPositionDetailTextures = new Dictionary <IntVector2, TextureWithMergingStatus> { { new IntVector2(0, 0), new TextureWithMergingStatus() { MergeStatus = CornersMergeStatus.MERGED, Texture = CreateBaseTexture(0.1f, DebugTerrainCharacter.Flat) } }, { new IntVector2(1, 0), new TextureWithMergingStatus() { MergeStatus = CornersMergeStatus.MERGED, Texture = CreateBaseTexture(0.1f, DebugTerrainCharacter.Flat) } }, { new IntVector2(2, 0), new TextureWithMergingStatus() { MergeStatus = CornersMergeStatus.NOT_MERGED, Texture = CreateBaseTexture(0.3f, DebugTerrainCharacter.Flat) } }, { new IntVector2(0, 1), new TextureWithMergingStatus() { MergeStatus = CornersMergeStatus.MERGED, Texture = CreateBaseTexture(0.1f, DebugTerrainCharacter.Flat) } }, { new IntVector2(1, 1), new TextureWithMergingStatus() { MergeStatus = CornersMergeStatus.NOT_MERGED, Texture = ourBaseTexture } }, { new IntVector2(2, 1), new TextureWithMergingStatus() { MergeStatus = CornersMergeStatus.NOT_MERGED, Texture = CreateBaseTexture(0.6f, DebugTerrainCharacter.Flat) } }, { new IntVector2(0, 2), new TextureWithMergingStatus() { MergeStatus = CornersMergeStatus.MERGED, Texture = CreateBaseTexture(0.1f, DebugTerrainCharacter.Flat) } }, { new IntVector2(1, 2), new TextureWithMergingStatus() { MergeStatus = CornersMergeStatus.NOT_MERGED, Texture = CreateBaseTexture(0.8f, DebugTerrainCharacter.Flat) } }, { new IntVector2(2, 2), new TextureWithMergingStatus() { MergeStatus = CornersMergeStatus.NOT_MERGED, Texture = CreateBaseTexture(0.9f, DebugTerrainCharacter.Flat) } }, }; _mockProvider.MockProvidingFunction = CreateGridBasedMockProvidingFunctionWithMergeStatus(gridPositionDetailTextures, defaultDetail); var mergedDetailTextures = new Dictionary <IntVector2, TextureWithSize>(); foreach (var pair in gridPositionDetailTextures) { if (pair.Value.MergeStatus == CornersMergeStatus.NOT_MERGED) { mergedDetailTextures[pair.Key] = await _merger.MergeHeightDetailCorners(new MyRectangle(pair.Key.X * 90f, pair.Key.Y * 90f, 90, 90), TerrainCardinalResolution.MAX_RESOLUTION, pair.Value.Texture); } else { mergedDetailTextures[pair.Key] = pair.Value.Texture; } } foreach (var pair in mergedDetailTextures) { CreateTerrainObject(pair.Value, pair.Key * 90f); } }