Exemplo n.º 1
0
    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);
    }
Exemplo n.º 2
0
    // 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);
        }
    }
Exemplo n.º 3
0
 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);
    }
Exemplo n.º 6
0
    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);
    }
Exemplo n.º 7
0
    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;
            }
        }
    }