コード例 #1
0
    public void Die()
    {
        alive = false;
        Vector3    center = m_transform.position;
        Vector3    newPos = center;
        Vector2    parametricValues;
        GameObject go;
        int        r = (int)(Random.Range(0.0f, 1.0f) * 3.99f);

        for (int i = 0; i < nbMinTorus; i++)
        {
            switch (r)
            {
            case 0:
                parametricValues = ParametricCurves.Circle((float)i / nbMinTorus);
                break;

            case 1:
                parametricValues = ParametricCurves.Plus((float)i / nbMinTorus);
                break;

            case 2:
                parametricValues = ParametricCurves.Square((float)i / nbMinTorus);
                break;

            default:
                parametricValues = ParametricCurves.Triangle((float)i / nbMinTorus);
                break;
            }

            newPos.z = center.z + 4.0f * parametricValues.x;
            newPos.y = center.y + 4.0f * parametricValues.y;
            go       = Instantiate(miniTorus, newPos, m_transform.rotation);

            if ((newPos - center).Equals(Vector3.zero))
            {
                go.GetComponent <MiniTorusBehaviour>().setDirection(new Vector3(0.0f, yDirection, speed));
            }
            else
            {
                go.GetComponent <MiniTorusBehaviour>().setDirection((newPos - center));
            }
        }

        BonusManager bonusManager = FindObjectOfType <BonusManager>();

        if (bonusManager.HasToPopABonus())
        {
            GameObject bonus = bonusManager.GetNextBonus();
            bonusManager.EmptyNextBonus();

            if (bonus.GetComponent <BonusBehaviour>().bonusType == BonusBehaviour.BonusType.WEAPON)
            {
                Instantiate(bonus, transform.position, Quaternion.Euler(90.0f, 0.0f, 0.0f));
            }
            else
            {
                Instantiate(bonus, transform.position, Quaternion.identity);
            }
        }

        Destroy(this.gameObject);
    }
コード例 #2
0
    IEnumerator SpawnWaves()
    {
        yield return(new WaitForSeconds(TimeBeforeFirstWave));

        while (waveCpt < numWaves)
        {
            waveCpt++;

            if (SpawnEnabled)
            {
                int      r = (int)(Random.Range(0.0f, 1.0f) * 3.99f);
                WaveType waveType;

                switch (r)
                {
                case 0: waveType = WaveType.BLACK;
                    break;

                case 1: waveType = WaveType.WHITE;
                    break;

                case 2: waveType = WaveType.HALF;
                    break;

                default: waveType = WaveType.QUARTER;
                    break;
                }

                int enemyCount = (int)(Random.Range(0.0f, 1.0f) * (MaxEnemyPerWave - MinEnemyPerWave)) + MinEnemyPerWave;
                r = (int)(Random.Range(0.0f, 1.0f) * 3.99f);

                for (int i = 0; i < enemyCount; i++)
                {
                    if (SpawnEnabled)
                    {
                        Vector2 p = Vector2.zero;

                        switch (r)
                        {
                        case 0:
                            p = ParametricCurves.Stars(1.5f, 12.0f * (float)i / (float)enemyCount);
                            break;

                        case 1:
                            p   = ParametricCurves.Sinus((float)i / (float)enemyCount);
                            p.x = (p.x * 2.0f) - 1.0f;
                            break;

                        case 2:
                            p   = ParametricCurves.Stars(0.5f, 12.0f * (float)i / (float)enemyCount);
                            p.x = (p.x + 1.0f) / 2.0f;
                            p.y = p.y / 2.6f;
                            break;

                        default:
                            p   = ParametricCurves.PatternQueen(1, 2, 2, 1, 3, 3, 7.0f * (float)i / (float)enemyCount);
                            p.x = (p.x + 0.5f) / 1.5f;
                            p.y = p.y / 1.5f;
                            break;
                        }

                        Vector3 spawnPosition = new Vector3(SpawnRange.x, 15.0f * p.y, SpawnRange.z + 15.0f * p.x);

                        GameObject  enemy       = Instantiate(Enemy);
                        EnemyScript enemyScript = enemy.GetComponent <EnemyScript>();
                        enemy.transform.position = spawnPosition;

                        bool enemyIsBlack =
                            (waveType == WaveType.BLACK) ||
                            (waveType == WaveType.HALF && i < enemyCount / 2.0f) ||
                            (waveType == WaveType.QUARTER && (i < enemyCount / 4.0f || (i >= 2.0f * enemyCount / 4.0f && i < 3.0f * enemyCount / 4.0f)));

                        enemyScript.SetColor(enemyIsBlack);
                    }
                }
            }

            yield return(new WaitForSeconds(TimeBetweenWaves));
        }

        yield return(new WaitForSeconds(TimeBeforeBoss));


        Boss.SetActive(true);
        Instantiate(Boss, new Vector3(0.0f, 0.0f, 40.0f), Quaternion.Euler(0.0f, 180.0f, 90.0f));
    }