void BuildChunk() { cd = cRender.mm.map.chunks[position.x, position.y]; int hei = cRender.mm.chunkHeight; MapManager mm = MapManager.instance; for (int i = 0; i < cRender.mm.chunkWidth; i++) { for (int j = 0; j < hei; j++) { TileString tl = cd.GetTile(i, j, layer); if (!ReferenceEquals(tl, null)) { TileBase tb = mm.GetTileFromCollection(tl); AddTile(i, j, tb); if (tb.gameObject) { if (gameObjects[i, j] == null) { gameObjects[i, j] = GameObject.Instantiate(tb.gameObject, transform, false); gameObjects[i, j].transform.localPosition = new Vector3(i, j) * scale; } } } else { if (gameObjects[i, j] != null) { Destroy(gameObjects[i, j]); } } } } }
private void GenerateOutline(int x, int y) { points.Clear(); realPts.Clear(); dir = Vector2Int.right; currentpoint.x = x; currentpoint.y = y; points.Add(currentpoint); realPts.AddRange(MapManager.instance.GetTileFromCollection(chd.GetTile(currentpoint.x, currentpoint.y, layer)).GetCollisionBtm(currentpoint.x, currentpoint.y)); currentpoint += dir; while (!(points[0] == currentpoint)) { if (dir == Vector2Int.right) { if (currentpoint.x >= chu.GetLength(0)) { realPts.AddRange(MapManager.instance.GetTileFromCollection(chd.GetTile(currentpoint.x - 1, currentpoint.y, layer)).GetCollisionRight(currentpoint.x - 1, currentpoint.y)); dir = Vector2Int.up; } else if (chu[currentpoint.x, currentpoint.y].tile == 0) { realPts.AddRange(MapManager.instance.GetTileFromCollection(chd.GetTile(currentpoint.x - 1, currentpoint.y, layer)).GetCollisionRight(currentpoint.x - 1, currentpoint.y)); dir = Vector2Int.up; } else if (currentpoint.y - 1 >= 0) { if (chu[currentpoint.x, currentpoint.y - 1].tile != 0) { realPts.AddRange(MapManager.instance.GetTileFromCollection(chd.GetTile(currentpoint.x, currentpoint.y - 1, layer)).GetCollisionLeft(currentpoint.x, currentpoint.y - 1)); dir = Vector2Int.down; } else { realPts.AddRange(MapManager.instance.GetTileFromCollection(chd.GetTile(currentpoint.x, currentpoint.y, layer)).GetCollisionBtm(currentpoint.x, currentpoint.y)); } } else { realPts.AddRange(MapManager.instance.GetTileFromCollection(chd.GetTile(currentpoint.x, currentpoint.y, layer)).GetCollisionBtm(currentpoint.x, currentpoint.y)); } } else if (dir == Vector2Int.up) { if (currentpoint.y >= chu.GetLength(1)) { dir = Vector2Int.left; } else { if (chu[currentpoint.x - 1, currentpoint.y].tile == 0) { realPts.AddRange(MapManager.instance.GetTileFromCollection(chd.GetTile(currentpoint.x - 1, currentpoint.y - 1, layer)).GetCollisionTopBk(currentpoint.x - 1, currentpoint.y - 1)); dir = Vector2Int.left; if (currentpoint.x < chu.GetLength(0) && currentpoint.y < chu.GetLength(1)) { if (chu[currentpoint.x, currentpoint.y].tile != 0) { recalcPoints.Add(currentpoint); } } } else if (chu[currentpoint.x - 1, currentpoint.y].tile != 0) { if (currentpoint.x < chu.GetLength(0)) { if (chu[currentpoint.x, currentpoint.y].tile != 0) { dir = Vector2Int.right; } else { realPts.AddRange(MapManager.instance.GetTileFromCollection(chd.GetTile(currentpoint.x - 1, currentpoint.y, layer)).GetCollisionRight(currentpoint.x - 1, currentpoint.y)); } ignorePoints.Add(new Vector2(currentpoint.x - 1, currentpoint.y)); } else { realPts.AddRange(MapManager.instance.GetTileFromCollection(chd.GetTile(currentpoint.x - 1, currentpoint.y, layer)).GetCollisionRight(currentpoint.x - 1, currentpoint.y)); } } } } else if (dir == Vector2Int.left) { if (currentpoint.x - 1 < 0) { dir = Vector2Int.down; realPts.AddRange(MapManager.instance.GetTileFromCollection(chd.GetTile(currentpoint.x, currentpoint.y - 1, layer)).GetCollisionLeft(currentpoint.x, currentpoint.y - 1)); } else if (chu[currentpoint.x - 1, currentpoint.y - 1].tile == 0) { realPts.AddRange(MapManager.instance.GetTileFromCollection(chd.GetTile(currentpoint.x, currentpoint.y - 1, layer)).GetCollisionLeft(currentpoint.x, currentpoint.y - 1)); dir = Vector2Int.down; } else if (currentpoint.y < chu.GetLength(1)) { realPts.AddRange(MapManager.instance.GetTileFromCollection(chd.GetTile(currentpoint.x, currentpoint.y - 1, layer)).GetCollisionTopBk(currentpoint.x, currentpoint.y - 1)); if (chu[currentpoint.x - 1, currentpoint.y].tile != 0) { dir = Vector2Int.up; realPts.AddRange(MapManager.instance.GetTileFromCollection(chd.GetTile(currentpoint.x - 1, currentpoint.y, layer)).GetCollisionRight(currentpoint.x - 1, currentpoint.y)); } } else { realPts.AddRange(MapManager.instance.GetTileFromCollection(chd.GetTile(currentpoint.x, currentpoint.y - 1, layer)).GetCollisionTopBk(currentpoint.x, currentpoint.y - 1)); } } else if (dir == Vector2Int.down) { if (currentpoint.y - 1 < 0) { realPts.AddRange(MapManager.instance.GetTileFromCollection(chd.GetTile(currentpoint.x, currentpoint.y, layer)).GetCollisionLeft(currentpoint.x, currentpoint.y)); dir = Vector2Int.right; } else if (chu[currentpoint.x, currentpoint.y - 1].tile == 0) { realPts.AddRange(MapManager.instance.GetTileFromCollection(chd.GetTile(currentpoint.x, currentpoint.y, layer)).GetCollisionLeft(currentpoint.x, currentpoint.y)); dir = Vector2Int.right; } else if (currentpoint.x - 1 >= 0) { realPts.AddRange(MapManager.instance.GetTileFromCollection(chd.GetTile(currentpoint.x, currentpoint.y, layer)).GetCollisionLeft(currentpoint.x, currentpoint.y)); if (chu[currentpoint.x - 1, currentpoint.y - 1].tile != 0 && chu[currentpoint.x - 1, currentpoint.y].tile == 0) { //realPts.AddRange(MapManager.instance.GetTileFromCollection(chd.GetTile(currentpoint.x, currentpoint.y - 1, layer)).GetCollisionTop(currentpoint.x, currentpoint.y - 1)); dir = Vector2Int.left; } } else { realPts.AddRange(MapManager.instance.GetTileFromCollection(chd.GetTile(currentpoint.x, currentpoint.y, layer)).GetCollisionLeft(currentpoint.x, currentpoint.y)); } } points.Add(currentpoint); currentpoint += dir; } realPts.Distinct(); realPts.Add(realPts[0]); for (int o = 0; o < realPts.Count; o++) { realPts[o] *= scale; } EdgeCollider2D ec = GetColl(); ec.points = realPts.ToArray(); ignorePoints.AddRange(points); }