public override async Task <TerrainDetailElementOutput> RetriveTerrainDetailAsync( TerrainDescriptionElementTypeEnum type, MyRectangle queryArea, TerrainCardinalResolution resolution, RequiredCornersMergeStatus cornersMergeStatus) { TerrainDetailElement detailElement = null; CornersMergeStatus status = CornersMergeStatus.MERGED; if (cornersMergeStatus == RequiredCornersMergeStatus.NOT_MERGED) { status = CornersMergeStatus.NOT_MERGED; } if (type == TerrainDescriptionElementTypeEnum.HEIGHT_ARRAY) { detailElement = await _provider.GenerateHeightDetailElementAsync(queryArea, resolution, status); } else if (type == TerrainDescriptionElementTypeEnum.NORMAL_ARRAY) { detailElement = await _provider.GenerateNormalDetailElementAsync(queryArea, resolution, status); } else { Preconditions.Fail("Not supported type: " + type); } return(new TerrainDetailElementOutput() { TokenizedElement = new TokenizedTerrainDetailElement() { DetailElement = detailElement, Token = null }, UvBase = null }); }
public InternalTerrainDetailElementToken(IntRectangle queryArea, TerrainCardinalResolution resolution, TerrainDescriptionElementTypeEnum type, CornersMergeStatus mergeStatus) { _queryArea = queryArea; _resolution = resolution; _type = type; _mergeStatus = mergeStatus; }
public override async Task <TerrainDetailElementOutput> RetriveTerrainDetailAsync( TerrainDescriptionElementTypeEnum type, MyRectangle queryArea, TerrainCardinalResolution resolution, RequiredCornersMergeStatus cornersMergeStatus) { var queryOutput = await _db.QueryAsync(new TerrainDescriptionQuery() { QueryArea = queryArea, RequestedElementDetails = new List <TerrainDescriptionQueryElementDetail>() { new TerrainDescriptionQueryElementDetail() { Resolution = resolution, Type = type, RequiredMergeStatus = cornersMergeStatus } } }); return(queryOutput.GetElementOfType(type)); }
public override Task <TerrainDetailElementOutput> RetriveTerrainDetailAsync( TerrainDescriptionElementTypeEnum type, MyRectangle queryArea, TerrainCardinalResolution resolution, RequiredCornersMergeStatus cornersMergeStatus) { return(TaskUtils.MyFromResult(_mockProvidingFunction(type, queryArea, resolution, cornersMergeStatus))); }
private async Task <TokenizedTerrainDetailElement> GenerateElementAsync( MyRectangle alignedArea, TerrainCardinalResolution resolution, RequiredCornersMergeStatus requiredMerge, TerrainDescriptionElementTypeEnum elementType, Func <MyRectangle, TerrainCardinalResolution, CornersMergeStatus, Task <TerrainDetailElement> > detailElementGenerator ) { CornersMergeStatus statusWeTarget; if (requiredMerge == RequiredCornersMergeStatus.NOT_IMPORTANT) { if (_memoryTerrainCaches[CornersMergeStatus.MERGED][elementType].IsInCache(GenerateInternalToken(alignedArea, resolution, elementType, CornersMergeStatus.MERGED))) { statusWeTarget = CornersMergeStatus.MERGED; } else { statusWeTarget = CornersMergeStatus.NOT_MERGED; } } else if (requiredMerge == RequiredCornersMergeStatus.NOT_MERGED) { statusWeTarget = CornersMergeStatus.NOT_MERGED; } else { statusWeTarget = CornersMergeStatus.MERGED; } if (!_mergingEnabled) { statusWeTarget = CornersMergeStatus.NOT_MERGED; } var internalToken = GenerateInternalToken(alignedArea, resolution, elementType, statusWeTarget); var queryOutput = await _memoryTerrainCaches[statusWeTarget][elementType].TryRetriveAsync(internalToken); if (queryOutput.Asset != null) { return(new TokenizedTerrainDetailElement() { DetailElement = new TerrainDetailElement() { Texture = queryOutput.Asset, Resolution = resolution, DetailArea = alignedArea, CornersMergeStatus = statusWeTarget }, Token = new TerrainDetailElementToken(alignedArea, resolution, elementType, statusWeTarget) }); } else { var detailElement = await detailElementGenerator(alignedArea, resolution, statusWeTarget); var queryOutputCreationObligationToken = queryOutput.CreationObligationToken.Value; await _memoryTerrainCaches[statusWeTarget][elementType].AddAssetAsync( queryOutputCreationObligationToken, internalToken, detailElement.Texture); return(new TokenizedTerrainDetailElement() { DetailElement = new TerrainDetailElement() { Texture = detailElement.Texture, Resolution = resolution, DetailArea = alignedArea, CornersMergeStatus = statusWeTarget }, Token = new TerrainDetailElementToken(alignedArea, resolution, elementType, detailElement.CornersMergeStatus) }); } }
private InternalTerrainDetailElementToken GenerateInternalToken( MyRectangle rect, TerrainCardinalResolution resolution, TerrainDescriptionElementTypeEnum type, CornersMergeStatus mergeStatus) { return(new InternalTerrainDetailElementToken(GenerateQuantisizedQueryRectangle(rect), resolution, type, mergeStatus)); }
public bool HasElementOfType(TerrainDescriptionElementTypeEnum type) { return _output.ContainsKey(type); }
public TerrainDetailElementOutput GetElementOfType(TerrainDescriptionElementTypeEnum type) { return _output[type]; }
public abstract Task <TerrainDetailElementOutput> RetriveTerrainDetailAsync( TerrainDescriptionElementTypeEnum type, MyRectangle queryArea, TerrainCardinalResolution resolution, RequiredCornersMergeStatus cornersMergeStatus);