예제 #1
0
    // Checks to see if this minion should be dead, splits the minion into factors or reduces the minion
    // by a given factor depending on the frequency of the last bullet to hit
    void CheckHitpoints()
    {
        bool hitPrime = false;

        if (currentHP <= 0)
        {
            int        newValue      = 0;
            int        newValueIndex = 0;
            GameObject explosion     = (GameObject)Instantiate(deathEffect, transform.position, Quaternion.identity);
            Destroy(explosion, 2f);
            //If the minion can't split anymore, it dies
            if (factorList.Count == 0)
            {
                GetComponent <MinPFPowerupMgr>().SpawnOrbs(transform.position, orbModifier);
                EventManager.TriggerKilledMinion();
                Destroy(this.gameObject);
            }
            //If it can split, it does
            else
            {
                for (int i = 0; i < factorList.Count; i++)
                {
                    if (shipNumber % lastHitFreq == 0 && shipNumber != lastHitFreq)
                    {
                        newValue = lastHitFreq;
                        hitPrime = true;
                    }
                }
                if (hitPrime)
                {
                    GameObject hitFactorShip = (GameObject)Instantiate(newShipPrefab, transform.position, Quaternion.Euler(new Vector3(90, 0, 0)));
                    hitFactorShip.GetComponent <MinPFNumberMgr>().SetShipNumber(shipNumber / newValue);
                    currentLevel.AddEnemy(hitFactorShip);
                    Destroy(this.gameObject);
                }
                else
                {
                    newValueIndex = Random.Range(0, factorList.Count);
                    //Generate right ship with randomly chosen prime factor
                    GameObject newShipRight = (GameObject)Instantiate(newShipPrefab, rightSpawn.transform.position, Quaternion.Euler(new Vector3(90, 0, 0)));
                    newShipRight.GetComponent <MinPFNumberMgr>().SetShipNumber((int)factorList[newValueIndex]);
                    newShipRight.GetComponent <MinPFDeathMgr>().OrbModifier = orbModifier - 1;
                    currentLevel.AddEnemy(newShipRight);
                    //Generate left ship with a new number reduced by the previously chosen prime factor
                    GameObject newShipLeft = (GameObject)Instantiate(newShipPrefab, leftSpawn.transform.position, Quaternion.Euler(new Vector3(90, 0, 0)));
                    newShipLeft.GetComponent <MinPFNumberMgr>().SetShipNumber(shipNumber / (int)factorList[newValueIndex]);
                    newShipLeft.GetComponent <MinPFDeathMgr>().OrbModifier = orbModifier - 1;
                    currentLevel.AddEnemy(newShipLeft);
                    Instantiate(spawnedRocket, transform.position, Quaternion.Euler(new Vector3(0, 225, 180)));
                    EventManager.TriggerCreatedMinion();
                    Destroy(this.gameObject);
                }
            }
        }
    }
예제 #2
0
 // Start is called before the first frame update
 void Start()
 {
     player = GameObject.Find("Player");
     level  = GameObject.Find("Level").GetComponent <Level>();
     level.AddEnemy(this);
     audioSource    = GetComponent <AudioSource>();
     startPosition  = transform.position;
     startDirection = transform.forward;
 }
예제 #3
0
    }   // IEnumerator SpawnAllWaves()

    /***
    *		This coroutine spawns all enemies in a wave.	
    ***/
    private IEnumerator SpawnAllEnemiesInWave(WaveConfig waveConfig)
    {
        Debug.Log("Starting wave " + waveConfig.name);
        waveConfig.BuildShips();
        for (int enemyCount = 0; enemyCount < waveConfig.GetNumberOfEnemies(); enemyCount++)
        {
            Debug.Log("Spawning enemy #" + enemyCount + " for " + waveConfig.name);
            var newEnemy = waveConfig.GetEnemyShip(enemyCount);
            newEnemy.transform.position = waveConfig.GetWaypoints()[0].transform.position;
            newEnemy.GetComponent<EnemyPathing>().SetWaveConfig(waveConfig);
            level.AddEnemy();
            yield return new WaitForSeconds(waveConfig.GetTimeBetweenSpawns());
        }   // for
    }   // IEnumerator SpawnAllEnemiesInWave()
예제 #4
0
 public void CreateKoopa(int locationX, int locationY)
 {
     level.AddEnemy(new Koopa(new Vector2(locationX, locationY)));
 }
예제 #5
0
    public Level ReadLevelData(string[] levelData)
    {
        //loads the data from the string[] and puts it inside the level

        Level level = new Level();


        int lineNum      = 0;
        int linesIgnored = 0;        //keeps track if any lines are read but ignored

        Debug.Log(TAG + "reading level data. Length = " + levelData.Length);

        while (lineNum < levelData.Length)
        {
            Debug.Log(TAG + "reading line " + lineNum);
            string[] line    = levelData[lineNum].Split(':');
            string   dataTag = line[0];          //dataTag informs what king of data is in the line
            lineNum++;

            int type;
            int x;
            int z;

            switch (dataTag)
            {
            case "Name":
                Debug.Log(TAG + "setting level name.");
                level.SetName(line[1]);
                break;


            case "Grid":
                Debug.Log(TAG + "creating the grid.");
                string[] gridSize = line[1].Split(',');
                int      width    = int.Parse(gridSize[0]);
                int      depth    = int.Parse(gridSize[1]);
                string[] gridData = new string[width];                        //TODO decide if should be depth or width
                Array.Copy(levelData, lineNum, gridData, 0, width);
                level.CreateGrid(width, depth, gridData);
                lineNum += width;
                break;

            case "Enemy":
                //can change to slime if need other enemies
                Debug.Log(TAG + "creating an enemy.");
                string[] enemyData = line[1].Split(',');
                type = 1;
                x    = int.Parse(enemyData[0]);
                z    = int.Parse(enemyData[1]);
                int dir = int.Parse(enemyData[2]);
                //check if has extra data
                if (line.Length == 3)
                {
                    level.AddEnemy(type, x, z, dir, line[2]);
                    break;
                }
                level.AddEnemy(type, x, z, dir);



                break;


            case "Piece":
                Debug.Log(TAG + "creating a piece.");
                string[] pieceData = line[1].Split(',');
                type = int.Parse(pieceData[0]);
                x    = int.Parse(pieceData[1]);
                z    = int.Parse(pieceData[2]);
                level.AddPiece(type, x, z);
                break;

            default:
                Debug.Log(TAG + "ignoring line.");
                linesIgnored++;
                break;
            }
        }
        Debug.Log(TAG + "levelData loaded. " + linesIgnored + "of " + levelData.Length + " lines ignored.");
        return(level);
    }
    void CheckHitpoints()
    {
        if (currentHP <= 0)
        {
            GameObject explosion = (GameObject)Instantiate(deathEffect, transform.position, Quaternion.identity);
            Destroy(explosion, 2f);
            //If the minion can't split anymore, it dies
            if (myColorManager.IsPrimary)
            {
                GetComponent <MinPFPowerupMgr>().SpawnOrbs(transform.position, orbModifier);
                EventManager.TriggerKilledMinion();
                Destroy(this.gameObject);
            }
            //If it can split, it does
            else
            {
                WeaponHit.WeaponColor newColor      = WeaponHit.WeaponColor.blue;
                WeaponHit.WeaponColor otherNewColor = WeaponHit.WeaponColor.blue;
                bool spawnBoth = false;
                switch (myColorManager.CurrentColor)
                {
                case WeaponHit.WeaponColor.purple:
                    if (lastHitColor == WeaponHit.WeaponColor.yellow)
                    {
                        spawnBoth     = true;
                        newColor      = WeaponHit.WeaponColor.blue;
                        otherNewColor = WeaponHit.WeaponColor.red;
                    }
                    else if (lastHitColor == WeaponHit.WeaponColor.blue)
                    {
                        newColor = WeaponHit.WeaponColor.red;
                    }
                    else
                    {
                        newColor = WeaponHit.WeaponColor.blue;
                    }
                    break;

                case WeaponHit.WeaponColor.green:
                    if (lastHitColor == WeaponHit.WeaponColor.red)
                    {
                        spawnBoth     = true;
                        newColor      = WeaponHit.WeaponColor.blue;
                        otherNewColor = WeaponHit.WeaponColor.yellow;
                    }
                    else if (lastHitColor == WeaponHit.WeaponColor.blue)
                    {
                        newColor = WeaponHit.WeaponColor.yellow;
                    }
                    else
                    {
                        newColor = WeaponHit.WeaponColor.blue;
                    }
                    break;

                case WeaponHit.WeaponColor.orange:
                    if (lastHitColor == WeaponHit.WeaponColor.blue)
                    {
                        spawnBoth     = true;
                        newColor      = WeaponHit.WeaponColor.yellow;
                        otherNewColor = WeaponHit.WeaponColor.red;
                    }
                    else if (lastHitColor == WeaponHit.WeaponColor.red)
                    {
                        newColor = WeaponHit.WeaponColor.yellow;
                    }
                    else
                    {
                        newColor = WeaponHit.WeaponColor.red;
                    }
                    break;
                }
                if (spawnBoth)
                {
                    GameObject newMinion = (GameObject)Instantiate(newShipPrefab, leftSpawn.transform.position, Quaternion.Euler(90, 0, 0));
                    newMinion.GetComponent <PFMColorManager>().CurrentColor = newColor;
                    newMinion.GetComponent <PFMColorManager>().IsPrimary    = true;
                    currentLevel.AddEnemy(newMinion);
                    newMinion = (GameObject)Instantiate(newShipPrefab, rightSpawn.transform.position, Quaternion.Euler(90, 0, 0));
                    newMinion.GetComponent <PFMColorManager>().CurrentColor = otherNewColor;
                    newMinion.GetComponent <PFMColorManager>().IsPrimary    = true;
                    currentLevel.AddEnemy(newMinion);
                    Instantiate(spawnedRocket, transform.position, Quaternion.Euler(new Vector3(0, 225, 180)));
                    Destroy(this.gameObject);
                    EventManager.TriggerCreatedMinion();
                }
                else
                {
                    GameObject newMinion = (GameObject)Instantiate(newShipPrefab, transform.position, Quaternion.Euler(90, 0, 0));
                    newMinion.GetComponent <PFMColorManager>().CurrentColor = newColor;
                    newMinion.GetComponent <PFMColorManager>().IsPrimary    = true;
                    currentLevel.AddEnemy(newMinion);
                    Destroy(this.gameObject);
                }
            }
        }
    }