Beispiel #1
0
        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)
                };
            });
        }
Beispiel #2
0
        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);
            }
        }