// 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); } } } }
// 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; }
} // 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()
public void CreateKoopa(int locationX, int locationY) { level.AddEnemy(new Koopa(new Vector2(locationX, locationY))); }
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); } } } }