//IEnumerator SpawnTerrainType(int terrainCount, GameObject[] terrainShapes, Transform[] spawnBoxes){ void SpawnTerrainType(int terrainCount, GameObject[] terrainShapes, ISpawnGenerator spawnGenerator) { // generate spawn points var spawnPoints = spawnGenerator.Generate(terrainCount); for (int i = 0; i < terrainCount; i++) { GameObject tempGO = GameObject.Instantiate(terrainShapes [Random.Range(0, terrainShapes.Length)]); var spawnLocation = spawnPoints[i]; // pick seed for each deformation var seed = Random.Range(1, 1 << 24); tdManager.ApplyDeform(tempGO.GetComponent <TerrainDeformer>(), spawnLocation, seed); } }
public void ServerSpawnN(int n) { // only spawn up to max loot boxes n = Mathf.Min(maxLootBoxes - activeLootBoxes, n); if (n <= 0) { return; } // generate spawn locations var locations = locationGenerator.Generate(n); // iterate through spawn locations foreach (var location in locations) { // check exclusions var excluded = false; foreach (var exclusion in exclusions) { if (exclusion.ExcludeSpawn(location)) { excluded = true; break; } } if (excluded) { // too close // Debug.Log("spawn excluded, too close to player"); continue; } // get final ground position var finalPosition = GroundPosition(location) + new Vector3(0, 1, 0); // spawn lootbox var lootboxPrefab = PrefabRegistry.singleton.GetPrefab <SpawnKind>(SpawnKind.lootbox); GameObject lootboxGo = Instantiate(lootboxPrefab, finalPosition, Quaternion.identity) as GameObject; NetworkServer.Spawn(lootboxGo); // actually assign loot ProjectileKind ammoKind; while (true) { ammoKind = FindAmmoKind(); if (!excludedProjectiles.Contains(ammoKind)) { break; } } var ammoAmount = UnityEngine.Random.Range(minAmmoCount, maxAmmoCount + 1); switch (ammoKind) { case ProjectileKind.beetMissile: case ProjectileKind.pillarShot: ammoAmount = 1; break; case ProjectileKind.mushboom: mushboomCount++; ammoAmount = 1; break; } lootboxGo.GetComponent <LootBoxController>().AssignLoot(ammoKind, ammoAmount); var health = lootboxGo.GetComponent <Health>(); if (health != null) { health.onDeathEvent.AddListener(OnLootBoxDestroy); } // increment # of active loot boxes that are tracked activeLootBoxes++; } if (minMushbooms < maxMushbooms) { minMushbooms += 2; } }