コード例 #1
0
    private void InitiateSpawner()
    {
        //stock frustum borders
        Vector3 bottomLeft  = new Vector3(0, 0, depthFromCam);
        Vector3 topLeft     = new Vector3(0, 1, depthFromCam);
        Vector3 topRight    = new Vector3(1, 1, depthFromCam);
        Vector3 bottomright = new Vector3(1, 0, depthFromCam);

        //setup enemies that can spawn at each border of the screen
        RequinScie roquin = new RequinScie();

        roquin.prefab = requinPrefab;
        CalmarNouille calmar = new CalmarNouille();

        calmar.prefab = calmarPrefab;
        SeauMeduse meduse = new SeauMeduse();

        meduse.prefab = medusePrefab;
        MureneChaussette chaussette = new MureneChaussette();

        chaussette.prefab = murenePrefab;
        Main main = new Main();

        main.prefab = mainPrefab;

        List <Enemy> leftEnemies = new List <Enemy>();

        leftEnemies.Add(roquin);
        leftEnemies.Add(calmar);
        leftEnemies.Add(chaussette);
        List <Enemy> topEnemies = new List <Enemy>();

        topEnemies.Add(main);
        List <Enemy> rightEnemies = new List <Enemy>();

        rightEnemies.Add(roquin);
        rightEnemies.Add(calmar);
        rightEnemies.Add(chaussette);
        List <Enemy> bottomEnemies = new List <Enemy>();

        bottomEnemies.Add(meduse);
        bottomEnemies.Add(calmar);
        bottomEnemies.Add(roquin);

        //save borders paramas as a whole object
        FrustumBorder left   = new FrustumBorder(bottomLeft, topLeft, cam, leftEnemies, player, 0, .22f);
        FrustumBorder top    = new FrustumBorder(topLeft, topRight, cam, topEnemies, player, 0, .66f);
        FrustumBorder right  = new FrustumBorder(bottomright, topRight, cam, rightEnemies, player, 0, .22f);
        FrustumBorder bottom = new FrustumBorder(bottomright, bottomLeft, cam, bottomEnemies, player, 0, .66f);

        frustumBorders.Add(left);
        frustumBorders.Add(top);
        frustumBorders.Add(right);
        frustumBorders.Add(bottom);
        _ActiveBorders.Add(left);
        _ActiveBorders.Add(top);
        _ActiveBorders.Add(right);
        _ActiveBorders.Add(bottom);
    }
コード例 #2
0
    public void SpawnRandomEnemy()
    {
        if (frustumBorders.Count == 0)
        {
            InitiateSpawner();
        }
        int           randIndex    = Random.Range(0, _ActiveBorders.Count);
        FrustumBorder randomBorder = _ActiveBorders[randIndex];

        _ActiveBorders.Remove(randomBorder);
        _InactiveBorders.Enqueue(randomBorder);
        if (_InactiveBorders.Count > frustumBorders.Count / 2)
        {
            _ActiveBorders.Add(_InactiveBorders.Dequeue());
        }

        randomBorder.Spawn(depthFromCam);
    }