예제 #1
0
        public static void Mask(Light2D light, LightCollider2D id, Material material, LayerSetting layerSetting)
        {
            if (id.InLight(light) == false)
            {
                return;
            }

            foreach (LightColliderShape shape in id.shapes)
            {
                SkinnedMeshRenderer skinnedMeshRenderer = shape.skinnedMeshShape.GetSkinnedMeshRenderer();

                if (skinnedMeshRenderer == null)
                {
                    return;
                }

                List <MeshObject> meshObject = shape.GetMeshes();

                if (meshObject == null)
                {
                    return;
                }

                if (skinnedMeshRenderer.sharedMaterial != null)
                {
                    material.mainTexture = skinnedMeshRenderer.sharedMaterial.mainTexture;
                }
                else
                {
                    material.mainTexture = null;
                }

                Vector2 position = shape.transform2D.position - light.transform2D.position;

                Vector2 pivotPosition = shape.GetPivotPoint() - light.transform2D.position;
                material.color = LayerSettingColor.Get(pivotPosition, layerSetting, id.maskEffect, id.maskTranslucency);

                material.SetPass(0);

                GLExtended.DrawMesh(meshObject, position, id.mainShape.transform2D.scale, shape.transform2D.rotation);

                material.mainTexture = null;
            }
        }
예제 #2
0
        public static void Draw(Light2D light, Vector2 position, Material material, float z)
        {
            float rotation = light.transform.rotation.eulerAngles.z + (Mathf.PI / 4) * Mathf.Rad2Deg;
            float size     = light.size;

            size = Mathf.Sqrt(((size * size) + (size * size)));

            Vector3    matrixPosition = new Vector3(position.x, position.y, z);
            Quaternion matrixRotation = Quaternion.Euler(0, 0, rotation);
            Vector3    matrixScale    = new Vector3(size, size, 1);

            if (light.IsPixelPerfect())
            {
                GLExtended.DrawMesh(GetMeshPixelPerfect(light), matrixPosition, matrixScale, rotation);
            }
            else
            {
                GLExtended.DrawMesh(GetMesh(), matrixPosition, matrixScale, rotation);
            }
        }
예제 #3
0
        public static void Draw(LightRoom2D id, Camera camera)
        {
            Material material = Lighting2D.materials.GetMask();

            Vector2 position;

            Vector2 offset = -camera.transform.position;

            switch (id.shape.type)
            {
            case LightRoom2D.RoomType.Collider:
                List <MeshObject> meshObjects = id.shape.GetMeshes();

                if (meshObjects == null)
                {
                    return;
                }

                //Vector3 matrixPosition = new Vector3(id.transform.position.x, id.transform.position.y, z);
                //Quaternion matrixRotation = Quaternion.Euler(0, 0, id.transform.rotation.eulerAngles.z);
                //Vector3 matrixScale = new Vector3(id.transform.lossyScale.x, id.transform.lossyScale.y, 1);
                //Graphics.DrawMeshNow(meshObject.mesh, Matrix4x4.TRS(matrixPosition, matrixRotation, matrixScale));

                material.color       = id.color;
                material.mainTexture = null;
                material.SetPass(0);

                position  = id.transform.position;
                position += offset;

                GLExtended.DrawMesh(meshObjects, position, id.transform.lossyScale, id.transform.rotation.eulerAngles.z);

                break;

            case LightRoom2D.RoomType.Sprite:
                UnityEngine.SpriteRenderer spriteRenderer = id.shape.spriteShape.GetSpriteRenderer();

                if (spriteRenderer == null)
                {
                    return;
                }

                Sprite sprite = spriteRenderer.sprite;;
                if (sprite == null)
                {
                    return;
                }


                material.mainTexture = sprite.texture;
                material.color       = id.color;

                position  = id.transform.position;
                position += offset;

                Rendering.Universal.Sprite.FullRect.Draw(id.spriteMeshObject, material, spriteRenderer, position, id.transform.lossyScale, id.transform.eulerAngles.z);

                break;
            }

            material.color       = Color.white;
            material.mainTexture = null;
        }
예제 #4
0
 static public void DrawPass(SpriteMeshObject spriteMeshObject, SpriteRenderer spriteRenderer, Vector2 pos, Vector2 size, float rotation)
 {
     GLExtended.DrawMesh(spriteMeshObject.GetTiledMesh().GetMesh(spriteRenderer), pos, size, rotation);
 }
예제 #5
0
 static public void Draw(SpriteMeshObject spriteMeshObject, Material material, SpriteRenderer spriteRenderer, Vector2 pos, Vector2 size, float rotation)
 {
     material.SetPass(0);
     GLExtended.DrawMesh(spriteMeshObject.GetTiledMesh().GetMesh(spriteRenderer), pos, size, rotation);
 }
예제 #6
0
        public static void MaskNormalMap(Light2D light, LightCollider2D id, Material material, LayerSetting layerSetting)
        {
            if (id.InLight(light) == false)
            {
                return;
            }

            Texture normalTexture = id.bumpMapMode.GetBumpTexture();

            if (normalTexture == null)
            {
                return;
            }

            float rotation;

            material.SetTexture("_Bump", normalTexture);

            foreach (LightColliderShape shape in id.shapes)
            {
                MeshRenderer meshRenderer = id.mainShape.meshShape.GetMeshRenderer();

                if (meshRenderer == null)
                {
                    return;
                }

                List <MeshObject> meshObjects = id.mainShape.GetMeshes();

                if (meshObjects == null)
                {
                    return;
                }

                if (meshRenderer.sharedMaterial != null)
                {
                    material.mainTexture = meshRenderer.sharedMaterial.mainTexture;
                }
                else
                {
                    material.mainTexture = null;
                }

                Vector2 position = shape.transform2D.position - light.transform2D.position;

                Vector2 pivotPosition = shape.GetPivotPoint() - light.transform2D.position;
                material.color = LayerSettingColor.Get(pivotPosition, layerSetting, id.maskEffect, id.maskTranslucency);

                float color = material.color.r;

                switch (id.bumpMapMode.type)
                {
                case NormalMapType.ObjectToLight:
                    rotation  = Mathf.Atan2(light.transform2D.position.y - shape.transform2D.position.y, light.transform2D.position.x - shape.transform2D.position.x);
                    rotation -= Mathf.Deg2Rad * (shape.transform2D.rotation);

                    material.SetFloat("_LightRX", Mathf.Cos(rotation) * 2);
                    material.SetFloat("_LightRY", Mathf.Sin(rotation) * 2);
                    material.SetFloat("_LightColor", color);

                    break;

                case NormalMapType.PixelToLight:
                    material.SetFloat("_LightColor", color);

                    rotation = shape.transform2D.rotation * Mathf.Deg2Rad;

                    Vector2 sc = shape.transform2D.scale;
                    sc = sc.normalized;

                    material.SetFloat("_LightX", Mathf.Cos(rotation) * sc.x);
                    material.SetFloat("_LightY", Mathf.Cos(rotation) * sc.y);

                    material.SetFloat("_Depth", id.bumpMapMode.depth);

                    if (id.bumpMapMode.invertX)
                    {
                        material.SetFloat("_InvertX", -1);
                    }
                    else
                    {
                        material.SetFloat("_InvertX", 1);
                    }

                    if (id.bumpMapMode.invertY)
                    {
                        material.SetFloat("_InvertY", -1);
                    }
                    else
                    {
                        material.SetFloat("_InvertY", 1);
                    }

                    break;
                }

                material.SetPass(0);

                GLExtended.DrawMesh(meshObjects, position, id.mainShape.transform2D.scale, shape.transform2D.rotation);

                material.mainTexture = null;
            }
        }