Esempio n. 1
0
    private void OnEnable()
    {
        dayLightCollider2D = target as DayLightCollider2D;

        InitProperties();

        Undo.undoRedoPerformed += RefreshAll;
    }
Esempio n. 2
0
        static public void Draw(DayLightCollider2D id, Vector2 position)
        {
            if (id.mainShape.shadowType == DayLightCollider2D.ShadowType.None)
            {
                return;
            }

            if (id.mainShape.shadowType == DayLightCollider2D.ShadowType.SpriteOffset)
            {
                return;
            }

            if (id.mainShape.shadowType == DayLightCollider2D.ShadowType.SpriteProjection)
            {
                return;
            }

            if (id.mainShape.height < 0)
            {
                return;
            }

            if (id.InAnyCamera() == false)
            {
                return;
            }

            Color color = new Color(id.shadowTranslucency, id.shadowTranslucency, id.shadowTranslucency, 1);

            GL.Color(color);

            foreach (DayLightColliderShape shape in id.shapes)
            {
                DayLighting.ShadowMesh shadow = shape.shadowMesh;

                if (shadow == null)
                {
                    continue;
                }

                Vector3   pos    = new Vector3(shape.transform2D.position.x + position.x, shape.transform2D.position.y + position.y, 0);
                Matrix4x4 matrix = Matrix4x4.TRS(pos, Quaternion.Euler(0, 0, 0), Vector3.one);

                foreach (MeshObject mesh in shadow.softMeshes)
                {
                    GLExtended.DrawMeshPass(mesh, pos, Vector3.one, 0);
                }

                foreach (MeshObject mesh in shadow.meshes)
                {
                    GLExtended.DrawMeshPass(mesh, pos, Vector3.one, 0);
                }
            }
        }
        static public void Draw(DayLightCollider2D id, Vector2 offset)
        {
            if (id.mainShape.shadowType != DayLightCollider2D.ShadowType.SpriteOffset)
            {
                return;
            }

            if (id.InAnyCamera() == false)
            {
                return;
            }

            Material material = Lighting2D.materials.GetSpriteShadow();

            material.color = Color.black;

            foreach (DayLightColliderShape shape in id.shapes)
            {
                SpriteRenderer spriteRenderer = shape.spriteShape.GetSpriteRenderer();
                if (spriteRenderer == null)
                {
                    continue;
                }

                virtualSpriteRenderer.sprite = spriteRenderer.sprite;
                virtualSpriteRenderer.flipX  = spriteRenderer.flipX;
                virtualSpriteRenderer.flipY  = spriteRenderer.flipY;

                if (virtualSpriteRenderer.sprite == null)
                {
                    continue;
                }

                float x = id.transform.position.x + offset.x;
                float y = id.transform.position.y + offset.y;

                float rot = -Lighting2D.DayLightingSettings.direction * Mathf.Deg2Rad;

                float sunHeight = Lighting2D.DayLightingSettings.height;

                x += Mathf.Cos(rot) * id.mainShape.height * sunHeight;
                y += Mathf.Sin(rot) * id.mainShape.height * sunHeight;

                material.mainTexture = virtualSpriteRenderer.sprite.texture;

                Vector2 scale = new Vector2(id.transform.lossyScale.x, id.transform.lossyScale.y);

                Universal.Sprite.FullRect.Simple.Draw(id.spriteMeshObject, material, virtualSpriteRenderer, new Vector2(x, y), scale, id.transform.rotation.eulerAngles.z);
            }

            material.color = Color.white;
        }
Esempio n. 4
0
  static void CreateDayLightCollider()
  {
      GameObject newGameObject = new GameObject("DayLight Collider 2D");

      newGameObject.AddComponent <PolygonCollider2D>();

      DayLightCollider2D c = newGameObject.AddComponent <DayLightCollider2D>();

      c.mainShape.shadowType = DayLightCollider2D.ShadowType.Collider;
      c.mainShape.maskType   = DayLightCollider2D.MaskType.None;

      newGameObject.transform.position = GetCameraPoint();
  }
Esempio n. 5
0
        private static void DrawColliderShadows(Pass pass)
        {
            for (int i = 0; i < pass.colliderCount; i++)
            {
                DayLightCollider2D id = pass.colliderList[i];

                if (id.shadowLayer != pass.layerId)
                {
                    continue;
                }

                Shadow.Draw(id, pass.offset);
            }
        }
Esempio n. 6
0
        private static void DrawColliderMasks(Pass pass)
        {
            for (int i = 0; i < pass.colliderCount; i++)
            {
                DayLightCollider2D id = pass.colliderList[i];

                if (id.maskLayer != pass.layerId)
                {
                    continue;
                }

                SpriteRenderer2D.Draw(id, pass.offset);
            }
        }
Esempio n. 7
0
        static public void Draw(DayLightCollider2D id, Vector2 offset)
        {
            if (id.InAnyCamera() == false)
            {
                return;
            }

            float dayLightRotation = -(Lighting2D.DayLightingSettings.direction - 180) * Mathf.Deg2Rad;
            float dayLightHeight   = Lighting2D.DayLightingSettings.bumpMap.height;
            float dayLightStrength = Lighting2D.DayLightingSettings.bumpMap.strength;

            switch (id.mainShape.maskType)
            {
            case DayLightCollider2D.MaskType.None:
                return;

            case DayLightCollider2D.MaskType.Sprite:

                Material material = Lighting2D.materials.GetMask();

                foreach (DayLightColliderShape shape in id.shapes)
                {
                    UnityEngine.SpriteRenderer spriteRenderer = shape.spriteShape.GetSpriteRenderer();

                    if (spriteRenderer == null || spriteRenderer.sprite == null)
                    {
                        continue;
                    }

                    Vector2 objectOffset = shape.transform2D.position + offset;

                    material.mainTexture = spriteRenderer.sprite.texture;

                    Universal.Sprite.Draw(id.spriteMeshObject, material, spriteRenderer, objectOffset, shape.transform2D.scale, shape.transform2D.rotation);
                }
                break;

            case DayLightCollider2D.MaskType.BumpedSprite:

                Texture bumpTexture = id.normalMapMode.GetBumpTexture();

                if (bumpTexture == null)
                {
                    return;
                }

                material = Lighting2D.materials.GetBumpedDaySprite();
                material.SetFloat("_LightRZ", -dayLightHeight);
                material.SetTexture("_Bump", bumpTexture);

                foreach (DayLightColliderShape shape in id.shapes)
                {
                    UnityEngine.SpriteRenderer spriteRenderer = shape.spriteShape.GetSpriteRenderer();

                    if (spriteRenderer == null || spriteRenderer.sprite == null)
                    {
                        continue;
                    }

                    float rotation = dayLightRotation - shape.transform2D.rotation * Mathf.Deg2Rad;
                    material.SetFloat("_LightRX", Mathf.Cos(rotation) * dayLightStrength);
                    material.SetFloat("_LightRY", Mathf.Sin(rotation) * dayLightStrength);

                    Vector2 objectOffset = shape.transform2D.position + offset;

                    material.mainTexture = spriteRenderer.sprite.texture;

                    Universal.Sprite.FullRect.Draw(id.spriteMeshObject, material, spriteRenderer, objectOffset, id.transform.lossyScale, shape.transform2D.rotation);
                }

                break;
            }
        }
Esempio n. 8
0
        static public void Draw(Pass pass)
        {
            for (int id = 0; id < pass.sortList.count; id++)
            {
                Sorting.SortObject sortObject = pass.sortList.list[id];

                switch (sortObject.type)
                {
                case Sorting.SortObject.Type.Collider:
                    DayLightCollider2D collider = (DayLightCollider2D)sortObject.lightObject;

                    if (collider != null)
                    {
                        if (collider.InAnyCamera() == false)
                        {
                            continue;
                        }

                        if (pass.drawShadows)
                        {
                            if (collider.mainShape.shadowType == DayLightCollider2D.ShadowType.Collider || collider.mainShape.shadowType == DayLightCollider2D.ShadowType.SpritePhysicsShape)
                            {
                                Lighting2D.materials.GetShadowBlur().SetPass(0);
                                GL.Begin(GL.TRIANGLES);
                                Shadow.Draw(collider, pass.offset);
                                GL.End();
                            }

                            SpriteRendererShadow.Draw(collider, pass.offset);
                        }

                        if (pass.drawMask)
                        {
                            SpriteRenderer2D.Draw(collider, pass.offset);
                        }
                    }

                    break;

                case Sorting.SortObject.Type.TilemapCollider:
                    DayLightTilemapCollider2D tilemap = (DayLightTilemapCollider2D)sortObject.lightObject;

                    if (tilemap != null)
                    {
                        if (pass.drawShadows)
                        {
                            if (tilemap.ShadowsDisabled() == false)
                            {
                                Lighting2D.materials.GetShadowBlur().SetPass(0);
                                GL.Begin(GL.TRIANGLES);
                                Shadow.DrawTilemap(tilemap, pass.offset);
                                GL.End();
                            }
                        }

                        if (pass.drawMask)
                        {
                            if (tilemap.MasksDisabled() == false)
                            {
                                SpriteRenderer2D.DrawTilemap(tilemap, pass.offset);
                            }
                        }
                    }

                    break;
                }
            }
        }
Esempio n. 9
0
    override public void OnInspectorGUI()
    {
        DayLightCollider2D script = target as DayLightCollider2D;

        // Shadow Properties
        EditorGUILayout.PropertyField(shadowType, new GUIContent("Shadow Type"));

        EditorGUI.BeginDisabledGroup(script.mainShape.shadowType == DayLightCollider2D.ShadowType.None);

        shadowLayer.intValue = EditorGUILayout.Popup("Shadow Layer (Day)", shadowLayer.intValue, Lighting2D.Profile.layers.dayLayers.GetNames());

        EditorGUILayout.PropertyField(shadowDistance, new GUIContent("Shadow Distance"));

        if (script.mainShape.shadowType == DayLightCollider2D.ShadowType.SpriteProjection)
        {
            EditorGUILayout.PropertyField(shadowThickness, new GUIContent("Shadow Thickness"));
        }

        EditorGUILayout.PropertyField(shadowTranslucency, new GUIContent("Shadow Translucency"));

        EditorGUI.EndDisabledGroup();

        EditorGUILayout.Space();

        // Mask Properties

        EditorGUILayout.PropertyField(maskType, new GUIContent("Mask Type"));

        EditorGUI.BeginDisabledGroup(script.mainShape.maskType == DayLightCollider2D.MaskType.None);

        maskLayer.intValue = EditorGUILayout.Popup("Mask Layer (Day)", maskLayer.intValue, Lighting2D.Profile.layers.dayLayers.GetNames());

        if (script.mainShape.maskType == DayLightCollider2D.MaskType.BumpedSprite)
        {
            GUIBumpMapMode.DrawDay(script.normalMapMode);
        }

        EditorGUI.EndDisabledGroup();

        EditorGUILayout.Space();

        // Other Properties

        EditorGUILayout.PropertyField(applyToChildren, new GUIContent("Apply To Children"));

        EditorGUILayout.Space();

        serializedObject.ApplyModifiedProperties();

        if (GUILayout.Button("Update"))
        {
            SpriteExtension.PhysicsShapeManager.Clear();

            foreach (Object target in targets)
            {
                DayLightCollider2D daylightCollider2D = target as DayLightCollider2D;

                daylightCollider2D.mainShape.ResetLocal();

                daylightCollider2D.Initialize();
            }
        }

        if (GUI.changed)
        {
            foreach (Object target in targets)
            {
                DayLightCollider2D daylightCollider2D = target as DayLightCollider2D;
                daylightCollider2D.Initialize();

                if (EditorApplication.isPlaying == false)
                {
                    EditorUtility.SetDirty(target);
                }
            }

            if (EditorApplication.isPlaying == false)
            {
                EditorSceneManager.MarkSceneDirty(SceneManager.GetActiveScene());
            }
        }
    }
Esempio n. 10
0
 void RefreshAll()
 {
     DayLightCollider2D.ForceUpdateAll();
 }
Esempio n. 11
0
        public void SortObjects()
        {
            sortList.Reset();

            List <DayLightCollider2D> colliderList = DayLightCollider2D.List;

            for (int id = 0; id < colliderList.Count; id++)
            {
                DayLightCollider2D collider = colliderList[id];

                if (collider.shadowLayer != layerId && collider.maskLayer != layerId)
                {
                    continue;
                }

                switch (layer.sorting)
                {
                case LayerSorting.ZAxisLower:
                    sortList.Add((object)collider, Sorting.SortObject.Type.Collider, -collider.transform.position.z);
                    break;

                case LayerSorting.ZAxisHigher:
                    sortList.Add((object)collider, Sorting.SortObject.Type.Collider, collider.transform.position.z);
                    break;
                }

                switch (layer.sorting)
                {
                case LayerSorting.YAxisLower:
                    sortList.Add((object)collider, Sorting.SortObject.Type.Collider, -collider.transform.position.y);
                    break;

                case LayerSorting.YAxisHigher:
                    sortList.Add((object)collider, Sorting.SortObject.Type.Collider, collider.transform.position.y);
                    break;
                }
            }

            List <DayLightTilemapCollider2D> tilemapColliderList = DayLightTilemapCollider2D.list;

            for (int id = 0; id < tilemapColliderList.Count; id++)
            {
                DayLightTilemapCollider2D tilemap = tilemapColliderList[id];

                if (tilemap.shadowLayer != layerId && tilemap.maskLayer != layerId)
                {
                    continue;
                }

                switch (layer.sorting)
                {
                case LayerSorting.ZAxisLower:
                    sortList.Add((object)tilemap, Sorting.SortObject.Type.TilemapCollider, -tilemap.transform.position.z);
                    break;

                case LayerSorting.ZAxisHigher:
                    sortList.Add((object)tilemap, Sorting.SortObject.Type.TilemapCollider, tilemap.transform.position.z);
                    break;
                }

                switch (layer.sorting)
                {
                case LayerSorting.YAxisLower:
                    sortList.Add((object)tilemap, Sorting.SortObject.Type.TilemapCollider, -tilemap.transform.position.y);
                    break;

                case LayerSorting.YAxisHigher:
                    sortList.Add((object)tilemap, Sorting.SortObject.Type.TilemapCollider, tilemap.transform.position.y);
                    break;
                }
            }

            sortList.Sort();
        }
        static public void DrawProjection(DayLightCollider2D id, Vector2 offset)
        {
            if (id.mainShape.shadowType != DayLightCollider2D.ShadowType.SpriteProjection)
            {
                return;
            }

            if (id.InAnyCamera() == false)
            {
                return;
            }

            Material material = Lighting2D.materials.GetSpriteShadow();

            material.color = Color.black;

            foreach (DayLightColliderShape shape in id.shapes)
            {
                SpriteRenderer spriteRenderer = shape.spriteShape.GetSpriteRenderer();
                if (spriteRenderer == null)
                {
                    continue;
                }

                virtualSpriteRenderer.sprite = spriteRenderer.sprite;
                virtualSpriteRenderer.flipX  = spriteRenderer.flipX;
                virtualSpriteRenderer.flipY  = spriteRenderer.flipY;

                Sprite sprite = virtualSpriteRenderer.sprite;

                if (virtualSpriteRenderer.sprite == null)
                {
                    continue;
                }

                float sunHeight = Lighting2D.DayLightingSettings.height;
                float rot       = Lighting2D.DayLightingSettings.direction * Mathf.Deg2Rad;

                Vector2 pos   = new Vector2(id.transform.position.x + offset.x, id.transform.position.y + offset.y);
                Vector2 scale = new Vector2(id.transform.lossyScale.x, id.transform.lossyScale.y);

                SpriteTransform spriteTransform = new SpriteTransform(virtualSpriteRenderer, pos, scale, id.transform.rotation.eulerAngles.z);

                Rect uv = spriteTransform.uv;

                float pivotY = (float)sprite.pivot.y / sprite.texture.height;
                pivotY = uv.y + pivotY;

                float pivotX = (float)sprite.pivot.x / sprite.texture.width;


                Pair2 pair = Pair2.Zero();
                pair.A = pos + pair.A.Push(-rot + Mathf.PI / 2, id.shadowThickness);
                pair.B = pos + pair.B.Push(-rot - Mathf.PI / 2, id.shadowThickness);

                if (Lighting2D.DayLightingSettings.direction < 180)
                {
                    float uvx = uv.x;
                    uv.x     = uv.width;
                    uv.width = uvx;
                }

                Vector2 v1 = pair.A;
                Vector2 v2 = pair.A;
                Vector2 v3 = pair.B;
                Vector2 v4 = pair.B;

                v2 = v2.Push(-rot, id.shadowDistance * sunHeight);
                v3 = v3.Push(-rot, id.shadowDistance * sunHeight);

                material.mainTexture = virtualSpriteRenderer.sprite.texture;

                material.SetPass(0);

                GL.Begin(GL.QUADS);

                GL.Color(GLExtended.color);

                GL.TexCoord3(uv.x, pivotY, 0);
                GL.Vertex3(v1.x, v1.y, 0);

                GL.TexCoord3(uv.x, uv.height, 0);
                GL.Vertex3(v2.x, v2.y, 0);

                GL.TexCoord3(uv.width, uv.height, 0);
                GL.Vertex3(v3.x, v3.y, 0);

                GL.TexCoord3(uv.width, pivotY, 0);
                GL.Vertex3(v4.x, v4.y, 0);

                GL.End();
            }

            material.color = Color.white;
        }