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(); } }
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; } }
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); } }
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; } }
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; } }