//draw generated map in Unity. This is before we replace some walls with decorative walls and some floors with painted floors void GenerateUnityMap() { for (int x = 1; x < width - 1; x++) { for (int y = 1; y < height - 1; y++) { GameObject t; if (levelMap[x, y] == true) // if wall // case 1: this is non-terminating piece of a horizontal wall { if (levelMap[x + 1, y] == true && levelMap[x - 1, y] == true && levelMap[x, y + 1] == false && levelMap[x, y - 1] == false) { t = Instantiate(wallTile_twoNeighbors_opposite, new Vector3(x, y, 0), Quaternion.identity); } // case 2: non-terminatin piece of vertical wall else if (levelMap[x + 1, y] == false && levelMap[x - 1, y] == false && levelMap[x, y + 1] == true && levelMap[x, y - 1] == true) { t = Instantiate(wallTile_twoNeighbors_opposite, new Vector3(x, y, 0), Quaternion.Euler(0, 0, 90)); } // case 3: end piece, wall on left else if (levelMap[x + 1, y] == true && levelMap[x - 1, y] == false && levelMap[x, y + 1] == false && levelMap[x, y - 1] == false) { t = Instantiate(wallTile_threeNeighbors, new Vector3(x, y, 0), Quaternion.Euler(0, 0, 180)); } // case 4: end piece, wall on right else if (levelMap[x + 1, y] == false && levelMap[x - 1, y] == true && levelMap[x, y + 1] == false && levelMap[x, y - 1] == false) { t = Instantiate(wallTile_threeNeighbors, new Vector3(x, y, 0), Quaternion.identity); } // case 5: end piece, wall on top else if (levelMap[x + 1, y] == false && levelMap[x - 1, y] == false && levelMap[x, y + 1] == true && levelMap[x, y - 1] == false) { t = Instantiate(wallTile_threeNeighbors, new Vector3(x, y, 0), Quaternion.Euler(0, 0, 270)); } // case 6: end piece, wall on bottom else if (levelMap[x + 1, y] == false && levelMap[x - 1, y] == false && levelMap[x, y + 1] == false && levelMap[x, y - 1] == true) { t = Instantiate(wallTile_threeNeighbors, new Vector3(x, y, 0), Quaternion.Euler(0, 0, 90)); } // Only one neighboring floor, which is at top else if (levelMap[x + 1, y] == true && levelMap[x - 1, y] == true && levelMap[x, y + 1] == false && levelMap[x, y - 1] == true) { t = Instantiate(wallTile_oneNeighbor, new Vector3(x, y, 0), Quaternion.Euler(0, 0, 180)); //string wallName = "wall " + x + ", " + y; //t.transform.name = wallName; } // Only one neighboring floor, which is at botton else if (levelMap[x + 1, y] == true && levelMap[x - 1, y] == true && levelMap[x, y + 1] == true && levelMap[x, y - 1] == false) { t = Instantiate(wallTile_oneNeighbor, new Vector3(x, y, 0), Quaternion.identity); } // Only one neighboring floor, which is at right else if (levelMap[x + 1, y] == false && levelMap[x - 1, y] == true && levelMap[x, y + 1] == true && levelMap[x, y - 1] == true) { t = Instantiate(wallTile_oneNeighbor, new Vector3(x, y, 0), Quaternion.Euler(0, 0, 90)); } // Only one neighboring floor, which is at right else if (levelMap[x + 1, y] == true && levelMap[x - 1, y] == false && levelMap[x, y + 1] == true && levelMap[x, y - 1] == true) { t = Instantiate(wallTile_oneNeighbor, new Vector3(x, y, 0), Quaternion.Euler(0, 0, 270)); } else { t = Instantiate(wallTile_plain, new Vector3(x, y, 0), Quaternion.identity); } string wallName = "wall " + x + ", " + y; t.transform.name = wallName; t.transform.parent = tilesHolderInstance.transform; } else if (levelMap[x, y] == false) // if floor { t = Instantiate(floorCell, new Vector3(x, y, 0), Quaternion.identity); //t.transform.parent = tilesHolderInstance.transform; string floorName = "floor " + x + ", " + y; t.transform.name = floorName; t.transform.parent = tilesHolderInstance.transform; } } } // put a few patches of dirt down lmao int dirtCount = 0; while (dirtCount < floorDecorations) { int dirtX = rand.getRandint(2, width - 4), dirtY = rand.getRandint(2, height - 5); if ( levelMap[dirtX, dirtY] == false && levelMap[dirtX, dirtY + 1] == false && levelMap[dirtX + 1, dirtY] == false && levelMap[dirtX + 1, dirtY + 1] == false && levelMap[dirtX + 2, dirtY] == false && levelMap[dirtX + 2, dirtY + 1] == false ) { dirtCount++; GameObject d = Instantiate(floorDecor_dirt, new Vector3(dirtX, dirtY, 0), Quaternion.identity); d.transform.parent = tilesHolderInstance.transform; } } // draw top and bottom wall for (int x = 0; x < width; x++) { GameObject bWall = Instantiate(wallTile_bot, new Vector3(x, 0, 0), Quaternion.identity); GameObject tWall = Instantiate(wallTile_top, new Vector3(x, height - 1, 0), Quaternion.identity); string bName = "bottom wall " + x; string tName = "top wall" + x; bWall.transform.name = bName; tWall.transform.name = tName; bWall.transform.parent = tilesHolderInstance.transform; tWall.transform.parent = tilesHolderInstance.transform; } // draw left and right wall // We don't draw over the bottom walls drawn at corners so we start counting from y=1 for (int y = 1; y < height; y++) { GameObject lWall = Instantiate(wallTile_side, new Vector3(0, y, 0), Quaternion.Euler(0, 0, 180)); GameObject rWall = Instantiate(wallTile_side, new Vector3(width - 1, y, 0), Quaternion.identity); string lName = "left wall" + y; string rName = "right wall" + y; lWall.transform.name = lName; rWall.transform.name = rName; lWall.transform.parent = tilesHolderInstance.transform; rWall.transform.parent = tilesHolderInstance.transform; } // finally lay down some enemies and some potions if (currentLevel >= minLevel_ghost) { spawnObject(ghost, enemyHolderInstance, 1, mobGhosts); } if (currentLevel >= minLevel_wizard) { spawnObject(wizard, enemyHolderInstance, 1, mobWizards); } if (currentLevel >= minLevel_ogre) { spawnObject(ogre, enemyHolderInstance, 2, mobOgres); } spawnObject(healthPotion, potionsHolderInstance, 1, healthPotions); spawnObject(manaPotion, potionsHolderInstance, 1, manaPotions); }