private void CreateEnvironment() { GameObject environmentGO = new GameObject("environment"); Environment environmentScript = environmentGO.AddComponent <Environment>(); currentEnvironment = environmentScript; environmentGO.transform.parent = gameObject.transform; environmentGO.transform.localPosition = new Vector3(0f, 0f, 0f); if (currentEvalTicket.environmentGenome.gameplayPrefab == null) { // This might only work if environment is completely static!!!! otherwise it could change inside original evalInstance and then that // changed environment would be instantiated as fresh Environments for subsequent Evals! environmentScript.CreateCollisionAndGameplayContent(currentEvalTicket.environmentGenome); } else { // Already built CollisionHitEffects collideFX = currentEvalTicket.environmentGenome.gameplayPrefab.groundCollision.GetComponent <CollisionHitEffects>(); bool prefabState = false; if (collideFX != null) { //currentEnvironment.environmentGameplay.groundCollision.GetComponent<CollisionHitEffects>().active = false; prefabState = collideFX.active; collideFX.active = false; //Destroy(collideFX); } EnvironmentGameplay environmentGameplayScript = Instantiate <EnvironmentGameplay>(currentEvalTicket.environmentGenome.gameplayPrefab) as EnvironmentGameplay; // restore state after instantiation: if (collideFX != null) { collideFX.active = prefabState; } currentEnvironment.environmentGameplay = environmentGameplayScript; //CollisionHitEffects collideFX = currentEnvironment.environmentGameplay.groundCollision.GetComponent<CollisionHitEffects>(); currentEnvironment.environmentGameplay.gameObject.transform.parent = currentEnvironment.gameObject.transform; currentEnvironment.environmentGameplay.gameObject.transform.localPosition = new Vector3(0f, 0f, 0f); } }
public void AddRenderableContent(EnvironmentGenome genome) { // Wrappe Object: GameObject environmentRenderableGO = new GameObject("environmentRenderable"); environmentRenderable = environmentRenderableGO.AddComponent <EnvironmentRenderable>(); environmentRenderable.transform.parent = gameObject.transform; environmentRenderable.transform.localPosition = new Vector3(0f, 0f, 0f); Material mat = Resources.Load("Materials/Environments/terrainC", typeof(Material)) as Material; //new Material(Shader.Find("Standard")); mat.color = new Color(genome.terrainGenome.color.x, genome.terrainGenome.color.y, genome.terrainGenome.color.z); mat.SetTexture("_MainTex", TerrainConstructorGPU.customHeightRT); mat.SetColor("_PriHueRock", new Color(genome.terrainGenome.primaryHueRock.x, genome.terrainGenome.primaryHueRock.y, genome.terrainGenome.primaryHueRock.z)); mat.SetColor("_SecHueRock", new Color(genome.terrainGenome.secondaryHueRock.x, genome.terrainGenome.secondaryHueRock.y, genome.terrainGenome.secondaryHueRock.z)); mat.SetColor("_PriHueSedi", new Color(genome.terrainGenome.primaryHueSediment.x, genome.terrainGenome.primaryHueSediment.y, genome.terrainGenome.primaryHueSediment.z)); mat.SetColor("_SecHueSedi", new Color(genome.terrainGenome.secondaryHueSediment.x, genome.terrainGenome.secondaryHueSediment.y, genome.terrainGenome.secondaryHueSediment.z)); mat.SetColor("_PriHueSnow", new Color(genome.terrainGenome.primaryHueSnow.x, genome.terrainGenome.primaryHueSnow.y, genome.terrainGenome.primaryHueSnow.z)); mat.SetColor("_SecHueSnow", new Color(genome.terrainGenome.secondaryHueSnow.x, genome.terrainGenome.secondaryHueSnow.y, genome.terrainGenome.secondaryHueSnow.z)); GameObject terrainManagerGO = new GameObject("terrainManager"); terrainManagerGO.transform.parent = environmentRenderable.transform; terrainManagerGO.transform.localPosition = Vector3.zero; TerrainManager terrainManager = terrainManagerGO.AddComponent <TerrainManager>(); Debug.Log("TERRAIN AddRenderableContent!"); // Set Data on Constructor: //TerrainConstructorGPU.terrainConstructorGPUCompute = this.terrainConstructorGPUCompute; // set in GameManager Start() // Set Cascade Height Textures: //TerrainConstructorGPU.heightMapCascadeTextures = heightMapCascadeTextures; //TerrainConstructorGPU.terrainDisplayMaterial = mat; //TerrainConstructorGPU.ClearCustomHeightRT(); TerrainConstructorGPU.RestoreCameraClearMode(); TerrainConstructorGPU.GenerateTerrainTexturesFromGenome(genome, true); terrainManager.Initialize(terrainManagerGO, genome, mat, new Vector2(gameObject.transform.position.x, gameObject.transform.position.z), new Vector2(Challenge.GetChallengeArenaBounds(genome.challengeType).x * 17f, Challenge.GetChallengeArenaBounds(genome.challengeType).z * 17f), 6); // FOOTSTEPS!!! :::: CollisionHitEffects hitFX = environmentGameplay.groundCollision.AddComponent <CollisionHitEffects>(); hitFX.active = true; hitFX.partCustomHeight = GameManager.customHeightParticleStatic.GetComponent <ParticleSystem>(); // super hacky, f*****g hate this hitFX.partCustomHeight.Clear(); hitFX.partImpactDust = GameManager.impactDustParticleStatic.GetComponent <ParticleSystem>(); hitFX.partImpactDust.Clear(); hitFX.partImpactPebbles = GameManager.impactPebblesParticleStatic.GetComponent <ParticleSystem>(); hitFX.partImpactPebbles.Clear(); // Grab Material detail textures from TerrainConstructorGPU, then: mat.SetTexture("_RockHeightDetailTex", TerrainConstructorGPU.detailTexRock); mat.SetTexture("_SediHeightDetailTex", TerrainConstructorGPU.detailTexSedi); mat.SetTexture("_SnowHeightDetailTex", TerrainConstructorGPU.detailTexSnow); // Grab Debug Mesh ( Eventually Grab 3DMC mesh from GPUConstructor) Material pebbleMat = Resources.Load("Materials/Environments/indirectInstancePebbleMat", typeof(Material)) as Material; pebbleMat.SetPass(0); pebbleMat.SetColor("_BaseColorPrimary", new Color(genome.terrainGenome.primaryHueSediment.x, genome.terrainGenome.primaryHueSediment.y, genome.terrainGenome.primaryHueSediment.z)); pebbleMat.SetColor("_BaseColorSecondary", new Color(genome.terrainGenome.secondaryHueSediment.x, genome.terrainGenome.secondaryHueSediment.y, genome.terrainGenome.secondaryHueSediment.z)); Material rockMat = Resources.Load("Materials/Environments/indirectInstanceRockMat", typeof(Material)) as Material; rockMat.SetPass(0); rockMat.SetColor("_PriHueRock", new Color(genome.terrainGenome.primaryHueRock.x, genome.terrainGenome.primaryHueRock.y, genome.terrainGenome.primaryHueRock.z)); rockMat.SetColor("_SecHueRock", new Color(genome.terrainGenome.secondaryHueRock.x, genome.terrainGenome.secondaryHueRock.y, genome.terrainGenome.secondaryHueRock.z)); rockMat.SetColor("_PriHueSedi", new Color(genome.terrainGenome.primaryHueSediment.x, genome.terrainGenome.primaryHueSediment.y, genome.terrainGenome.primaryHueSediment.z)); rockMat.SetColor("_SecHueSedi", new Color(genome.terrainGenome.secondaryHueSediment.x, genome.terrainGenome.secondaryHueSediment.y, genome.terrainGenome.secondaryHueSediment.z)); rockMat.SetColor("_PriHueSnow", new Color(genome.terrainGenome.primaryHueSnow.x, genome.terrainGenome.primaryHueSnow.y, genome.terrainGenome.primaryHueSnow.z)); rockMat.SetColor("_SecHueSnow", new Color(genome.terrainGenome.secondaryHueSnow.x, genome.terrainGenome.secondaryHueSnow.y, genome.terrainGenome.secondaryHueSnow.z)); rockMat.SetTexture("_HeightTex", TerrainConstructorGPU.heightMapCascadeTexturesRender[0]); rockMat.SetTexture("_RockHeightDetailTex", TerrainConstructorGPU.detailTexRock); rockMat.SetTexture("_SediHeightDetailTex", TerrainConstructorGPU.detailTexSedi); rockMat.SetTexture("_SnowHeightDetailTex", TerrainConstructorGPU.detailTexSnow); // Need to create a new material or it all goes t**s up //Material rockReliefArenaMat = new Material(Shader.Find("Instanced/indirectInstanceRockMat")); //Material rockReliefArenaMat = Resources.Load("Materials/Environments/indirectInstanceRockMat", typeof(Material)) as Material; Material rockReliefArenaMat = Resources.Load("Materials/Environments/indirectInstanceRockReliefArenaMat", typeof(Material)) as Material; rockReliefArenaMat.SetPass(0); rockReliefArenaMat.SetColor("_PriHueRock", new Color(genome.terrainGenome.primaryHueRock.x, genome.terrainGenome.primaryHueRock.y, genome.terrainGenome.primaryHueRock.z)); rockReliefArenaMat.SetColor("_SecHueRock", new Color(genome.terrainGenome.secondaryHueRock.x, genome.terrainGenome.secondaryHueRock.y, genome.terrainGenome.secondaryHueRock.z)); rockReliefArenaMat.SetColor("_PriHueSedi", new Color(genome.terrainGenome.primaryHueSediment.x, genome.terrainGenome.primaryHueSediment.y, genome.terrainGenome.primaryHueSediment.z)); rockReliefArenaMat.SetColor("_SecHueSedi", new Color(genome.terrainGenome.secondaryHueSediment.x, genome.terrainGenome.secondaryHueSediment.y, genome.terrainGenome.secondaryHueSediment.z)); rockReliefArenaMat.SetColor("_PriHueSnow", new Color(genome.terrainGenome.primaryHueSnow.x, genome.terrainGenome.primaryHueSnow.y, genome.terrainGenome.primaryHueSnow.z)); rockReliefArenaMat.SetColor("_SecHueSnow", new Color(genome.terrainGenome.secondaryHueSnow.x, genome.terrainGenome.secondaryHueSnow.y, genome.terrainGenome.secondaryHueSnow.z)); rockReliefArenaMat.SetTexture("_HeightTex", TerrainConstructorGPU.heightMapCascadeTexturesRender[0]); rockReliefArenaMat.SetTexture("_RockHeightDetailTex", TerrainConstructorGPU.detailTexRock); rockReliefArenaMat.SetTexture("_SediHeightDetailTex", TerrainConstructorGPU.detailTexSedi); rockReliefArenaMat.SetTexture("_SnowHeightDetailTex", TerrainConstructorGPU.detailTexSnow); Material rockCliffsMat = Resources.Load("Materials/Environments/indirectInstanceRockCliffsMat", typeof(Material)) as Material; rockCliffsMat.SetPass(0); rockCliffsMat.SetColor("_PriHueRock", new Color(genome.terrainGenome.primaryHueRock.x, genome.terrainGenome.primaryHueRock.y, genome.terrainGenome.primaryHueRock.z)); rockCliffsMat.SetColor("_SecHueRock", new Color(genome.terrainGenome.secondaryHueRock.x, genome.terrainGenome.secondaryHueRock.y, genome.terrainGenome.secondaryHueRock.z)); rockCliffsMat.SetColor("_PriHueSedi", new Color(genome.terrainGenome.primaryHueSediment.x, genome.terrainGenome.primaryHueSediment.y, genome.terrainGenome.primaryHueSediment.z)); rockCliffsMat.SetColor("_SecHueSedi", new Color(genome.terrainGenome.secondaryHueSediment.x, genome.terrainGenome.secondaryHueSediment.y, genome.terrainGenome.secondaryHueSediment.z)); rockCliffsMat.SetColor("_PriHueSnow", new Color(genome.terrainGenome.primaryHueSnow.x, genome.terrainGenome.primaryHueSnow.y, genome.terrainGenome.primaryHueSnow.z)); rockCliffsMat.SetColor("_SecHueSnow", new Color(genome.terrainGenome.secondaryHueSnow.x, genome.terrainGenome.secondaryHueSnow.y, genome.terrainGenome.secondaryHueSnow.z)); rockCliffsMat.SetTexture("_HeightTex", TerrainConstructorGPU.heightMapCascadeTexturesRender[0]); rockCliffsMat.SetTexture("_RockHeightDetailTex", TerrainConstructorGPU.detailTexRock); rockCliffsMat.SetTexture("_SediHeightDetailTex", TerrainConstructorGPU.detailTexSedi); rockCliffsMat.SetTexture("_SnowHeightDetailTex", TerrainConstructorGPU.detailTexSnow); // CLUSTERS::::: Material vistaRockClusterMat = Resources.Load("Materials/Environments/indirectInstanceVistaRockClusterMat", typeof(Material)) as Material; vistaRockClusterMat.SetPass(0); vistaRockClusterMat.SetColor("_PriHueRock", new Color(genome.terrainGenome.primaryHueRock.x, genome.terrainGenome.primaryHueRock.y, genome.terrainGenome.primaryHueRock.z)); vistaRockClusterMat.SetColor("_SecHueRock", new Color(genome.terrainGenome.secondaryHueRock.x, genome.terrainGenome.secondaryHueRock.y, genome.terrainGenome.secondaryHueRock.z)); vistaRockClusterMat.SetColor("_PriHueSedi", new Color(genome.terrainGenome.primaryHueSediment.x, genome.terrainGenome.primaryHueSediment.y, genome.terrainGenome.primaryHueSediment.z)); vistaRockClusterMat.SetColor("_SecHueSedi", new Color(genome.terrainGenome.secondaryHueSediment.x, genome.terrainGenome.secondaryHueSediment.y, genome.terrainGenome.secondaryHueSediment.z)); vistaRockClusterMat.SetColor("_PriHueSnow", new Color(genome.terrainGenome.primaryHueSnow.x, genome.terrainGenome.primaryHueSnow.y, genome.terrainGenome.primaryHueSnow.z)); vistaRockClusterMat.SetColor("_SecHueSnow", new Color(genome.terrainGenome.secondaryHueSnow.x, genome.terrainGenome.secondaryHueSnow.y, genome.terrainGenome.secondaryHueSnow.z)); vistaRockClusterMat.SetTexture("_HeightTex", TerrainConstructorGPU.heightMapCascadeTexturesRender[0]); vistaRockClusterMat.SetTexture("_RockHeightDetailTex", TerrainConstructorGPU.detailTexRock); vistaRockClusterMat.SetTexture("_SediHeightDetailTex", TerrainConstructorGPU.detailTexSedi); vistaRockClusterMat.SetTexture("_SnowHeightDetailTex", TerrainConstructorGPU.detailTexSnow); // OBSTACLES::::: Material obstacleRockMat = Resources.Load("Materials/Environments/indirectInstanceObstacleRockMat", typeof(Material)) as Material; obstacleRockMat.SetPass(0); obstacleRockMat.SetColor("_PriHueRock", new Color(genome.terrainGenome.primaryHueRock.x, genome.terrainGenome.primaryHueRock.y, genome.terrainGenome.primaryHueRock.z)); obstacleRockMat.SetColor("_SecHueRock", new Color(genome.terrainGenome.secondaryHueRock.x, genome.terrainGenome.secondaryHueRock.y, genome.terrainGenome.secondaryHueRock.z)); obstacleRockMat.SetColor("_PriHueSedi", new Color(genome.terrainGenome.primaryHueSediment.x, genome.terrainGenome.primaryHueSediment.y, genome.terrainGenome.primaryHueSediment.z)); obstacleRockMat.SetColor("_SecHueSedi", new Color(genome.terrainGenome.secondaryHueSediment.x, genome.terrainGenome.secondaryHueSediment.y, genome.terrainGenome.secondaryHueSediment.z)); obstacleRockMat.SetColor("_PriHueSnow", new Color(genome.terrainGenome.primaryHueSnow.x, genome.terrainGenome.primaryHueSnow.y, genome.terrainGenome.primaryHueSnow.z)); obstacleRockMat.SetColor("_SecHueSnow", new Color(genome.terrainGenome.secondaryHueSnow.x, genome.terrainGenome.secondaryHueSnow.y, genome.terrainGenome.secondaryHueSnow.z)); obstacleRockMat.SetTexture("_HeightTex", TerrainConstructorGPU.heightMapCascadeTexturesRender[0]); obstacleRockMat.SetTexture("_RockHeightDetailTex", TerrainConstructorGPU.detailTexRock); obstacleRockMat.SetTexture("_SediHeightDetailTex", TerrainConstructorGPU.detailTexSedi); obstacleRockMat.SetTexture("_SnowHeightDetailTex", TerrainConstructorGPU.detailTexSnow); // Grab reference to ComputeShader set on TerrainConstructorGPU (by gameManager through inspector) environmentRenderable.InitializeInstancedGeometry(genome, TerrainConstructorGPU.rockAMesh2, pebbleMat, TerrainConstructorGPU.rockAMesh1, rockMat, TerrainConstructorGPU.rockAMesh1, rockReliefArenaMat, TerrainConstructorGPU.rockAMesh1, rockCliffsMat, TerrainConstructorGPU.rockAMesh0, vistaRockClusterMat, TerrainConstructorGPU.rockAMesh0, obstacleRockMat, TerrainConstructorGPU.terrainInstanceCompute); /*environmentRenderable.groundRenderable = new GameObject("groundRenderable"); * Mesh topology = GetTerrainMesh(genome, 100, 100, Challenge.GetChallengeArenaBounds(genome.challengeType).x, Challenge.GetChallengeArenaBounds(genome.challengeType).z); * environmentRenderable.groundRenderable.AddComponent<MeshFilter>().sharedMesh = topology; * environmentRenderable.groundRenderable.AddComponent<MeshRenderer>().material = mat; * environmentRenderable.groundRenderable.transform.parent = environmentRenderable.gameObject.transform; * environmentRenderable.groundRenderable.transform.localPosition = new Vector3(0f, 0f, 0f); */ // Target !!! if (genome.useTargetColumn) { GameObject targetColumn = Instantiate(Resources.Load("Prefabs/ObjectPrefabs/targetLocation")) as GameObject; targetColumn.transform.parent = environmentRenderable.gameObject.transform; targetColumn.transform.localPosition = environmentGameplay.targetColumn.gameObject.transform.localPosition; //environmentGameplay.targetColumn.GetComponent<MeshRenderer>().enabled = true; // hide } // Obstacles: if (genome.useBasicObstacles) { for (int i = 0; i < environmentGameplay.obstacles.Count; i++) { GameObject obstacle; UnityEngine.Random.InitState(genome.basicObstaclesGenome.randomSeed + i); // Set Seed from Genome (experimental) int meshID = Mathf.RoundToInt(UnityEngine.Random.Range(0f, 2f)); if (meshID == 0) { obstacle = Instantiate(Resources.Load("Prefabs/ObjectPrefabs/obstacleBoulder00")) as GameObject; } else if (meshID == 1) { obstacle = Instantiate(Resources.Load("Prefabs/ObjectPrefabs/obstacleBoulder01")) as GameObject; } else { obstacle = Instantiate(Resources.Load("Prefabs/ObjectPrefabs/obstacleBoulder02")) as GameObject; } //obstacle.GetComponent<MeshFilter>().sharedMesh = boulderMesh; obstacle.transform.parent = environmentRenderable.gameObject.transform; obstacle.transform.localPosition = environmentGameplay.obstacles[i].gameObject.transform.localPosition - new Vector3(0f, UnityEngine.Random.Range(0f, 1f), 0f); obstacle.transform.rotation = Quaternion.Euler(UnityEngine.Random.Range(-10f, 10f), UnityEngine.Random.Range(-180f, 180f), UnityEngine.Random.Range(-10f, 10f)); obstacle.transform.localScale = environmentGameplay.obstacles[i].gameObject.transform.localScale + new Vector3(0f, UnityEngine.Random.Range(0f, 1f), 0f); obstacle.GetComponent <MeshRenderer>().material = obstacleRockMat; /* * obstacle.transform.parent = environmentGameplay.gameObject.transform; * //float x = genome.basicObstaclesGenome.obstaclePositions[i].x * genome.arenaBounds.x - genome.arenaBounds.x * 0.5f; * //float z = genome.basicObstaclesGenome.obstaclePositions[i].y * genome.arenaBounds.z - genome.arenaBounds.z * 0.5f; * float x = genome.basicObstaclesGenome.obstaclePositions[i].x * genome.arenaBounds.x - genome.arenaBounds.x * 0.5f; * float z = genome.basicObstaclesGenome.obstaclePositions[i].y * genome.arenaBounds.z - genome.arenaBounds.z * 0.5f; * if (genome.useTargetColumn) { * float distToTarget = (new Vector2(environmentGameplay.targetColumn.transform.localPosition.x, environmentGameplay.targetColumn.transform.localPosition.z) - new Vector2(x, z)).magnitude; * if(distToTarget < genome.basicObstaclesGenome.obstacleScales[i] * 0.6f) { * obstacle.SetActive(false); * } * } * float y = TerrainConstructor.GetAltitude(genome, x, z) + 0.5f; * obstacle.transform.localScale = new Vector3(genome.basicObstaclesGenome.obstacleScales[i], 1f, genome.basicObstaclesGenome.obstacleScales[i]); * obstacle.transform.localPosition = new Vector3(x, y, z); */ /* * * // SUB-BOULDERS!!! * int numSubBoulders = Mathf.RoundToInt(UnityEngine.Random.Range(2f, 4f)); * for (int j = 0; j < numSubBoulders; j++) { * GameObject subBoulder; * int boulderID = Mathf.RoundToInt(UnityEngine.Random.Range(0f, 2f)); * if (boulderID == 0) { * subBoulder = Instantiate(Resources.Load("Prefabs/ObjectPrefabs/obstacleBoulder00")) as GameObject; * } * else if (boulderID == 1) { * subBoulder = Instantiate(Resources.Load("Prefabs/ObjectPrefabs/obstacleBoulder01")) as GameObject; * } * else { * subBoulder = Instantiate(Resources.Load("Prefabs/ObjectPrefabs/obstacleBoulder02")) as GameObject; * } * float randScale = UnityEngine.Random.Range(0.2f, 0.6f); * //float randScaleY = UnityEngine.Random.Range(0.2f, 0.6f); * //float randScaleZ = UnityEngine.Random.Range(0.2f, 0.6f); * subBoulder.transform.parent = environmentRenderable.gameObject.transform; * * float radius = UnityEngine.Random.Range(environmentGameplay.obstacles[i].gameObject.transform.localScale.x * 0.5f, environmentGameplay.obstacles[i].gameObject.transform.localScale.x * 0.95f); * float randAngle = UnityEngine.Random.Range(-Mathf.PI, Mathf.PI); * float xPos = Mathf.Sin(randAngle) * radius; * float zPos = Mathf.Cos(randAngle) * radius; * float yPos = TerrainConstructor.GetAltitude(genome, xPos + environmentGameplay.obstacles[i].gameObject.transform.localPosition.x, zPos + environmentGameplay.obstacles[i].gameObject.transform.localPosition.z); * Vector3 pos = new Vector3(Mathf.Sin(randAngle) * radius + environmentGameplay.obstacles[i].gameObject.transform.localPosition.x, yPos - UnityEngine.Random.Range(randScale * 0.05f, randScale * 0.2f) * environmentGameplay.obstacles[i].gameObject.transform.localScale.y, Mathf.Cos(randAngle) + environmentGameplay.obstacles[i].gameObject.transform.localPosition.z); * * subBoulder.transform.localPosition = pos; * subBoulder.transform.rotation = Quaternion.Euler(UnityEngine.Random.Range(-180f, 180f), UnityEngine.Random.Range(-180f, 180f), UnityEngine.Random.Range(-180f, 180f)); * Vector3 scale = new Vector3(environmentGameplay.obstacles[i].gameObject.transform.localScale.x * randScale, environmentGameplay.obstacles[i].gameObject.transform.localScale.y * randScale, environmentGameplay.obstacles[i].gameObject.transform.localScale.z * randScale); * subBoulder.transform.localScale = scale; * subBoulder.GetComponent<MeshRenderer>().material = mat; * } * * // PEBBLES!!! * int numPebbles = Mathf.RoundToInt(UnityEngine.Random.Range(5f, 20f)); * for (int k = 0; k < numPebbles; k++) { * GameObject pebble; * int boulderID = Mathf.RoundToInt(UnityEngine.Random.Range(0f, 2f)); * if (boulderID == 0) { * pebble = Instantiate(Resources.Load("Prefabs/ObjectPrefabs/obstacleBoulder00")) as GameObject; * } * else if (boulderID == 1) { * pebble = Instantiate(Resources.Load("Prefabs/ObjectPrefabs/obstacleBoulder01")) as GameObject; * } * else { * pebble = Instantiate(Resources.Load("Prefabs/ObjectPrefabs/obstacleBoulder02")) as GameObject; * } * float randScale = UnityEngine.Random.Range(0.05f, 0.25f); * //float randScaleY = UnityEngine.Random.Range(0.05f, 0.25f); * //float randScaleZ = UnityEngine.Random.Range(0.05f, 0.25f); * pebble.transform.parent = environmentRenderable.gameObject.transform; * * float radius = UnityEngine.Random.Range(environmentGameplay.obstacles[i].gameObject.transform.localScale.x * 0.5f, environmentGameplay.obstacles[i].gameObject.transform.localScale.x * 5f); * float randAngle = UnityEngine.Random.Range(-Mathf.PI, Mathf.PI); * float xPos = Mathf.Sin(randAngle) * radius; * float zPos = Mathf.Cos(randAngle) * radius; * float yPos = TerrainConstructor.GetAltitude(genome, xPos + environmentGameplay.obstacles[i].gameObject.transform.localPosition.x, zPos + environmentGameplay.obstacles[i].gameObject.transform.localPosition.z); * Vector3 pos = new Vector3(Mathf.Sin(randAngle) * radius + environmentGameplay.obstacles[i].gameObject.transform.localPosition.x, yPos - UnityEngine.Random.Range(randScale * 0.05f, randScale * 0.2f) * environmentGameplay.obstacles[i].gameObject.transform.localScale.y, Mathf.Cos(randAngle) * radius + environmentGameplay.obstacles[i].gameObject.transform.localPosition.z); * pebble.transform.localPosition = pos; * pebble.transform.rotation = Quaternion.Euler(UnityEngine.Random.Range(-180f, 180f), UnityEngine.Random.Range(-180f, 180f), UnityEngine.Random.Range(-180f, 180f)); * Vector3 scale = new Vector3(environmentGameplay.obstacles[i].gameObject.transform.localScale.x * randScale, environmentGameplay.obstacles[i].gameObject.transform.localScale.y * randScale, environmentGameplay.obstacles[i].gameObject.transform.localScale.z * randScale); * pebble.transform.localScale = scale; * pebble.GetComponent<MeshRenderer>().material = mat; * } * * // Exterior Boulders!!! * // PEBBLES!!! * int numVistaRocks = Mathf.RoundToInt(UnityEngine.Random.Range(20f, 40f)); * for (int m = 0; m < numVistaRocks; m++) { * GameObject vistaRock; * int boulderID = Mathf.RoundToInt(UnityEngine.Random.Range(0f, 2f)); * if (boulderID == 0) { * vistaRock = Instantiate(Resources.Load("Prefabs/ObjectPrefabs/obstacleBoulder00")) as GameObject; * } * else if (boulderID == 1) { * vistaRock = Instantiate(Resources.Load("Prefabs/ObjectPrefabs/obstacleBoulder01")) as GameObject; * } * else { * vistaRock = Instantiate(Resources.Load("Prefabs/ObjectPrefabs/obstacleBoulder02")) as GameObject; * } * float randScale = UnityEngine.Random.Range(0.5f, 3.6f); * //float randScaleY = UnityEngine.Random.Range(0.05f, 0.25f); * //float randScaleZ = UnityEngine.Random.Range(0.05f, 0.25f); * vistaRock.transform.parent = environmentRenderable.gameObject.transform; * * float radius = UnityEngine.Random.Range(Challenge.GetChallengeArenaBounds(Challenge.Type.Test).x * 1.33f, Challenge.GetChallengeArenaBounds(Challenge.Type.Test).x * 4f); * float randAngle = UnityEngine.Random.Range(-Mathf.PI, Mathf.PI); * float xPos = Mathf.Sin(randAngle) * radius; * float zPos = Mathf.Cos(randAngle) * radius; * float yPos = TerrainConstructor.GetAltitude(genome, xPos + environmentGameplay.obstacles[i].gameObject.transform.localPosition.x, zPos + environmentGameplay.obstacles[i].gameObject.transform.localPosition.z); * Vector3 pos = new Vector3(xPos, yPos - UnityEngine.Random.Range(randScale * 0.05f, randScale * 0.2f), zPos); * vistaRock.transform.localPosition = pos; * vistaRock.transform.rotation = Quaternion.Euler(UnityEngine.Random.Range(-180f, 180f), UnityEngine.Random.Range(-180f, 180f), UnityEngine.Random.Range(-180f, 180f)); * Vector3 scale = new Vector3(environmentGameplay.obstacles[i].gameObject.transform.localScale.x * randScale, environmentGameplay.obstacles[i].gameObject.transform.localScale.y * randScale, environmentGameplay.obstacles[i].gameObject.transform.localScale.z * randScale); * vistaRock.transform.localScale = scale; * vistaRock.GetComponent<MeshRenderer>().material = mat; * } */ } // PArticle Pebbles! /* * GameObject particlePebbles = Instantiate(Resources.Load("Prefabs/ObjectPrefabs/obstacleParticles")) as GameObject; * particlePebbles.transform.parent = environmentRenderable.transform; * ParticleSystem.ShapeModule emitterShape = particlePebbles.GetComponent<ParticleSystem>().shape; * emitterShape.mesh = environmentGameplay.groundCollision.GetComponent<MeshCollider>().sharedMesh; * Debug.Log(emitterShape.mesh.ToString()); * ParticleSystem.EmissionModule emission = particlePebbles.GetComponent<ParticleSystem>().emission; * emission.enabled = true; */ } // WALLS: GameObject northWall = Instantiate(Resources.Load("Prefabs/ObjectPrefabs/arenaWall")) as GameObject; // GameObject.CreatePrimitive(PrimitiveType.Quad); northWall.transform.parent = environmentRenderable.gameObject.transform; northWall.transform.localPosition = new Vector3(0f, 0f, genome.arenaBounds.z * 0.5f); northWall.transform.localScale = new Vector3(genome.arenaBounds.x, genome.arenaBounds.y, genome.arenaBounds.z); GameObject southWall = Instantiate(Resources.Load("Prefabs/ObjectPrefabs/arenaWall")) as GameObject; southWall.transform.parent = environmentRenderable.gameObject.transform; southWall.transform.localPosition = new Vector3(0f, 0f, -genome.arenaBounds.z * 0.5f); southWall.transform.localScale = new Vector3(genome.arenaBounds.x, genome.arenaBounds.y, genome.arenaBounds.z); southWall.transform.rotation = Quaternion.Euler(0f, 180f, 0f); GameObject eastWall = Instantiate(Resources.Load("Prefabs/ObjectPrefabs/arenaWall")) as GameObject; eastWall.transform.parent = environmentRenderable.gameObject.transform; eastWall.transform.localPosition = new Vector3(genome.arenaBounds.x * 0.5f, 0f, 0f); eastWall.transform.localScale = new Vector3(genome.arenaBounds.z, genome.arenaBounds.y, genome.arenaBounds.z); eastWall.transform.rotation = Quaternion.Euler(0f, 90f, 0f); GameObject westWall = Instantiate(Resources.Load("Prefabs/ObjectPrefabs/arenaWall")) as GameObject; westWall.transform.parent = environmentRenderable.gameObject.transform; westWall.transform.localPosition = new Vector3(-genome.arenaBounds.x * 0.5f, 0f, 0f); westWall.transform.localScale = new Vector3(genome.arenaBounds.z, genome.arenaBounds.y, genome.arenaBounds.z); westWall.transform.rotation = Quaternion.Euler(0f, -90f, 0f); }