Exemplo n.º 1
0
 public static void CreateWaterRendererBlend(
     IClientSceneObject sceneObject,
     IProtoTileWater protoTile,
     ClientTileBlendHelper.BlendLayer blendLayer)
 {
     Instance.CreateWaterRendererBlendInternal(sceneObject, protoTile, blendLayer);
 }
Exemplo n.º 2
0
        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;
        }
Exemplo n.º 3
0
        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);
        }