Skip to content
Permalink
13bc366381
Go to file
 
 
Cannot retrieve contributors at this time
156 lines (128 sloc) 7.36 KB
using UnityEngine;
using System;
using System.Collections.Generic; //Allows us to use lists
using Random = UnityEngine.Random; // Tells Random to use Untiy Engine Random number generator
//++Add in Comments++
//namespace Completed
//{
public class BoardManager : MonoBehaviour {
//Using serializable allows us to embed a class wit hsub properties in sinpsector
[Serializable]
public class Count
{
public int minimum; //Minimum value for our count class
public int maximum; //Maximum value for our count class
//assignment constructor
public Count(int min, int max)
{
minimum = min;
maximum = max;
}
}
//Declarations--------------------------------------------------
public int columns = 8; //Number of columns in our game baord
public int rows = 8; //Number of Rows in our game board
public Count wallCount = new Count(5, 9); //Lower and upper limit for our random number
public Count foodCount = new Count(1, 5); //Lowra nd uper limit for our random food count
public GameObject exit; //Prefab to spawn for exit
//Arrays
public GameObject[] floorTiles; //Array of floor prefabs
public GameObject[] wallTiles; //Array of wall prefabs
public GameObject[] foodTiles; //Array of food prefabs
public GameObject[] enemyTiles; //Array of enemy prefabs
public GameObject[] outerWallTiles; //Array of ourter tile prefabs
public GameObject[] batteryTiles; //Array of the Batteries for unlocking
private Transform boardHolder; //A variable to store references to the transform of something
private List<Vector3> gridPositions = new List<Vector3>(); //A list of possible locations to place tiles
//Clears our list gridPositions and prepares it to generate a new board.
void InitialiseList()
{
//clear our list gridPositions
gridPositions.Clear();
//Loot through x axis (columns)
for (int x=1; x< columns - 1; x++)
{
//within each column, loop through the y axis (rows)
for (int y = 1; y < rows -1; y++)
{
//At each index add a new vector3 to our lists with the x and y coordinates of that position
gridPositions.Add(new Vector3(x, y, 0f));
}
}
}
//Sets up the outer walls and flolors of the game
void BoardSetup()
{
//instanciates baords and sets iup boardholder to its transform
boardHolder = new GameObject("Board").transform;
//loop along the x axis, starting from - 1 (to fill corner) with floor and outerwall edge tiles
for(int x = -1; x<columns + 1; x++)
{
//Loop along y axis, starting fomr -1 to place floor or outerwall tiles
for(int y = -1; y < rows + 1; y++)
{
//choose a random tile from our array for the floor tile prefabs and prepare to instanciete
GameObject toInstanciate = floorTiles[Random.Range(0, floorTiles.Length)];
//check if we current position is at board edge, if so choose a random outerwall prefab
if (x == -1 ||x == columns|| y == -1 || y == rows)
{
toInstanciate = outerWallTiles[Random.Range(0, outerWallTiles.Length)];
}
//Instanciate Gameobject instance using prefabt chosen for toInstanciate
GameObject instance = Instantiate(toInstanciate, new Vector3(x, y, 0f), Quaternion.identity) as GameObject;
//Set the paretn of our newly isntanciated object isnatne to boardHolder
instance.transform.SetParent(boardHolder);
}
}
}
//Making random positions to spawn board pieces
//RanndomPosition returns a random position from our gridpositions
Vector3 RandomPosition()
{
//Declare an integer randomInxdex, set its value to a ranom umber btween 0 and the count of items
int randomIndex = Random.Range(0, gridPositions.Count);
//Declare a variable of type Vector3 called Randomp position, set its value to the etnry ant RandomIndex
Vector3 randomPosition = gridPositions[randomIndex];
//Remove the etnry at randomIndex from the list so that it can't be re-used
gridPositions.RemoveAt(randomIndex);
//return the randomly selected Vector3 position
return randomPosition;
}
//LaoyutObjectAtRandom acepts an array of game obejcts to choose from along with a minimu and maximum
void LayoutObjectAtRandom(GameObject[] tileArray, int minimum, int maximum)
{
//Choose a random number of objects to instanciate within the minimum and maximum limits
int objectCount = Random.Range(minimum, maximum + 1);
//Instanciate objects until the randomly chosen limit objectcount is reached
for(int i = 0; i< objectCount; i++)
{
//Choose a random number of objects to isnanciate wtihin the minimum and maximum limits
Vector3 randomPosition = RandomPosition();
//Choose a random tile from tile Array and assign it to tileChoice
GameObject tileChoice = tileArray[Random.Range(0, tileArray.Length)];
//Insanciate tileCHoice at the position returned by RandomPositon with no change in rotation
Instantiate(tileChoice, randomPosition, Quaternion.identity);
}
}
//SetupScene initializeds our level and calls the previous functions to lay out the game board
public void SetupScene(int level)
{
//creates the outer walls and floor
BoardSetup();
//resets our list of gridposionts
InitialiseList();
//Instanciate a random number of walll tiles based on min/max, at random positions
LayoutObjectAtRandom(wallTiles, wallCount.minimum, wallCount.maximum);
//Instanciate a random number of food tiles based on min/max, at random positions
LayoutObjectAtRandom(foodTiles, foodCount.minimum, foodCount.maximum);
//instanciate a fixed number of batteries
LayoutObjectAtRandom(batteryTiles, 4, 4);
//Determine number of enemies based on current level number, based on logarithim progression
int enemyCount = (int)Mathf.Log(level, 2f);
//Instanciate arndom number of enmies based on min/max, at random positions
LayoutObjectAtRandom(enemyTiles, enemyCount, enemyCount);
//Instanciate the xtilre til in the upper right hand corner of our game board
// Instantiate(exit, new Vector3(columns - 1, rows - 1, 0f), Quaternion.identity);
}
}
//}
You can’t perform that action at this time.