private RenderingMaterial GetBlendMaterial( BlendLayers blendLayer) { var cacheKey = blendLayer.TileBlendSides; if (cacheKey == None) { throw new Exception(); } if (this.cachedBlendMaskMaterials.TryGetValue(cacheKey, out var material)) { return(material); } material = ClientTileBlendHelper.CreateRenderingMaterial(cacheKey, this.maskTexture); this.cachedBlendMaskMaterials[cacheKey] = material; return(material); }
private BlendLayers GetBlendLayers(Tile tile) { if (this.HasFarmPlot(tile)) { // don't blend such object - tile contains farm return(BlendLayers.Empty); } var blendLayers = new BlendLayers(); var tileLeft = tile.NeighborTileLeft; var tileUp = tile.NeighborTileUp; var tileRight = tile.NeighborTileRight; var tileDown = tile.NeighborTileDown; var tileUpLeft = tile.GetNeighborTile(-1, 1); var tileUpRight = tile.GetNeighborTile(1, 1); var tileDownLeft = tile.GetNeighborTile(-1, -1); var tileDownRight = tile.GetNeighborTile(1, -1); var blendSides = None; void TryBlendWith(Tile targetTile, TileBlendSides side) { if (this.HasFarmPlot(targetTile)) { blendSides |= side; } } TryBlendWith(tileLeft, Left); TryBlendWith(tileUp, Up); TryBlendWith(tileRight, Right); TryBlendWith(tileDown, Down); TryBlendWith(tileUpLeft, UpLeft); TryBlendWith(tileUpRight, UpRight); TryBlendWith(tileDownLeft, DownLeft); TryBlendWith(tileDownRight, DownRight); blendLayers.TileBlendSides = blendSides; return(blendLayers); }