public static void CreateWaterRendererBlend( IClientSceneObject sceneObject, IProtoTileWater protoTile, ClientTileBlendHelper.BlendLayer blendLayer) { Instance.CreateWaterRendererBlendInternal(sceneObject, protoTile, blendLayer); }
private void CreateWaterRendererBlendInternal( IClientSceneObject sceneObject, IProtoTileWater protoTileWater, ClientTileBlendHelper.BlendLayer blendLayer) { var renderer = Client.Rendering.CreateSpriteRenderer( sceneObject, protoTileWater.UnderwaterGroundTextureAtlas, drawOrder: DrawOrder.GroundBlend); renderer.RenderingMaterial = protoTileWater.ClientGetWaterBlendMaterial(blendLayer); renderer.SortByWorldPosition = false; renderer.Size = ScriptingConstants.TileSizeRenderingVirtualSize; }
public RenderingMaterial ClientGetWaterBlendMaterial(ClientTileBlendHelper.BlendLayer blendLayer) { var cacheKey = blendLayer.BlendSides; if (this.cachedBlendMaskMaterials.TryGetValue(cacheKey, out var material)) { return(material); } var masks = new List <TileMaskSet>(); ClientTileBlendHelper.CalculateMasks(blendLayer.BlendSides, masks); masks = ClientTileBlendHelper.DetectMasksInnerCorners(masks); Api.Assert(masks.Count > 0, "No masks?!"); var effect = EffectForMaskCounts[masks.Count - 1]; material = RenderingMaterial.Create(effect); this.SetupMaterial(material); var effectParameters = material.EffectParameters; effectParameters.Set("MaskTextureArray", BlendMaskTextureAtlas); for (var i = 0; i < masks.Count; i++) { var mask = masks[i]; var flip = (mask.IsFlipHorizontally ? 1f : 0, mask.IsFlipVertically ? 1f : 0); effectParameters.Set("Mask" + (i + 1) + "ArraySlice", mask.TextureMaskArraySlice) .Set("Mask" + (i + 1) + "Flip", flip); } material.EffectResource = effect; this.cachedBlendMaskMaterials[cacheKey] = material; this.allMaterials.Add(material); return(material); }