示例#1
0
    public GameObject spawnNewEnemy(LevelStage diff, float time)
    {
        if (diff != lastSpawnStage)
        {
            lastSpawnStage = diff;
            if (spawnTable != null)
            {
                completeSpawnTable.AddRange(spawnTable.getTable(diff));
            }
        }

        if (cooldownCounter >= spawnCooldown && completeSpawnTable.Count > 0 && spawnedEnemies.Count < maxEnemies)
        {
            cooldownCounter = 0;

            int randIndex = Random.Range(0, completeSpawnTable.Count);
            if (diff == LevelStage.Medium)
            {
                randIndex = Random.Range(randIndex, completeSpawnTable.Count);
            }
            if (diff == LevelStage.VeryHard)
            {
                randIndex = Random.Range(randIndex, completeSpawnTable.Count);
            }

            SpawnTableDetails entry    = completeSpawnTable[randIndex];
            GameObject        newEnemy = Instantiate(entry.enemyType, transform.position, transform.rotation);
            Enemy             enClass  = newEnemy.GetComponent <Enemy>();
            enClass.stats = calcStats(entry.maxStats, diff, time);

            float hue = (360 * enClass.stats.maxHealth / entry.maxStats.maxHealth) + 60;
            if (hue > 360)
            {
                hue = 0;
            }
            float sat = enClass.stats.maxHealth == entry.maxStats.minHealth ? 0 : 100;

            if (newEnemy.name.StartsWith("GroundEnemy"))
            {
                newEnemy.GetComponentInChildren <Renderer>().materials[1].color = Color.HSVToRGB(hue / 360, sat / 100, 1);
            }
            else
            {
                newEnemy.GetComponentInChildren <Renderer>().material.color = Color.HSVToRGB(hue / 360, sat / 100, 1);
            }


            spawnedEnemies.Add(newEnemy);
            Instantiate(particleEffect, transform.position, transform.rotation);
            return(newEnemy);
        }
        else
        {
            return(null);
        }
    }
示例#2
0
    private void trySpawnFlying()
    {
        //Vector3 spawnPos = new Vector3(Random.Range(minBound.x, maxBound.x), Random.Range(minBound.y, maxBound.y), Random.Range(minBound.z, maxBound.z));
        Vector3 spawnPos = Random.insideUnitSphere * 100;

        if (spawnPos.y < 0)
        {
            spawnPos.y = -spawnPos.y;
        }
        spawnPos += player.transform.position;

        Collider[] test = Physics.OverlapSphere(spawnPos, 2.25f);
        if (test.Length == 0)
        {
            if (completeSpawnTable.Count > 0)
            {
                int randIndex = Random.Range(0, completeSpawnTable.Count);
                if (stage == LevelStage.Medium)
                {
                    randIndex = Random.Range(randIndex, completeSpawnTable.Count);
                }
                if (stage == LevelStage.VeryHard)
                {
                    randIndex = Random.Range(randIndex, completeSpawnTable.Count);
                }

                SpawnTableDetails entry    = completeSpawnTable[randIndex];
                GameObject        newEnemy = Instantiate(entry.enemyType, spawnPos, entry.enemyType.transform.rotation);
                Enemy             enClass  = newEnemy.GetComponent <Enemy>();
                enClass.stats = SpawnManager.calcStats(entry.maxStats, stage, timeElapsed);

                float hue = (360 * enClass.stats.maxHealth / entry.maxStats.maxHealth) + 60;
                if (hue > 360)
                {
                    hue = 0;
                }
                float sat = enClass.stats.maxHealth == entry.maxStats.minHealth ? 0 : 100;
                newEnemy.GetComponentInChildren <Renderer>().material.color = Color.HSVToRGB(hue / 360, sat / 100, 1);
                enemiesSpawned.Add(newEnemy);

                if (newEnemy.GetComponent <FlyingSwarmLeaderAI>())
                {
                    newEnemy.GetComponent <FlyingSwarmLeaderAI>().spawnSwarm();
                }
            }
        }
    }