void Draw() { var id = brush.tileId.ToString(); float posX = brush.transform.position.x - 0.5f; float posY = brush.transform.position.y - 0.5f; GameObject tile = GameObject.Find(map.name + "/Tiles/tile_" + id); if (tile == null) { tile = new GameObject("tile_" + id); tile.transform.parent = map.tiles.transform; tile.transform.position = new Vector3(posX + 0.5f, posY + 0.5f, 0); tile.AddComponent <SpriteRenderer>(); } tile.GetComponent <SpriteRenderer>().sprite = brush.GetComponent <SpriteRenderer>().sprite; if (map.boxCollider) { if (tile.GetComponent <BoxCollider2D>() == null) { tile.AddComponent <BoxCollider2D>(); } tile.GetComponent <BoxCollider2D>().size = new Vector2(map.tileSize.x / 100, map.tileSize.y / 100); } else { if (tile.GetComponent <BoxCollider2D>() != null) { DestroyImmediate(tile.GetComponent <BoxCollider2D>()); } } }
void BucketFill(Vector2 tileIndex) { GameObject go = GameObject.Find("tile_" + tileIndex.x + "," + tileIndex.y); GameObject selectedPrefab = brush.GetComponent <TileBrush>().GetSelectedPrefab(); GameObject targetGO = null; GameObject prefab = null; GameObject targetPrefab = null; if (go != null) { prefab = (GameObject)PrefabUtility.GetPrefabParent(go); } if (prefab != null && prefab.Equals(selectedPrefab)) { return; } Queue queue = new Queue(); var size = map.size; var tsize = map.tileSize; queue.Enqueue(tileIndex); Vector2 index; while (queue.Count > 0) { index = (Vector2)queue.Dequeue(); go = GameObject.Find("tile_" + index.x + "," + index.y); DestroyImmediate(go); brush.CreateSelectedCopy(index, new Vector3(index.x * tsize.x + tsize.x / 2, index.y * tsize.y + tsize.y / 2)); Vector2[] nextIndexes = new Vector2[] { new Vector2(index.x - 1, index.y), new Vector2(index.x + 1, index.y), new Vector2(index.x, index.y - 1), new Vector2(index.x, index.y + 1) }; foreach (Vector2 nextIndex in nextIndexes) { if (nextIndex.x >= 0 && nextIndex.x < size.x && nextIndex.y >= 0 && nextIndex.y < size.y) { targetGO = GameObject.Find("tile_" + nextIndex.x + "," + nextIndex.y); if (targetGO == null && prefab == null) { queue.Enqueue(new Vector2(nextIndex.x, nextIndex.y)); } else { targetPrefab = (GameObject)PrefabUtility.GetPrefabParent(targetGO); if (targetPrefab != null && prefab != null && prefab.Equals(targetPrefab)) { queue.Enqueue(new Vector2(nextIndex.x, nextIndex.y)); } } } } } }
void Draw() { var id = map.texture2D.name + brush.tileId.ToString(); float posX = brush.transform.position.x - 0.5f; float posY = brush.transform.position.y - 0.5f; GameObject tile = GameObject.Find(map.name + "/Tiles/tile_" + id); if (tile == null) { tile = new GameObject("tile_" + id); tile.transform.parent = map.tiles.transform; tile.transform.position = new Vector3(posX + 0.5f, posY + 0.5f, 0); tile.AddComponent <SpriteRenderer>(); } tile.GetComponent <SpriteRenderer>().sprite = brush.GetComponent <SpriteRenderer>().sprite; if (map.boxCollider) { if (tile.GetComponent <BoxCollider2D>() == null) { tile.AddComponent <BoxCollider2D>(); } tile.GetComponent <BoxCollider2D>().size = new Vector2(map.tileSize.x / 100, map.tileSize.y / 100); } else { if (tile.GetComponent <BoxCollider2D>() != null) { DestroyImmediate(tile.GetComponent <BoxCollider2D>()); } } if (map.addNormalTileScript) { if (tile.GetComponent <NormalTile>() == null) { tile.AddComponent <NormalTile>(); } } else { if (tile.GetComponents <NormalTile>() != null) { DestroyImmediate(tile.GetComponent <NormalTile>()); } } if (map.addJumpTileScript) { if (tile.GetComponent <JumpTile>() == null) { tile.AddComponent <JumpTile>(); } } else { if (tile.GetComponents <JumpTile>() != null) { DestroyImmediate(tile.GetComponent <JumpTile>()); } } if (map.addPoisonTileScript) { if (tile.GetComponent <PoisonTile>() == null) { tile.AddComponent <PoisonTile>(); } } else { if (tile.GetComponents <PoisonTile>() != null) { DestroyImmediate(tile.GetComponent <PoisonTile>()); } } if (map.addAnimatorController) { if (tile.GetComponent <Animator>() == null) { tile.AddComponent <Animator>(); } } else { if (tile.GetComponents <Animator>() != null) { DestroyImmediate(tile.GetComponent <Animator>()); } } if (map.addSpikeScript) { if (tile.GetComponent <Spike>() == null) { tile.AddComponent <Spike>(); } } else { if (tile.GetComponents <Spike>() != null) { DestroyImmediate(tile.GetComponent <Spike>()); } } if (map.addLayer) { tile.layer = 8; } else { tile.layer = 0; } if (map.addCoinScript) { if (tile.GetComponent <Coin>() == null) { tile.AddComponent <Coin>(); } } else { if (tile.GetComponents <Coin>() != null) { DestroyImmediate(tile.GetComponent <Coin>()); } } }