protected virtual GameObject SpawnInternal(Spawnee spawnee) { (GameObject, Spawned)result = spawnee.SpawnNewInstance(this.transform, this); if (result.Item1 != null) { SpawnedNavMeshAgentNavigator navigator = result.Item1.AddComponent <SpawnedNavMeshAgentNavigator>(); if (navigator != null) { try { navigator.EnsureNavMeshAgent(); navigator.SetAreaCostOverrides(this.areaCostOverrides); List <Spawner> otherSpawners = this.GetAllOtherSpawners(); if (otherSpawners == null || otherSpawners.Count == 0) { throw new UnityException("Unable to find other Spawners to use as destination"); } Spawner otherSpawner = otherSpawners[UnityEngine.Random.Range(0, otherSpawners.Count)]; navigator.SetDestination(otherSpawner.transform); return(result.Item1); } catch (System.Exception e) { Debug.LogError(e, this); } } Destroy(result.Item1); } return(null); }
// Update is called once per frame void Update() { if (timeTilSpawn <= 0 && spawned.Count < maxSpawn) { var thing = Instantiate(spawnPrefabs[rand.Next(spawnPrefabs.Count)]).gameObject; var spawnee = new Spawnee { spawned = thing, speed = moveSpeed + (float)rand.NextDouble() * moveVariance }; spawned.Add(spawnee); timeTilSpawn = spawnDelay; setToLeftEdge(thing); } if (timeTilSpawn > 0) { timeTilSpawn -= Time.deltaTime; } foreach (var spawnee in spawned) { if (spawnee.spawned.transform.position.x > topRightCorner.position.x + 3) { setToLeftEdge(spawnee.spawned); } spawnee.spawned.transform.position = new Vector3(spawnee.spawned.transform.position.x + spawnee.speed * Time.deltaTime, spawnee.spawned.transform.position.y); } }
protected virtual void CreateInstance() { spawnee = (Spawnee)Instantiate(model, new Vector3(transform.position.x, transform.position.y, model.gameObject.transform.position.z), model.gameObject.transform.rotation); spawnee.enabled = true; spawnee.gameObject.SetActive(true); spawnee.Tick += new Spawnee.TickHandler(RespawnAfter); }
public void SavePositions() { editModeEnabled = false; if (spawnees == null) { return; } for (int i = 0; i < spawnees.Count; i++) { spawnees[i].SavePos(); if (spawnees[i].enemyName == null) { spawnees.RemoveAt(i); i--; selectedSpawnee = 0; } } int N = transform.childCount; for (int i = 0; i < N; i++) { GameObject currentChild = transform.GetChild(i).gameObject; string name = null; int index = -1; for (int x = 0; x < currentChild.name.Length; x++) //get enemy name from gameObject.name { if (currentChild.name[x] == ' ') { name = currentChild.name.Substring(0, x); x = currentChild.name.Length; } } for (int j = 0; j < data.Count; j++) //look for that enemy in data { if (name == data[j].enemyName) { index = j; } } if (index != -1) { Spawnee temp = new Spawnee(name, index, data[index].mat, currentChild); //give the spawnee a reference to its object spawnees.Add(temp); } } for (int i = spawnees.Count - N; i < spawnees.Count; i++) { spawnees[i].SavePos(); } }
public void AddEnemy(int dataIndex) { if (!editModeEnabled) { Debug.Log("Can only add enemy in edit mode. Press 'ReviewPositions'"); return; } if (dataIndex >= data.Count) { Debug.Log("No data for this index. Data List must match enemy prefabs list in EnemySpawner"); return; } Spawnee temp = new Spawnee(data[dataIndex].enemyName, dataIndex, data[dataIndex].mat); spawnees.Add(temp); }
protected override GameObject SpawnInternal(Spawnee spawnee) { (GameObject, Spawned)result = spawnee.SpawnNewInstance(this.transform, this); if (result.Item1 != null) { SpawnedVelocityNavigator navigator = result.Item1.AddComponent <SpawnedVelocityNavigator>(); if (navigator != null) { navigator.velocity = Utility.RandomWithin(spawnee.speed); return(result.Item1); } Destroy(result.Item1); } return(null); }
private void SpawnAsNeeded() { while (this.spawned.Count < this.MaximumCount) { Spawnee spawnee = this.GetRandomSpawnee(); if (spawnee == null) { Debug.LogError("Unable to retrieve random Spawnee", this); return; } GameObject result = this.SpawnInternal(spawnee); if (result != null) { Debug.Log("Spawned new instance from " + spawnee, this); // of " + newInstance + " this.spawned.Add(result); } else { Debug.LogError("Unable to spawn new instance from " + spawnee, this); return; } } }