Example #1
0
        public async Task<TerrainDescriptionOutput> QueryAsync(TerrainDescriptionQuery query)
        {
            Dictionary<TerrainDescriptionElementTypeEnum, TerrainDetailElementOutput> elementsDict =
                new Dictionary<TerrainDescriptionElementTypeEnum, TerrainDetailElementOutput>();
            var queryArea = query.QueryArea;
            foreach (var elementDetail in query.RequestedElementDetails)
            {
                elementDetail.Resolution = TerrainCardinalResolution.ToSingletonResolution(elementDetail.Resolution);
                AssertResolutionIsCompilant(queryArea, elementDetail.Resolution);
                var type = elementDetail.Type;
                TerrainDetailElementOutput element = null;
                if (type == TerrainDescriptionElementTypeEnum.HEIGHT_ARRAY)
                {
                    element = await RetriveHeightArrayAsync(queryArea, elementDetail.Resolution, elementDetail.RequiredMergeStatus);
                    //Debug.Log("E651: " + query.QueryArea+ $" and outUV is {element.UvBase}");
                }
                else if (type == TerrainDescriptionElementTypeEnum.NORMAL_ARRAY)
                {
                    element = await RetriveNormalArrayAsync(queryArea, elementDetail.Resolution, elementDetail.RequiredMergeStatus);
                }
                else
                {
                    Preconditions.Fail("Tesselation map unsupported!!!");
                }
                elementsDict[type] = element;
            }

            return new TerrainDescriptionOutput(elementsDict);
        }
Example #2
0
        public Task <TerrainDescriptionOutput> Query(TerrainDescriptionQuery query)
        {
            var tcs = new TaskCompletionSource <TerrainDescriptionOutput>();

            PostAction(async() => tcs.SetResult(await ProcessQueryOrderAsync(query)));
            return(tcs.Task);
        }
Example #3
0
 public static SerializableTerrainDescriptionQuery CreateFrom(TerrainDescriptionQuery query)
 {
     return(new SerializableTerrainDescriptionQuery()
     {
         QueryArea = SerializableMyRectangle.CreateFrom(query.QueryArea),
         RequestedElementDetails = query.RequestedElementDetails
     });
 }
Example #4
0
        public Task <TerrainDescriptionOutput> Query(TerrainDescriptionQuery query)
        {
            var outDict = new Dictionary <TerrainDescriptionElementTypeEnum, TerrainDetailElementOutput>();

            foreach (var requestedDetail in query.RequestedElementDetails)
            {
                var requestedType = requestedDetail.Type;
                var alignedArea   = RetriveAlignedArea(query.QueryArea.DownLeftPoint, requestedDetail.Resolution);
                var uv            = RectangleUtils.CalculateSubelementUv(alignedArea, query.QueryArea);
                if (requestedType == TerrainDescriptionElementTypeEnum.HEIGHT_ARRAY)
                {
                    outDict.Add(requestedType, new TerrainDetailElementOutput()
                    {
                        TokenizedElement = new TokenizedTerrainDetailElement()
                        {
                            DetailElement = new TerrainDetailElement()
                            {
                                DetailArea = alignedArea,
                                Resolution = requestedDetail.Resolution,
                                Texture    = _heightTexture
                            },
                            Token = new TerrainDetailElementToken(alignedArea, requestedDetail.Resolution, requestedType, CornersMergeStatus.NOT_MERGED)
                        },
                        UvBase = uv.ToRectangle()
                    });
                }
                else
                {
                    outDict.Add(requestedType, new TerrainDetailElementOutput()
                    {
                        TokenizedElement = new TokenizedTerrainDetailElement()
                        {
                            DetailElement = new TerrainDetailElement()
                            {
                                DetailArea = alignedArea,
                                Resolution = requestedDetail.Resolution,
                                Texture    = _normalTexture
                            },
                            Token = new TerrainDetailElementToken(alignedArea, requestedDetail.Resolution, requestedType, CornersMergeStatus.NOT_MERGED)
                        },
                        UvBase = uv.ToRectangle()
                    });
                }
            }

            return(TaskUtils.MyFromResult(new TerrainDescriptionOutput(outDict)));
        }
Example #5
0
        public Task <TerrainDescriptionOutput> Query(TerrainDescriptionQuery query)
        {
            var outDict = new Dictionary <TerrainDescriptionElementTypeEnum, TerrainDetailElementOutput>();

            foreach (var requestedDetail in query.RequestedElementDetails)
            {
                var requestedType = requestedDetail.Type;
                if (requestedType == TerrainDescriptionElementTypeEnum.HEIGHT_ARRAY)
                {
                    outDict.Add(requestedType, new TerrainDetailElementOutput()
                    {
                        TokenizedElement = new TokenizedTerrainDetailElement()
                        {
                            DetailElement = new TerrainDetailElement()
                            {
                                DetailArea = query.QueryArea,
                                Resolution = requestedDetail.Resolution,
                                Texture    = _blankTexture
                            },
                            Token = new TerrainDetailElementToken(query.QueryArea, requestedDetail.Resolution, requestedType, CornersMergeStatus.NOT_MERGED)
                        },
                        UvBase = new MyRectangle(0, 0, 1, 1)
                    });
                }
                else
                {
                    outDict.Add(requestedType, new TerrainDetailElementOutput()
                    {
                        TokenizedElement = new TokenizedTerrainDetailElement()
                        {
                            DetailElement = new TerrainDetailElement()
                            {
                                DetailArea = query.QueryArea,
                                Resolution = requestedDetail.Resolution,
                                Texture    = _normalTexture
                            },
                            Token = new TerrainDetailElementToken(query.QueryArea, requestedDetail.Resolution, requestedType, CornersMergeStatus.NOT_MERGED)
                        },
                        UvBase = new MyRectangle(0, 0, 1, 1)
                    });
                }
            }

            return(TaskUtils.MyFromResult(new TerrainDescriptionOutput(outDict)));
        }
Example #6
0
 public Task <TerrainDescriptionOutput> Query(TerrainDescriptionQuery query)
 {
     Debug.Log("k55");
     _allQueries.Add(query);
     return(_internalDb.Query(query));
 }
Example #7
0
 private Task <TerrainDescriptionOutput> ProcessQueryOrderAsync(TerrainDescriptionQuery query)
 {
     return(_db.QueryAsync(query));
 }