Пример #1
0
        private void HandleControlClick(Event e)
        {
            if (e.control && e.button == 0 && (e.type == EventType.MouseDown || e.type == EventType.MouseDrag || e.type == EventType.MouseUp))
            {
                Vector2 mousePosition = TileEditorUtility.GetMousePosInWorld(e.mousePosition);
                if (tileMap.IsInTileMap(mousePosition))
                {
                    Vector2 gridIndex = tileMap.TransformPositionToGridIndex(mousePosition);
                    gridIndex = tileMap.ClampGridIndex(gridIndex);
                    int key = (int)(tileMap.MapSize.x * gridIndex.y + gridIndex.x);

                    if (tileMap.TileLayers != null)
                    {
                        foreach (TileLayer tileLayer in tileMap.TileLayers)
                        {
                            if (key < 0 || key > tileLayer.Tiles.Length)
                            {
                                return;
                            }
                            //get a tileData from a Tile
                            Tile tile = tileLayer.Tiles[key];
                            if (tile != null)
                            {
                                if (tileSetManager.tileDataInScene != null)
                                {
                                    if (tileSetManager.tileDataInScene.Texture != null)
                                    {
                                        DestroyImmediate(tileSetManager.tileDataInScene.Texture);
                                    }
                                }
                                tileSetManager.tileDataInScene = TileEditorUtility.GetTileDataFromTile(tile);
                                tileSelectMode = TileSelectMode.Scene;
                                //get collision info
                                colliderInfo = TileEditorUtility.GetColliderInfoFromTile(tile);
                                Repaint();
                                break;
                            }
                        }
                    }

                }
                e.Use();
            }
        }
Пример #2
0
        public static bool IsTileColliderEqualsToColliderInfo(Tile tile, ColliderInfo colliderInfo)
        {
            if (tile == null || colliderInfo == null)
            {
                return false;
            }
            switch (colliderInfo.CollisionType)
            {
                case CollisionType.Box:
                    {
                        BoxCollider2D collider = tile.GetComponent(typeof(BoxCollider2D)) as BoxCollider2D;
                        BoxCollider2DInfo info = colliderInfo as BoxCollider2DInfo;
                        if (collider == null || info == null)
                        {
                            return false;
                        }
#if UNITY_5_0
                        if (info.Center == collider.offset && info.Size == collider.size)
#else
                         if (info.Center == collider.offset && info.Size == collider.size)
#endif
                        {
                            return true;
                        }
                        else
                        {
                            return false;
                        }
                    }
                case CollisionType.Circle:
                    {
                        CircleCollider2D collider = tile.GetComponent(typeof(CircleCollider2D)) as CircleCollider2D;
                        CircleCollider2DInfo info = colliderInfo as CircleCollider2DInfo;
                        if (collider == null || info == null)
                        {
                            return false;
                        }
#if UNITY_5_0
                        if (collider.offset == info.Center && collider.radius == info.Radius)
#else
                        if (collider.offset == info.Center && collider.radius == info.Radius)

#endif
                        {
                            return true;
                        }
                        else
                        {
                            return false;
                        }
                    }
                case CollisionType.Polygon:
                    {
                        PolygonCollider2D collider = tile.GetComponent(typeof(PolygonCollider2D)) as PolygonCollider2D;
                        PolygonCollider2DInfo info = colliderInfo as PolygonCollider2DInfo;
                        if (collider == null || info == null)
                        {
                            return false;
                        }

                        if (collider.pathCount == info.PathCount)
                        {
                            for (int i = 0; i < collider.pathCount; ++i)
                            {
                                if (collider.points[i] != info.Points[i])
                                {
                                    return false;
                                }
                            }
                            return true;
                        }
                        else
                        {
                            return false;
                        }
                    }
                default:
                    return true;
            }
        }
Пример #3
0
        public static bool IsTileColliderEqualsToColliderInfo(Tile tile, ColliderInfo colliderInfo)
        {
            if (tile == null || colliderInfo == null)
            {
                return(false);
            }
            switch (colliderInfo.CollisionType)
            {
            case CollisionType.Box: {
                BoxCollider2D     collider = tile.GetComponent(typeof(BoxCollider2D)) as BoxCollider2D;
                BoxCollider2DInfo info     = colliderInfo as BoxCollider2DInfo;
                if (collider == null || info == null)
                {
                    return(false);
                }
#if UNITY_5_0
                if (info.Center == collider.offset && info.Size == collider.size)
#else
                if (info.Center == collider.offset && info.Size == collider.size)
#endif
                {
                    return(true);
                }
                else
                {
                    return(false);
                }
            }

            case CollisionType.Circle: {
                CircleCollider2D     collider = tile.GetComponent(typeof(CircleCollider2D)) as CircleCollider2D;
                CircleCollider2DInfo info     = colliderInfo as CircleCollider2DInfo;
                if (collider == null || info == null)
                {
                    return(false);
                }
#if UNITY_5_0
                if (collider.offset == info.Center && collider.radius == info.Radius)
#else
                if (collider.offset == info.Center && collider.radius == info.Radius)
#endif
                {
                    return(true);
                }
                else
                {
                    return(false);
                }
            }

            case CollisionType.Polygon: {
                PolygonCollider2D     collider = tile.GetComponent(typeof(PolygonCollider2D)) as PolygonCollider2D;
                PolygonCollider2DInfo info     = colliderInfo as PolygonCollider2DInfo;
                if (collider == null || info == null)
                {
                    return(false);
                }

                if (collider.pathCount == info.PathCount)
                {
                    for (int i = 0; i < collider.pathCount; ++i)
                    {
                        if (collider.points[i] != info.Points[i])
                        {
                            return(false);
                        }
                    }
                    return(true);
                }
                else
                {
                    return(false);
                }
            }

            default:
                return(true);
            }
        }
Пример #4
0
        public static void ApplyColliderInfoToTile(Tile tile, ColliderInfo colliderInfo)
        {
            if (tile == null || colliderInfo == null)
            {
                return;
            }

            CollisionType collisionType = colliderInfo.CollisionType;

            switch (collisionType)
            {
                case CollisionType.Box:
                    {
                        BoxCollider2DInfo info = colliderInfo as BoxCollider2DInfo;
                        BoxCollider2D collider = tile.GetComponent(typeof(BoxCollider2D)) as BoxCollider2D;
                        if (info != null && collider != null)
                        {
                            collider.size = info.Size;

#if UNITY_5_0
                            collider.offset = info.Center;
#else
                             collider.offset = info.Center;
#endif

                        }
                        break;
                    }

                case CollisionType.Circle:
                    {
                        CircleCollider2DInfo info = colliderInfo as CircleCollider2DInfo;
                        CircleCollider2D collider = tile.GetComponent(typeof(CircleCollider2D)) as CircleCollider2D;
                        if (info != null && collider != null)
                        {
#if UNITY_5_0
                            collider.offset = info.Center;
#else
                            collider.offset = info.Center;
#endif

                            collider.radius = info.Radius;
                        }
                        break;
                    }

                case CollisionType.Polygon:
                    {
                        PolygonCollider2DInfo info = colliderInfo as PolygonCollider2DInfo;
                        PolygonCollider2D collider = tile.GetComponent(typeof(PolygonCollider2D)) as PolygonCollider2D;
                        if (info != null && collider != null)
                        {
                            collider.pathCount = info.PathCount;
                            collider.points = info.Points;
                        }
                        break;
                    }

                default:
                    break;
            }

        }
Пример #5
0
        public static void ApplyColliderInfoToTile(Tile tile, ColliderInfo colliderInfo)
        {
            if (tile == null || colliderInfo == null)
            {
                return;
            }

            CollisionType collisionType = colliderInfo.CollisionType;

            switch (collisionType)
            {
            case CollisionType.Box:
            {
                BoxCollider2DInfo info     = colliderInfo as BoxCollider2DInfo;
                BoxCollider2D     collider = tile.GetComponent(typeof(BoxCollider2D)) as BoxCollider2D;
                if (info != null && collider != null)
                {
                    collider.size = info.Size;

#if UNITY_5_0
                    collider.offset = info.Center;
#else
                    collider.center = info.Center;
#endif
                }
                break;
            }

            case CollisionType.Circle:
            {
                CircleCollider2DInfo info     = colliderInfo as CircleCollider2DInfo;
                CircleCollider2D     collider = tile.GetComponent(typeof(CircleCollider2D)) as CircleCollider2D;
                if (info != null && collider != null)
                {
#if UNITY_5_0
                    collider.offset = info.Center;
#else
                    collider.center = info.Center;
#endif

                    collider.radius = info.Radius;
                }
                break;
            }

            case CollisionType.Polygon:
            {
                PolygonCollider2DInfo info     = colliderInfo as PolygonCollider2DInfo;
                PolygonCollider2D     collider = tile.GetComponent(typeof(PolygonCollider2D)) as PolygonCollider2D;
                if (info != null && collider != null)
                {
                    collider.pathCount = info.PathCount;
                    collider.points    = info.Points;
                }
                break;
            }

            default:
                break;
            }
        }