Пример #1
0
    static void UpdateCollisions(DayLightTilemapCollider2D script)
    {
        if (GUILayout.Button("Update"))
        {
            // PhysicsShapeManager.Clear();

            script.Initialize();

            //LightingSource2D.ForceUpdateAll();
            LightingManager2D.ForceUpdate();
        }
    }
Пример #2
0
        private static void DrawTilemapColliderShadows(Pass pass)
        {
            for (int i = 0; i < pass.tilemapColliderCount; i++)
            {
                DayLightTilemapCollider2D id = pass.tilemapColliderList[i];

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

                Shadow.DrawTilemap(id, pass.offset);
            }
        }
Пример #3
0
        private static void DrawTilemapColliderMasks(Pass pass)
        {
            for (int i = 0; i < pass.tilemapColliderCount; i++)
            {
                DayLightTilemapCollider2D id = pass.tilemapColliderList[i];

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

                SpriteRenderer2D.DrawTilemap(id, pass.offset);
            }
        }
Пример #4
0
        static public void DrawTilemap(DayLightTilemapCollider2D id, Vector2 offset)
        {
            //if (id.InAnyCamera() == false) {
            //	return;
            //}

            if (id.rectangle.maskType != LightTilemapCollider.MaskType.Sprite)
            {
                return;
            }

            LightTilemapCollider.Base tilemap = id.GetCurrentTilemap();

            Vector2 scale    = tilemap.TileWorldScale();
            float   rotation = id.transform.eulerAngles.z;

            Material material = Lighting2D.materials.GetMask();

            foreach (LightTile tile in id.rectangle.mapTiles)
            {
                if (tile.GetOriginalSprite() == null)
                {
                    return;
                }

                tile.UpdateTransform(tilemap);

                Vector2 tilePosition = tile.GetWorldPosition(tilemap);

                tilePosition += offset;

                // if (tile.NotInRange(tilePosition, light.size)) {
                //   continue;
                //}

                virtualSpriteRenderer.sprite = tile.GetOriginalSprite();

                material.color = Color.white;

                material.mainTexture = virtualSpriteRenderer.sprite.texture;

                Universal.Sprite.FullRect.Simple.Draw(tile.spriteMeshObject, material, virtualSpriteRenderer, tilePosition, scale, rotation);

                material.mainTexture = null;
            }
        }
Пример #5
0
        static public void DrawTilemap(DayLightTilemapCollider2D id, Vector2 position)
        {
            //if (id.mainShape.shadowType == DayLightCollider2D.shadowType.None) {
            //    return;
            //}

            // if (id.mainShape.shadowType == DayLightCollider2D.shadowType.Sprite) {
            //    return;
            //}

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

            //if (id.InAnyCamera() == false) {
            //     continue;
            //}

            // shadowTranslucency
            GL.Color(Color.black);

            foreach (DayLightingTile dayTile in id.dayTiles)
            {
                DayLighting.TilemapShadowMesh shadow = dayTile.shadowMesh;

                if (shadow == null)
                {
                    continue;
                }

                Vector3   pos    = new Vector3(position.x, 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);
                }
            }
        }
Пример #6
0
    public void Update(DayLightTilemapCollider2D id)
    {
        Transform transform = id.transform;

        moved = false;

        if (sunDirection != Lighting2D.DayLightingSettings.direction)
        {
            sunDirection = Lighting2D.DayLightingSettings.direction;

            moved = true;
        }

        if (sunHeight != Lighting2D.DayLightingSettings.height)
        {
            sunHeight = Lighting2D.DayLightingSettings.height;

            moved = true;
        }

        if (sunSoftness != Lighting2D.DayLightingSettings.softness.intensity)
        {
            sunSoftness = Lighting2D.DayLightingSettings.softness.intensity;

            moved = true;
        }

        if (height != id.height)
        {
            height = id.height;

            moved = true;
        }

        // Unnecesary check
        if (height < 0.01f)
        {
            height = 0.01f;
        }
    }
Пример #7
0
        public bool Setup(LightingLayerSetting slayer, Camera camera)
        {
            if (slayer.layer < 0)
            {
                return(false);
            }

            layerId = (int)slayer.layer;
            layer   = slayer;

            this.camera = camera;
            offset      = -camera.transform.position;

            colliderList  = DayLightCollider2D.List;
            colliderCount = colliderList.Count;

            tilemapColliderList  = DayLightTilemapCollider2D.GetList();
            tilemapColliderCount = tilemapColliderList.Count;

            drawShadows = slayer.type != LayerType.MaskOnly;
            drawMask    = slayer.type != LayerType.ShadowsOnly;

            return(true);
        }
Пример #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;
                }
            }
        }
Пример #9
0
    override public void OnInspectorGUI()
    {
        DayLightTilemapCollider2D script = target as DayLightTilemapCollider2D;

        script.tilemapType = (MapType)EditorGUILayout.EnumPopup("Tilemap Type", script.tilemapType);

        EditorGUILayout.Space();

        switch (script.tilemapType)
        {
        case MapType.UnityRectangle:
            script.rectangle.shadowType = (LightTilemapCollider.ShadowType)EditorGUILayout.EnumPopup("Shadow Type", script.rectangle.shadowType);

            EditorGUI.BeginDisabledGroup(script.rectangle.shadowType == LightTilemapCollider.ShadowType.None);

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

            switch (script.rectangle.shadowType)
            {
            case LightTilemapCollider.ShadowType.Grid:
            case LightTilemapCollider.ShadowType.SpritePhysicsShape:
                script.shadowTileType = (ShadowTileType)EditorGUILayout.EnumPopup("Shadow Tile Type", script.shadowTileType);
                break;
            }

            script.height = EditorGUILayout.FloatField("Shadow Distance", script.height);

            if (script.height < 0.1f)
            {
                script.height = 0.1f;
            }


            EditorGUI.EndDisabledGroup();

            EditorGUILayout.Space();

            script.rectangle.maskType = (LightTilemapCollider.MaskType)EditorGUILayout.EnumPopup("Mask Type", script.rectangle.maskType);



            EditorGUI.BeginDisabledGroup(script.rectangle.maskType == LightTilemapCollider.MaskType.None);

            //if (script.rectangle.maskType == LightTilemapCollider.Rectangle.MaskType.BumpedSprite) {
            //	GUIBumpMapMode.Draw(script.bumpMapMode);
            //}

            EditorGUI.EndDisabledGroup();

            break;

        case MapType.UnityIsometric:
            break;


        case MapType.UnityHexagon:
            break;

        case MapType.SuperTilemapEditor:
            script.superTilemapEditor.shadowTypeSTE = (SuperTilemapEditorSupport.TilemapCollider2D.ShadowType)EditorGUILayout.EnumPopup("Shadow Type", script.superTilemapEditor.shadowTypeSTE);

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

            EditorGUILayout.Space();

            script.superTilemapEditor.maskTypeSTE = (SuperTilemapEditorSupport.TilemapCollider2D.MaskType)EditorGUILayout.EnumPopup("Mask Type", script.superTilemapEditor.maskTypeSTE);

            EditorGUI.BeginDisabledGroup(script.superTilemapEditor.maskTypeSTE == SuperTilemapEditorSupport.TilemapCollider2D.MaskType.None);

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

            if (script.superTilemapEditor.maskTypeSTE == SuperTilemapEditorSupport.TilemapCollider2D.MaskType.BumpedSprite)
            {
                GUIBumpMapMode.Draw(serializedObject, script);
            }


            EditorGUI.EndDisabledGroup();
            break;
        }

        EditorGUILayout.Space();

        UpdateCollisions(script);

        if (GUI.changed)
        {
            script.Initialize();

            if (EditorApplication.isPlaying == false)
            {
                EditorUtility.SetDirty(target);
                EditorSceneManager.MarkSceneDirty(SceneManager.GetActiveScene());
            }
        }
    }
Пример #10
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();
        }