private void Awake() { if (_instance == null) { _instance = this; } }
private void Awake() { if (PlayerPrefs.HasKey("exitid")) { id = PlayerPrefs.GetInt("exitid") + 1; PlayerPrefs.SetInt("exitid", id); } else { PlayerPrefs.SetInt("exitid", id); } numSpawnRoads = GameObject.FindGameObjectsWithTag("Respawn").Length; Dictionary <int, float> weightedSpawnRatesDict = SimSettings.getDictionary(); float weight; if (weightedSpawnRatesDict.TryGetValue(id + numSpawnRoads, out weight)) { exitRate = (int)weight; } else { exitRate = 1; } }
// Start is called before the first frame update void Start() { myRigid = GetComponent <Rigidbody>(); simSettings = FindObjectOfType <SimSettings>(); pitch = transform.eulerAngles.x; yaw = transform.eulerAngles.y; }
public void optionClicked() { SimSettings simSettings = FindObjectOfType <SimSettings>(); rabbitList = simSettings.rabbitOption; foxList = simSettings.foxOption; wolfList = simSettings.wolfOption; ShowGraph(); }
public void populationClicked() { SimSettings simSettings = FindObjectOfType <SimSettings>(); rabbitList = simSettings.rabbitPop; foxList = simSettings.foxPop; wolfList = simSettings.wolfPop; ShowGraph(); }
public DiceRoller(IList <CharacterSheet> characterSheetsToUse, SimSettings simSettings, ref TextBox textBoxOutputWindow) { _CharacterSheets.Clear(); foreach (CharacterSheet sheet in characterSheetsToUse) { _CharacterSheets.Add(sheet); } _CharacterSheets.Reverse(); _SimSettings = simSettings; _TextBox = textBoxOutputWindow; _String.Clear(); }
void Start() { twoLanePathGenerator = FindObjectOfType <TwoLanePathGenerator>(); if (direction == LightDirection.North) { carDirection = new Vector3(0, 0, 0); } if (direction == LightDirection.East) { carDirection = new Vector3(0, 0, 270); } if (direction == LightDirection.South) { carDirection = new Vector3(0, 0, 180); } if (direction == LightDirection.West) { carDirection = new Vector3(0, 0, 90); } //create unique ID for spawn road so weighted rate can get assigned //setup generation for cars //On timer call Spawn() Dictionary <int, float> weightedSpawnRatesDict = SimSettings.getDictionary(); float weight; if (weightedSpawnRatesDict.TryGetValue(id, out weight)) { spawnRate = weight / Application.targetFrameRate; } else { spawnRate = 10.0f / Application.targetFrameRate; } if (PlayerPrefs.GetString("sim_name") == "LargeTwoLaneGrid") { print("large two lane"); spawnRate *= 2; } InvokeRepeating("Spawn", 0.0f, spawnRate); }
public void GeneratePlants() { SimSettings simSettings = FindObjectOfType <SimSettings>(); int terrainSize = simSettings.terrainSize; int objectThickness; if (simSettings.stage == 3) { objectThickness = 50; } else { objectThickness = 500; } float[,] blockHeights = simSettings.blockHeights; for (int i = 0; i < terrainSize; i++) { for (int v = 0; v < terrainSize; v++) { float xCoord = (v / 40f) + simSettings.objectOffset; float zCoord = (i / 40f) + simSettings.objectOffset; float tempPerlin = Mathf.PerlinNoise(xCoord, zCoord); if (tempPerlin <= 0) { tempPerlin = 0.0001f; } int isSpawn = Random.Range(0, (int)Mathf.Round(objectThickness / tempPerlin)); int rotation = Random.Range(0, 3); int whatObject = Random.Range(0, plants.Length); if (blockHeights[v, i] > 10 && isSpawn == 5 && !simSettings.usedBlocks[v, i]) { GameObject newObject = Instantiate(plants[whatObject], new Vector3(v + 0.5f, blockHeights[v, i], terrainSize - i - 0.5f), Quaternion.Euler(0, rotation * 90f, 0)); newObject.transform.parent = gameObject.transform; simSettings.usedBlocks[v, i] = true; } } } if (simSettings.stage == 3) { simSettings.stage += 1; } }
public void StartSimulation() { SimSettings.AddSpawnRates(); SceneManager.LoadScene(PlayerPrefs.GetString("sim_name")); }
public void GeneratePlane() { //Init Variables ObjectGenerator objectGenerator = FindObjectOfType <ObjectGenerator>(); SimSettings simsettings = FindObjectOfType <SimSettings>(); terrainSize = simsettings.terrainSize; int arraySize = (terrainSize + 1) * (terrainSize + 1); Mesh newMesh = new Mesh(); Vector3[] vertices = new Vector3[arraySize]; Vector2[] uvs = new Vector2[arraySize]; int[] triangles = new int[terrainSize * terrainSize * 2 * 3]; float topVertex = Mathf.NegativeInfinity; float botVertex = Mathf.Infinity; // Set Vertex Values int vertexPos = 0; for (int i = terrainSize / 2; i >= ((terrainSize / 2) * (-1)); i--) { for (int v = terrainSize / 2; v >= ((terrainSize / 2) * (-1)); v--) { vertices[vertexPos] = new Vector3(v, 0, i); vertexPos += 1; ; } } //Set UV values for (int i = 0, z = 0; z < terrainSize + 1; z++) { for (int x = 0; x < terrainSize + 1; x++) { uvs[i] = new Vector2((float)x / (terrainSize + 1), (float)z / (terrainSize + 1)); i++; } } //Set Triangle Values int triPos = 0; for (int i = 0; i < arraySize - (terrainSize + 1); i++) { if (CheckEnd(i) || i == 0) { triangles[triPos] = i; triPos += 1; triangles[triPos] = i + (terrainSize + 1); triPos += 1; triangles[triPos] = i + (terrainSize + 2); triPos += 1; triangles[triPos] = i; triPos += 1; triangles[triPos] = i + (terrainSize + 2); triPos += 1; triangles[triPos] = i + 1; triPos += 1; } } // Add Smaller Noise int offset = Random.Range(0, 100); for (int i = 0; i < vertices.Length; i++) { float xVertex = vertices[i].x + (terrainSize / 2) + offset; float zVertex = vertices[i].z + (terrainSize / 2) + offset; vertices[i] = new Vector3(vertices[i].x, Mathf.PerlinNoise(xVertex / 3f, zVertex / 3f), vertices[i].z); } // Add Larger Noise offset = Random.Range(0, 100); for (int i = 0; i < vertices.Length; i++) { float xVertex = vertices[i].x + (terrainSize / 2) + offset; float zVertex = vertices[i].z + (terrainSize / 2) + offset; vertices[i] = new Vector3(vertices[i].x, vertices[i].y + Mathf.PerlinNoise(xVertex / 15f, zVertex / 15f) * 7f, vertices[i].z); } // Add Even Larger Noise offset = Random.Range(0, 100); for (int i = 0; i < vertices.Length; i++) { float xVertex = vertices[i].x + (terrainSize / 2) + offset; float zVertex = vertices[i].z + (terrainSize / 2) + offset; vertices[i] = new Vector3(vertices[i].x, vertices[i].y + Mathf.PerlinNoise(xVertex / 60f, zVertex / 60f) * 15f, vertices[i].z); } GetTopBotVertex(vertices, ref topVertex, ref botVertex); // Lower The Edge Vertices vertices = LowerEdges(vertices); // Colors Color[] colors = new Color[arraySize]; for (int i = 0, z = 0; z < terrainSize + 1; z++) { for (int x = 0; x < terrainSize + 1; x++) { float height = vertices[i].y; if (height < botVertex) { height = botVertex; } height = Mathf.InverseLerp((float)botVertex, (float)topVertex, height); colors[i] = gradient.Evaluate(height); i++; } } // Set ObjectGenerator Vertices Before Flat Shading objectGenerator.vertices = vertices; // Flat Shader Code Vector3[] flatShadedVertices = new Vector3[triangles.Length]; Vector2[] flatShadedUvs = new Vector2[triangles.Length]; Color[] flatShadedColors = new Color[triangles.Length]; for (int i = 0; i < triangles.Length; i++) { flatShadedVertices[i] = vertices[triangles[i]]; flatShadedUvs[i] = uvs[triangles[i]]; flatShadedColors[i] = colors[triangles[i]]; triangles[i] = i; } vertices = flatShadedVertices; uvs = flatShadedUvs; colors = flatShadedColors; // Set Mesh to newMesh newMesh.indexFormat = UnityEngine.Rendering.IndexFormat.UInt32; newMesh.vertices = vertices; newMesh.triangles = triangles; newMesh.colors = colors; newMesh.RecalculateNormals(); GetComponent <MeshFilter>().mesh = newMesh; GetComponent <MeshCollider>().sharedMesh = newMesh; gameObject.transform.position = new Vector3(terrainSize / 2, 0f, terrainSize / 2); water.transform.position = new Vector3(terrainSize / 2, 9f, terrainSize / 2); if (terrainSize == 128) { water.transform.localScale = new Vector3(0.5f, 0.5f, 0.5f); } simsettings.stage += 1; }
// Start is called before the first frame update void Start() { simSettings = FindObjectOfType <SimSettings>(); StartCoroutine("spawnNewPlant"); }
public void GenerateObjects() { SimSettings simSettings = FindObjectOfType <SimSettings>(); int terrainSize = simSettings.terrainSize; int objectThickness = simSettings.objectThickness; bool[,] usedBlocks = new bool[terrainSize, terrainSize]; float[,] bottomHeights = new float[terrainSize, terrainSize]; float[,] blockHeights = new float[terrainSize, terrainSize]; // Set Array Heights for (int i = 0; i < terrainSize; i++) { for (int v = 0; v < terrainSize; v++) { float botHeight = Mathf.Infinity; float topHeight = Mathf.NegativeInfinity; int[] corners = new int[] { (i * terrainSize) + v + i, (i * terrainSize) + v + i + 1, (i * terrainSize) + terrainSize + i + v + 1, (i * terrainSize) + terrainSize + i + v + 2, }; foreach (int position in corners) { if (vertices[position].y > topHeight) { topHeight = vertices[position].y; } if (vertices[position].y < botHeight) { botHeight = vertices[position].y; } } blockHeights[terrainSize - 1 - v, i] = (topHeight + botHeight) / 2; bottomHeights[terrainSize - 1 - v, i] = botHeight; } } for (int i = 0; i < terrainSize; i++) { for (int v = 0; v < terrainSize; v++) { float xCoord = (v / 40f) + simSettings.objectOffset; float zCoord = (i / 40f) + simSettings.objectOffset; float tempPerlin = Mathf.PerlinNoise(xCoord, zCoord); if (tempPerlin <= 0) { tempPerlin = 0.0001f; } int isSpawn = Random.Range(0, (int)Mathf.Round(objectThickness / tempPerlin)); int rotation = Random.Range(0, 3); int whatObject = Random.Range(0, objects.Length); if (bottomHeights[v, i] > 10 && isSpawn == 5) { GameObject newObject = Instantiate(objects[whatObject], new Vector3(v + 0.5f, bottomHeights[v, i], terrainSize - i - 0.5f), Quaternion.Euler(0, rotation * 90f, 0)); newObject.transform.parent = gameObject.transform; usedBlocks[v, i] = true; } } } simSettings.blockHeights = blockHeights; simSettings.usedBlocks = usedBlocks; simSettings.stage += 1; }
public void GenerateAnimals() { SimSettings simSettings = FindObjectOfType <SimSettings>(); Stat[] rabbitParentStats = new Stat[] { simSettings.defaultRabbitStat, simSettings.defaultRabbitStat }; Stat[] foxParentStats = new Stat[] { simSettings.defaultFoxStat, simSettings.defaultFoxStat }; Stat[] wolfParentStats = new Stat[] { simSettings.defaultWolfStat, simSettings.defaultWolfStat }; int rabbitsLeft = simSettings.rabbits; int foxesLeft = simSettings.foxes; int wolvesLeft = simSettings.wolves; int xPos; int yPos; while (true) { if (rabbitsLeft == 0) { break; } xPos = Random.Range(0, simSettings.terrainSize); yPos = Random.Range(0, simSettings.terrainSize); if (!simSettings.usedBlocks[xPos, yPos] && simSettings.blockHeights[xPos, yPos] >= 11) { GameObject newAnimal = Instantiate(rabbit, new Vector3(xPos + 0.5f, simSettings.blockHeights[xPos, yPos], simSettings.terrainSize - yPos - 0.5f), Quaternion.identity); Animal script = newAnimal.GetComponent <Animal>(); script.xPos = xPos; script.yPos = yPos; script.parentStats = rabbitParentStats; simSettings.usedBlocks[xPos, yPos] = true; newAnimal.transform.parent = gameObject.transform; rabbitsLeft -= 1; } } while (true) { if (foxesLeft == 0) { break; } xPos = Random.Range(0, simSettings.terrainSize); yPos = Random.Range(0, simSettings.terrainSize); if (!simSettings.usedBlocks[xPos, yPos] && simSettings.blockHeights[xPos, yPos] >= 11) { GameObject newAnimal = Instantiate(fox, new Vector3(xPos + 0.5f, simSettings.blockHeights[xPos, yPos], simSettings.terrainSize - yPos - 0.5f), Quaternion.identity); Animal script = newAnimal.GetComponent <Animal>(); script.xPos = xPos; script.yPos = yPos; script.parentStats = foxParentStats; simSettings.usedBlocks[xPos, yPos] = true; newAnimal.transform.parent = gameObject.transform; foxesLeft -= 1; } } while (true) { if (wolvesLeft == 0) { break; } xPos = Random.Range(0, simSettings.terrainSize); yPos = Random.Range(0, simSettings.terrainSize); if (!simSettings.usedBlocks[xPos, yPos] && simSettings.blockHeights[xPos, yPos] >= 11) { GameObject newAnimal = Instantiate(wolf, new Vector3(xPos + 0.5f, simSettings.blockHeights[xPos, yPos], simSettings.terrainSize - yPos - 0.5f), Quaternion.identity); Animal script = newAnimal.GetComponent <Animal>(); script.xPos = xPos; script.yPos = yPos; script.parentStats = wolfParentStats; simSettings.usedBlocks[xPos, yPos] = true; newAnimal.transform.parent = gameObject.transform; wolvesLeft -= 1; } } simSettings.stage += 1; }