Beispiel #1
0
    private void DrawGizmos()
    {
        if (isActiveAndEnabled == false)
        {
            return;
        }

        Gizmos.color = new Color(1f, 0.5f, 0.25f);

        LightTilemapCollider.Base tilemap = GetCurrentTilemap();

        foreach (DayLightingTile dayTile in dayTiles)
        {
            GizmosHelper.DrawPolygons(dayTile.polygons, transform.position);
        }

        Gizmos.color = new Color(0, 1f, 1f);

        switch (Lighting2D.ProjectSettings.editorView.drawGizmosBounds)
        {
        case EditorGizmosBounds.Rectangle:
            GizmosHelper.DrawRect(transform.position, tilemap.GetRect());
            break;
        }
    }
    private void DrawGizmos()
    {
        if (isActiveAndEnabled == false)
        {
            return;
        }

        Gizmos.color = new Color(1f, 0.5f, 0.25f);

        LightTilemapCollider.Base tilemap = GetCurrentTilemap();

        foreach (LightTile tile in GetTileList())
        {
            GizmosHelper.DrawPolygons(tile.GetWorldPolygons(tilemap), transform.position);
        }

        // GizmosHelper.DrawPolygons(superTilemapEditor.GetWorldColliders(), transform.position);

        Gizmos.color = new Color(0, 1f, 1f);

        switch (Lighting2D.ProjectSettings.editorView.drawGizmosBounds)
        {
        case EditorGizmosBounds.Rectangle:
            GizmosHelper.DrawRect(transform.position, GetCurrentTilemap().GetRect());
            break;
        }
    }
Beispiel #3
0
        static public void Grid(Light2D light, LightTilemapCollider2D id)
        {
            if (id.superTilemapEditor.maskTypeSTE != SuperTilemapEditorSupport.TilemapCollider2D.MaskType.Grid)
            {
                return;
            }

            Vector2    lightPosition = -light.transform.position;
            MeshObject tileMesh      = LightingTile.Rectangle.GetStaticMesh();

            GL.Color(Color.white);

            LightTilemapCollider.Base tilemapBase = id.GetCurrentTilemap();

            foreach (LightingTile tile in id.superTilemapEditor.mapTiles)
            {
                Vector2 tilePosition = tile.GetWorldPosition(tilemapBase);
                tilePosition += lightPosition;

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

                GLExtended.DrawMeshPass(tileMesh, tilePosition, tile.worldScale, tile.worldRotation);
            }
        }
Beispiel #4
0
    public List <Polygon2> GetWorldPolygons(LightTilemapCollider.Base tilemap)
    {
        if (worldPolygons == null)
        {
            List <Polygon2> localPolygons = GetLocalPolygons(tilemap);
            if (worldPolygonsCache == null)
            {
                worldPolygons      = new List <Polygon2>();
                worldPolygonsCache = worldPolygons;

                UpdateTransform(tilemap);

                foreach (Polygon2 polygon in localPolygons)
                {
                    Polygon2 worldPolygon = polygon.Copy();

                    if (scale != Vector2.one)
                    {
                        worldPolygon.ToScaleSelf(scale);
                    }

                    worldPolygon.ToScaleSelf(worldScale);
                    worldPolygon.ToRotationSelf((tilemap.transform.eulerAngles.z + rotation) * Mathf.Deg2Rad);
                    worldPolygon.ToOffsetSelf(worldPosition.Value);

                    worldPolygons.Add(worldPolygon);
                }
            }
            else
            {
                worldPolygons = worldPolygonsCache;

                UpdateTransform(tilemap);

                for (int i = 0; i < localPolygons.Count; i++)
                {
                    Polygon2 polygon      = localPolygons[i];
                    Polygon2 worldPolygon = worldPolygons[i];

                    for (int j = 0; j < polygon.points.Length; j++)
                    {
                        worldPolygon.points[j].x = polygon.points[j].x;
                        worldPolygon.points[j].y = polygon.points[j].y;
                    }

                    if (scale != Vector2.one)
                    {
                        worldPolygon.ToScaleSelf(scale);
                    }

                    worldPolygon.ToScaleSelf(worldScale);
                    worldPolygon.ToRotationSelf(tilemap.transform.eulerAngles.z * Mathf.Deg2Rad);
                    worldPolygon.ToOffsetSelf(worldPosition.Value);
                }
            }
        }

        return(worldPolygons);
    }
Beispiel #5
0
            public static void Draw(Camera camera, LightTilemapRoom2D id, Material material)
            {
                Vector2 cameraPosition = -camera.transform.position;

                float cameraRadius = CameraTransform.GetRadius(camera);

                LightTilemapCollider.Base tilemapCollider = id.GetCurrentTilemap();

                material.mainTexture = null;

                Texture2D currentTexture = null;

                GL.Begin(GL.QUADS);

                int count = tilemapCollider.chunkManager.GetTiles(CameraTransform.GetWorldRect(camera));

                for (int i = 0; i < count; i++)
                {
                    LightTile tile = tilemapCollider.chunkManager.display[i];
                    if (tile.GetOriginalSprite() == null)
                    {
                        continue;
                    }

                    Vector2 tilePosition = tile.GetWorldPosition(tilemapCollider);

                    tilePosition += cameraPosition;

                    if (tile.NotInRange(tilePosition, cameraRadius))
                    {
                        continue;
                    }

                    spriteRenderer.sprite = tile.GetOriginalSprite();

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

                    if (currentTexture != spriteRenderer.sprite.texture)
                    {
                        currentTexture       = spriteRenderer.sprite.texture;
                        material.mainTexture = currentTexture;

                        material.SetPass(0);
                    }

                    Universal.Sprite.FullRect.Simple.DrawPass(tile.spriteMeshObject, spriteRenderer, tilePosition, tile.worldScale, tile.worldRotation);
                }

                GL.End();

                material.mainTexture = null;
            }
Beispiel #6
0
    public void UpdateTransform(LightTilemapCollider.Base tilemap)
    {
        if (worldPosition != null)
        {
            return;
        }

        worldPosition = tilemap.TileWorldPosition(this);
        worldRotation = tilemap.TileWorldRotation(this);
        worldScale    = tilemap.TileWorldScale();
    }
Beispiel #7
0
    // Remove
    public Vector2 GetWorldPosition(LightTilemapCollider.Base tilemap)
    {
        if (worldPosition == null)
        {
            worldPosition = tilemap.TileWorldPosition(this);
            worldRotation = tilemap.TileWorldRotation(this);
            worldScale    = tilemap.TileWorldScale();
        }

        return(worldPosition.Value);
    }
Beispiel #8
0
        public void AddTiles(LightTilemapCollider2D id)
        {
            Vector2 lightPosition = -pass.light.transform2D.position;

            LightTilemapCollider.Base tilemapBase = id.GetCurrentTilemap();

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

                Vector2 tilePosition = tile.GetWorldPosition(tilemapBase);

                if (tile.NotInRange(tilePosition + lightPosition, pass.light.size))
                {
                    continue;
                }

                switch (pass.layer.sorting)
                {
                case LightLayerSorting.SortingLayerAndOrder:
                    sortList.Add(id, tile, id.lightingTransform.sortingOrder + id.lightingTransform.sortingLayerID * 1000);
                    break;

                case LightLayerSorting.ZAxisLower:
                    sortList.Add(id, tile, -id.transform.position.z);
                    break;

                case LightLayerSorting.ZAxisHigher:
                    sortList.Add(id, tile, id.transform.position.z);
                    break;

                case LightLayerSorting.YAxisLower:
                    sortList.Add(id, tile, -tilePosition.y);
                    break;

                case LightLayerSorting.YAxisHigher:
                    sortList.Add(id, tile, tilePosition.y);
                    break;

                case LightLayerSorting.DistanceToLight:
                    sortList.Add(id, tile, -Vector2.Distance(tilePosition, pass.light.transform.position));
                    break;

                case LightLayerSorting.YDistanceToLight:
                    sortList.Add(id, tile, -Mathf.Abs(tilePosition.y - pass.light.transform.position.y));
                    break;
                }
            }
        }
Beispiel #9
0
    public List <Polygon2> GetLocalPolygons(LightTilemapCollider.Base tilemap)
    {
        if (occluded == true)
        {
            localPolygons = new List <Polygon2>();
            return(localPolygons);
        }

        if (localPolygons == null)
        {
            if (tilemap.IsPhysicsShape())
            {
                List <Polygon2> customShapePolygons = GetPhysicsShapePolygons();

                if (customShapePolygons.Count > 0)
                {
                    localPolygons = customShapePolygons;
                }
                else
                {
                    localPolygons = new List <Polygon2>();
                }
            }
            else
            {
                localPolygons = new List <Polygon2>();

                switch (tilemap.TilemapType())
                {
                case MapType.UnityRectangle:
                case MapType.SuperTilemapEditor:

                    localPolygons.Add(Polygon2.CreateRect(Vector2.one));

                    break;

                case MapType.UnityIsometric:

                    localPolygons.Add(Polygon2.CreateIsometric(new Vector2(1, 0.5f)));

                    break;

                case MapType.UnityHexagon:

                    localPolygons.Add(Polygon2.CreateHexagon(new Vector2(1, 0.5f)));

                    break;
                }
            }
        }
        return(localPolygons);
    }
Beispiel #10
0
    public static MeshObject GetStaticMesh(LightTilemapCollider.Base tilemap)
    {
        switch (tilemap.TilemapType())
        {
        case MapType.UnityRectangle:
            return(Rectangle.GetStaticMesh());

        case MapType.UnityIsometric:
            return(Isometric.GetStaticMesh());

        case MapType.UnityHexagon:
            return(Hexagon.GetStaticMesh());
        }

        return(null);
    }
Beispiel #11
0
            static public void BumpedSprite(Light2D light, LightTilemapCollider2D id, Material material)
            {
                Texture bumpTexture = id.bumpMapMode.GetBumpTexture();

                if (bumpTexture == null)
                {
                    return;
                }

                material.SetTexture("_Bump", bumpTexture);

                Vector2 lightPosition = -light.transform.position;

                LightTilemapCollider.Base tilemapCollider = id.GetCurrentTilemap();

                if (id.superTilemapEditor.tilemap != null)
                {
                    if (id.superTilemapEditor.tilemap.Tileset != null)
                    {
                        material.mainTexture = id.superTilemapEditor.tilemap.Tileset.AtlasTexture;
                    }
                }

                material.SetPass(0);
                GL.Begin(GL.QUADS);

                foreach (LightingTile tile in id.superTilemapEditor.mapTiles)
                {
                    tile.UpdateTransform(tilemapCollider);

                    Vector2 tilePosition = tile.GetWorldPosition(tilemapCollider);
                    tilePosition += lightPosition;

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

                    Vector2 scale = tile.worldScale * 0.5f * tile.scale;

                    Rendering.Universal.Texture.DrawPassSTE(tilePosition, scale, tile.uv, tile.worldRotation, 0);
                }

                GL.End();

                material.mainTexture = null;
            }
Beispiel #12
0
            private static void DrawTilemapCollider(Pass pass)
            {
                #if UNITY_2017_4_OR_NEWER
                for (int id = 0; id < pass.tilemapList.Count; id++)
                {
                    LightTilemapCollider2D tilemap = pass.tilemapList[id];

                    if (tilemap.maskLayer != pass.layerID)
                    {
                        continue;
                    }

                    if (tilemap.MasksDisabled())
                    {
                        continue;
                    }

                    // Tilemap In Range
                    switch (tilemap.mapType)
                    {
                    case MapType.UnityRectangle:
                    case MapType.UnityIsometric:
                    case MapType.UnityHexagon:

                        LightTilemapCollider.Base baseTilemap = tilemap.GetCurrentTilemap();

                        switch (baseTilemap.maskType)
                        {
                        case MaskType.Grid:
                        case MaskType.SpritePhysicsShape:
                            UnityTilemap.MaskShape(pass.light, tilemap, pass.layer);
                            break;
                        }

                        break;

                    case MapType.SuperTilemapEditor:
                        SuperTilemapEditorSupport.RenderingColliderMask.Grid(pass.light, tilemap);
                        break;
                    }
                }
                #endif
            }
Beispiel #13
0
            static public void Sprite(Light2D light, LightTilemapCollider2D id, Material material)
            {
                Vector2 lightPosition = -light.transform.position;

                LightTilemapCollider.Base tilemapCollider = id.GetCurrentTilemap();

                if (id.superTilemapEditor.tilemap != null)
                {
                    if (id.superTilemapEditor.tilemap.Tileset != null)
                    {
                        material.mainTexture = id.superTilemapEditor.tilemap.Tileset.AtlasTexture;
                    }
                }

                material.SetPass(0);
                GL.Begin(GL.QUADS);

                int count = tilemapCollider.chunkManager.GetTiles(light.GetWorldRect());

                for (int i = 0; i < count; i++)
                {
                    LightTile tile = tilemapCollider.chunkManager.display[i];

                    tile.UpdateTransform(tilemapCollider);

                    Vector2 tilePosition = tile.GetWorldPosition(tilemapCollider);
                    tilePosition += lightPosition;

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

                    Vector2 scale = tile.worldScale * 0.5f * tile.scale;

                    Rendering.Universal.Texture.DrawPassSTE(tilePosition, scale, tile.uv, tile.worldRotation, 0);
                }

                GL.End();

                material.mainTexture = null;
            }
Beispiel #14
0
        static public void Grid(Light2D light, LightTilemapCollider2D id)
        {
            Vector2 lightPosition = -light.transform.position;

            LightTilemapCollider.Base tilemapCollider = id.GetCurrentTilemap();

            int count = tilemapCollider.chunkManager.GetTiles(light.GetWorldRect());

            for (int i = 0; i < count; i++)
            {
                LightingTile tile = tilemapCollider.chunkManager.display[i];

                List <Polygon2> polygons     = tile.GetWorldPolygons(tilemapCollider);
                Vector2         tilePosition = tile.GetWorldPosition(tilemapCollider);

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

                Rendering.Light.ShadowEngine.Draw(polygons, 0, 0);
            }
        }
Beispiel #15
0
        static public void Draw(Light2D light, LightTilemapCollider2D id, float lightSizeSquared)
        {
            Vector2 lightPosition = -light.transform.position;

            LightTilemapCollider.Base tilemapCollider = id.GetCurrentTilemap();

            int count = tilemapCollider.chunkManager.GetTiles(light.GetWorldRect());

            for (int i = 0; i < count; i++)
            {
                LightTile tile = tilemapCollider.chunkManager.display[i];

                switch (id.shadowTileType)
                {
                case ShadowTileType.AllTiles:
                    break;

                case ShadowTileType.ColliderOnly:
                    if (tile.colliderType == UnityEngine.Tilemaps.Tile.ColliderType.None)
                    {
                        continue;
                    }
                    break;
                }

                List <Polygon2> polygons     = tile.GetWorldPolygons(tilemapCollider);
                Vector2         tilePosition = tile.GetWorldPosition(tilemapCollider);

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

                ShadowEngine.Draw(polygons, 0, 0);
            }
        }
Beispiel #16
0
            private static void DrawTilemapCollider(Pass pass)
            {
                #if UNITY_2017_4_OR_NEWER
                for (int id = 0; id < pass.tilemapList.Count; id++)
                {
                    LightTilemapCollider2D tilemap = pass.tilemapList[id];

                    if (tilemap.shadowLayer != pass.layerID)
                    {
                        continue;
                    }

                    bool shadowsDisabled = tilemap.ShadowsDisabled();
                    if (shadowsDisabled)
                    {
                        continue;
                    }

                    //if (tilemap.IsNotInRange(pass.light)) {
                    //   continue;
                    //}

                    switch (tilemap.mapType)
                    {
                    case MapType.UnityRectangle:
                    case MapType.UnityIsometric:
                    case MapType.UnityHexagon:

                        LightTilemapCollider.Base baseTilemap = tilemap.GetCurrentTilemap();

                        switch (baseTilemap.shadowType)
                        {
                        case ShadowType.SpritePhysicsShape:
                        case ShadowType.Grid:
                            Shadow.UnityTilemap.Draw(pass.light, tilemap, pass.lightSizeSquared);
                            break;

                        case ShadowType.CompositeCollider:
                            // Only Rectangle?
                            Shadow.TilemapCollider.Rectangle.Draw(pass.light, tilemap);
                            break;
                        }

                        break;

                    case MapType.SuperTilemapEditor:

                        switch (tilemap.superTilemapEditor.shadowTypeSTE)
                        {
                        case SuperTilemapEditorSupport.TilemapCollider2D.ShadowType.Grid:
                        case SuperTilemapEditorSupport.TilemapCollider2D.ShadowType.TileCollider:
                            SuperTilemapEditorSupport.RenderingColliderShadow.Grid(pass.light, tilemap);
                            break;

                        case SuperTilemapEditorSupport.TilemapCollider2D.ShadowType.Collider:
                            SuperTilemapEditorSupport.RenderingColliderShadow.Collider(pass.light, tilemap);
                            break;
                        }

                        break;
                    }
                }
                #endif
            }
Beispiel #17
0
            private static void DrawTilemapSprite(Pass pass)
            {
                #if UNITY_2017_4_OR_NEWER
                for (int id = 0; id < pass.tilemapList.Count; id++)
                {
                    LightTilemapCollider2D tilemap = pass.tilemapList[id];

                    if (tilemap.maskLayer != pass.layerID)
                    {
                        continue;
                    }

                    if (tilemap.MasksDisabled())
                    {
                        continue;
                    }

                    // Tilemap In Range

                    switch (tilemap.mapType)
                    {
                    case MapType.UnityRectangle:
                    case MapType.UnityIsometric:
                    case MapType.UnityHexagon:

                        LightTilemapCollider.Base baseTilemap = tilemap.GetCurrentTilemap();

                        switch (baseTilemap.maskType)
                        {
                        case LightTilemapCollider.MaskType.Sprite:
                            UnityTilemap.Sprite(pass.light, tilemap, pass.materialWhite, pass.layer);
                            break;

                        case MaskType.BumpedSprite:
                            Material material = tilemap.bumpMapMode.SelectMaterial(pass.materialNormalMap_PixelToLight, pass.materialNormalMap_ObjectToLight);

                            UnityTilemap.BumpedSprite(pass.light, tilemap, material, pass.layer);
                            break;
                        }

                        break;

                    case MapType.SuperTilemapEditor:

                        switch (tilemap.superTilemapEditor.maskTypeSTE)
                        {
                        case SuperTilemapEditorSupport.TilemapCollider.MaskType.Sprite:

                            SuperTilemapEditorSupport.RenderingColliderMask.WithoutAtlas.Sprite(pass.light, tilemap, pass.materialWhite);

                            break;

                        case SuperTilemapEditorSupport.TilemapCollider.MaskType.BumpedSprite:
                            Material material = tilemap.bumpMapMode.SelectMaterial(pass.materialNormalMap_PixelToLight, pass.materialNormalMap_ObjectToLight);

                            SuperTilemapEditorSupport.RenderingColliderMask.WithoutAtlas.BumpedSprite(pass.light, tilemap, material);

                            break;
                        }

                        break;
                    }
                }
                #endif
            }