public override void SpecialDieEvents(EnemyPiece _enemy) { // Don't spawn if pawn already. if (_enemy.MovementType == GridType.Pawn) { return; } EnemyUnit unit = EnemyUnit.SlimePawn; // Spawn two more slimes. // Try up down left right. int numSpawned = 0; // Left if (DungeonManager.Instance.IsCellEmpty(_enemy.PosX - 1, _enemy.PosY)) { EnemyPiece.Spawn(_enemy.PosX - 1, _enemy.PosY, unit); numSpawned++; if (numSpawned >= 2) { return; } } // Right if (DungeonManager.Instance.IsCellEmpty(_enemy.PosX + 1, _enemy.PosY)) { EnemyPiece.Spawn(_enemy.PosX + 1, _enemy.PosY, unit); numSpawned++; if (numSpawned >= 2) { return; } } // Up if (DungeonManager.Instance.IsCellEmpty(_enemy.PosX, _enemy.PosY + 1)) { EnemyPiece.Spawn(_enemy.PosX, _enemy.PosY + 1, unit); numSpawned++; if (numSpawned >= 2) { return; } } // Down if (DungeonManager.Instance.IsCellEmpty(_enemy.PosX, _enemy.PosY - 1)) { EnemyPiece.Spawn(_enemy.PosX, _enemy.PosY - 1, unit); numSpawned++; if (numSpawned >= 2) { return; } } }
private void GenerateNPlaceEnemies() { int numBlack, numStone, numSlime, numGlass, numGold, numCursed; if (FloorNumber < 5) { numBlack = 10 - FloorNumber; numStone = FloorNumber; numSlime = 0; numGlass = 0; numGold = 0; numCursed = 0; } else if (FloorNumber < 15) { numBlack = Random.Range(1, 7); numStone = Random.Range(1, 11); numSlime = 0; numGlass = Random.Range(1, 5); numGold = Random.Range(0, 3); numCursed = 0; } else if (FloorNumber < 25) { numBlack = Random.Range(1, 8); numStone = Random.Range(1, 11); numSlime = Random.Range(1, 4); numGlass = Random.Range(1, 5); numGold = Random.Range(0, 4); numCursed = 0; } else { // Scale the range accordingly to each floor level. numBlack = Random.Range(FloorNumber - 24, FloorNumber - 17); numStone = Random.Range(FloorNumber - 24, FloorNumber - 11); numSlime = Random.Range(FloorNumber - 24, FloorNumber - 20); numGlass = Random.Range(FloorNumber - 24, FloorNumber - 20); numGold = Random.Range(FloorNumber - 25, FloorNumber - 20); numCursed = Random.Range(FloorNumber - 25, FloorNumber - 24); } int[] spawnNums = { numBlack, numStone, numSlime, numGlass, numGold, numCursed }; for (int iType = 0; iType < spawnNums.Length; iType++) { int numEnemiesSpawned = 0; while (numEnemiesSpawned < spawnNums[iType]) { int posX = Random.Range(1, DungeonManager.Instance.SizeX - 2); int posY = Random.Range(1, DungeonManager.Instance.SizeY - 2); if (DungeonManager.Instance.IsCellEmpty(posX, posY) && DungeonManager.Instance.IsPlayerPos(posX, posY) == false) { EnemyPiece.Spawn(posX, posY, (EnemyUnit)Random.Range(5 * iType, 5 * (iType + 1))); numEnemiesSpawned++; } } } }
public static EnemyPiece Spawn(int _posX, int _posY, EnemyUnit enemyType) { EnemyPiece curPiece = null; switch (enemyType) { case EnemyUnit.BlackPawn: curPiece = EnemyPiece.Spawn(_posX, _posY, 1, GridType.Pawn, EnemyType.Black); break; case EnemyUnit.BlackRook: curPiece = EnemyPiece.Spawn(_posX, _posY, 1, GridType.Rook, EnemyType.Black); break; case EnemyUnit.BlackBishop: curPiece = EnemyPiece.Spawn(_posX, _posY, 1, GridType.Bishop, EnemyType.Black); break; case EnemyUnit.BlackKnight: curPiece = EnemyPiece.Spawn(_posX, _posY, 1, GridType.Knight, EnemyType.Black); break; case EnemyUnit.BlackKing: curPiece = EnemyPiece.Spawn(_posX, _posY, 1, GridType.King, EnemyType.Black); break; case EnemyUnit.StonePawn: curPiece = EnemyPiece.Spawn(_posX, _posY, 1, GridType.Pawn, EnemyType.Stone); break; case EnemyUnit.StoneRook: curPiece = EnemyPiece.Spawn(_posX, _posY, 1, GridType.Rook, EnemyType.Stone); break; case EnemyUnit.StoneBishop: curPiece = EnemyPiece.Spawn(_posX, _posY, 1, GridType.Bishop, EnemyType.Stone); break; case EnemyUnit.StoneKnight: curPiece = EnemyPiece.Spawn(_posX, _posY, 1, GridType.Knight, EnemyType.Stone); break; case EnemyUnit.StoneKing: curPiece = EnemyPiece.Spawn(_posX, _posY, 1, GridType.King, EnemyType.Stone); break; case EnemyUnit.SlimePawn: curPiece = EnemyPiece.Spawn(_posX, _posY, 1, GridType.Pawn, EnemyType.Slime); break; case EnemyUnit.SlimeRook: curPiece = EnemyPiece.Spawn(_posX, _posY, 1, GridType.Rook, EnemyType.Slime); break; case EnemyUnit.SlimeBishop: curPiece = EnemyPiece.Spawn(_posX, _posY, 1, GridType.Bishop, EnemyType.Slime); break; case EnemyUnit.SlimeKnight: curPiece = EnemyPiece.Spawn(_posX, _posY, 1, GridType.Knight, EnemyType.Slime); break; case EnemyUnit.SlimeKing: curPiece = EnemyPiece.Spawn(_posX, _posY, 1, GridType.King, EnemyType.Slime); break; case EnemyUnit.GlassPawn: curPiece = EnemyPiece.Spawn(_posX, _posY, 1, GridType.Pawn, EnemyType.Glass); break; case EnemyUnit.GlassRook: curPiece = EnemyPiece.Spawn(_posX, _posY, 1, GridType.Rook, EnemyType.Glass); break; case EnemyUnit.GlassBishop: curPiece = EnemyPiece.Spawn(_posX, _posY, 1, GridType.Bishop, EnemyType.Glass); break; case EnemyUnit.GlassKnight: curPiece = EnemyPiece.Spawn(_posX, _posY, 1, GridType.Knight, EnemyType.Glass); break; case EnemyUnit.GlassKing: curPiece = EnemyPiece.Spawn(_posX, _posY, 1, GridType.King, EnemyType.Glass); break; case EnemyUnit.GoldPawn: curPiece = EnemyPiece.Spawn(_posX, _posY, 1, GridType.Pawn, EnemyType.Gold); break; case EnemyUnit.GoldRook: curPiece = EnemyPiece.Spawn(_posX, _posY, 1, GridType.Rook, EnemyType.Gold); break; case EnemyUnit.GoldBishop: curPiece = EnemyPiece.Spawn(_posX, _posY, 1, GridType.Bishop, EnemyType.Gold); break; case EnemyUnit.GoldKnight: curPiece = EnemyPiece.Spawn(_posX, _posY, 1, GridType.Knight, EnemyType.Gold); break; case EnemyUnit.GoldKing: curPiece = EnemyPiece.Spawn(_posX, _posY, 1, GridType.King, EnemyType.Gold); break; case EnemyUnit.CursedPawn: curPiece = EnemyPiece.Spawn(_posX, _posY, 1, GridType.Pawn, EnemyType.Cursed); break; case EnemyUnit.CursedRook: curPiece = EnemyPiece.Spawn(_posX, _posY, 1, GridType.Rook, EnemyType.Cursed); break; case EnemyUnit.CursedBishop: curPiece = EnemyPiece.Spawn(_posX, _posY, 1, GridType.Bishop, EnemyType.Cursed); break; case EnemyUnit.CursedKnight: curPiece = EnemyPiece.Spawn(_posX, _posY, 1, GridType.Knight, EnemyType.Cursed); break; case EnemyUnit.CursedKing: curPiece = EnemyPiece.Spawn(_posX, _posY, 1, GridType.King, EnemyType.Cursed); break; default: Debug.LogError("No enemyType handling found"); break; } return(curPiece); }