public DungeonBlock(TerrainType _type, int _x, int _y) { mnPosX = _x; mnPosY = _y; mTerrain = _type; switch (_type) { case TerrainType.Tile: mState = BlockState.Empty; break; case TerrainType.Wall: mState = BlockState.Obstacle; break; case TerrainType.Stairs: mState = BlockState.DungeonExit; break; case TerrainType.Shop: mState = BlockState.Empty; break; } mEnemy = null; }
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; } } }
void FillPiecesLevelOne() { EnemyPiece e = new EnemyPiece() { Column = 0, Row = 6, Units = 1, Icon = iconWall }; pieces.Add(e); enemyPieces.Add(e); EnemyPiece e2 = new EnemyPiece() { Column = 0, Row = 5, Units = 1, Icon = iconWall }; pieces.Add(e2); enemyPieces.Add(e2); EnemyPiece e3 = new EnemyPiece() { Column = 0, Row = 4, Units = 1, Icon = iconWall }; pieces.Add(e3); enemyPieces.Add(e3); DefendPiece d = new DefendPiece() { Column = 9, Row = 5, Units = 5, Icon = iconShield }; pieces.Add(d); playerPieces.Add(d); DefendPiece d2 = new DefendPiece() { Column = 9, Row = 4, Units = 5, Icon = iconShield }; pieces.Add(d2); playerPieces.Add(d2); }
public void PlaceEnemy(EnemyPiece _enemy, int _posX, int _posY) { if (dungeonBlockGrid[_posX, _posY].State != BlockState.Empty) { Debug.LogError("Unable to place Enemy. (" + _posX + ", " + _posY + ") is not empty."); return; } dungeonBlockGrid[_posX, _posY].SetBlockState(BlockState.EnemyPiece); dungeonBlockGrid[_posX, _posY].PlaceEnemy(_enemy); }
public static EnemyPiece Spawn(int _posX, int _posY, int _health, GridType _movementType, EnemyType _unitType) { EnemyPiece curPiece = null; for (int i = 0; i < enemyPool.Count; i++) { if (enemyPool[i].IsAlive == false) { curPiece = enemyPool[i]; curPiece.mbIsAlive = true; curPiece.mSpriteRen.enabled = true; curPiece.mnPosX = _posX; curPiece.mnPosY = _posY; curPiece.mnHealth = _health; curPiece.SetMovementType(_movementType); curPiece.SetUnitType(_unitType); int spriteIndex = Array.IndexOf(enemySpriteNames, _unitType.ToString() + "_" + _movementType.ToString()); curPiece.mSpriteRen.sprite = enemySprites[spriteIndex]; DungeonManager.Instance.PlaceEnemy(curPiece, _posX, _posY); curPiece.transform.position = DungeonManager.Instance.GridPosToWorldPos(_posX, _posY); break; } } if (curPiece == null) { GameObject newEnemyPiece = (GameObject)Instantiate(GameManager.Instance.EnemyPrefab); curPiece = newEnemyPiece.GetComponent <EnemyPiece>(); curPiece.mbIsAlive = true; curPiece.mSpriteRen.enabled = true; curPiece.mnPosX = _posX; curPiece.mnPosY = _posY; curPiece.mnHealth = _health; curPiece.SetMovementType(_movementType); curPiece.SetUnitType(_unitType); int spriteIndex = Array.IndexOf(enemySpriteNames, _unitType.ToString() + "_" + _movementType.ToString()); curPiece.mSpriteRen.sprite = enemySprites[spriteIndex]; DungeonManager.Instance.PlaceEnemy(curPiece, _posX, _posY); curPiece.transform.position = DungeonManager.Instance.GridPosToWorldPos(_posX, _posY); } GameManager.Instance.EnemyList.Add(curPiece); return(curPiece); }
void FillPiecesLevelZero() { EnemyPiece e = new EnemyPiece() { Column = 0, Row = 6, Units = 1, Icon = iconWall }; pieces.Add(e); enemyPieces.Add(e); EnemyPiece e2 = new EnemyPiece() { Column = 0, Row = 5, Units = 1, Icon = iconWall }; pieces.Add(e2); enemyPieces.Add(e2); RangedPiece ra = new RangedPiece() { Column = 10, Row = 7, Units = 2, Icon = iconArrow }; pieces.Add(ra); playerPieces.Add(ra); AttackPiece a = new AttackPiece() { Column = 10, Row = 5, Units = 5, Icon = iconSword }; pieces.Add(a); playerPieces.Add(a); }
void FillPiecesLevelFive() { int fillRows = (int)Rows; int fillColumns = 3; int enemyUnitsPerTile = 6; int totalEnemyUnits = enemyUnitsPerTile * (fillColumns * fillRows); for (uint row = 0; row < fillRows; row++) { for (uint column = 0; column < fillColumns; column++) { EnemyPiece wallPiece = new EnemyPiece() { Column = column, Row = row, Units = enemyUnitsPerTile, Icon = iconWall }; pieces.Add(wallPiece); enemyPieces.Add(wallPiece); } } BarracksPiece b = new BarracksPiece() { Column = 11, Row = 6, Units = 1, ProductionUnits = 3, Icon = iconBarracks }; pieces.Add(b); playerPieces.Add(b); RangedPiece ra = new RangedPiece() { Column = 10, Row = 7, Units = 3, Icon = iconArrow }; pieces.Add(ra); playerPieces.Add(ra); RangedPiece ra2 = new RangedPiece() { Column = 10, Row = 2, Units = 3, Icon = iconArrow }; pieces.Add(ra2); playerPieces.Add(ra2); AttackPiece a = new AttackPiece() { Column = 10, Row = 5, Units = 3, Icon = iconSword }; pieces.Add(a); playerPieces.Add(a); AttackPiece a2 = new AttackPiece() { Column = 10, Row = 6, Units = 3, Icon = iconSword }; pieces.Add(a2); playerPieces.Add(a2); DefendPiece d = new DefendPiece() { Column = 10, Row = 4, Units = 5, Icon = iconShield }; pieces.Add(d); playerPieces.Add(d); }
/// <summary> /// Adds the zombie piece to the zombie positions. /// </summary> /// <returns><c>true</c>, if zombie piece was added, <c>false</c> otherwise.</returns> /// <param name="zombiePiece">Zombie piece to add to the enemy positions.</param> public bool AddZombiePiece(EnemyPiece zombiePiece) { return(EnemyPositions.Queue(zombiePiece)); }
public abstract void SpecialDieEvents(EnemyPiece _enemy);
/// <summary> /// Removes the zombie piece passed from the zombie positions. /// </summary> /// <param name="zombieToRemove">Zombie to remove from enemy positions.</param> /// <returns><c>true</c>, if zombie piece was removed, <c>false</c> otherwise.</returns> public bool RemoveZombiePiece(EnemyPiece zombieToRemove) { return EnemyPositions.Remove(zombieToRemove) != null; }
public void PlaceEnemy(EnemyPiece _enemy) { mEnemy = _enemy; }
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); }
void FillPiecesLevelTwo() { int fillRows = (int)Rows; int fillColumns = 2; int enemyUnitsPerTile = 2; int totalEnemyUnits = enemyUnitsPerTile * (fillColumns * fillRows); for (uint row = 0; row < fillRows; row++) { for (uint column = 0; column < fillColumns; column++) { EnemyPiece wallPiece = new EnemyPiece() { Column = column, Row = row, Units = enemyUnitsPerTile, Icon = iconWall }; pieces.Add(wallPiece); enemyPieces.Add(wallPiece); } } BarracksPiece b = new BarracksPiece() { Column = 11, Row = 6, Units = 1, ProductionUnits = 1, Icon = iconBarracks }; pieces.Add(b); playerPieces.Add(b); RangedPiece ra = new RangedPiece() { Column = 10, Row = 7, Units = 1, Icon = iconArrow }; pieces.Add(ra); playerPieces.Add(ra); AttackPiece a = new AttackPiece() { Column = 10, Row = 5, Units = 2, Icon = iconSword }; pieces.Add(a); playerPieces.Add(a); DefendPiece d = new DefendPiece() { Column = 10, Row = 4, Units = 3, Icon = iconShield }; pieces.Add(d); playerPieces.Add(d); }
private void InitializeEnemyPhaseBehaviourTree() { // Returns fail when there are enemies. Success if no enemies found. BTAction BTAct_NoEnemyCheck = new BTAction( () => { // If there are not even one enemy. Nothing to do here. if (EnemyList.Count < 1) { return(BTStatus.Success); } return(BTStatus.Failure); } ); BTAction BTAct_EnemyPhaseStartAnimations = new BTAction( () => { if (EPdoneStartAnimation == false) { EventAnimationController.Instance.ExecutePhaseAnimation(GamePhase.EnemyPhase); EPdoneStartAnimation = true; return(BTStatus.Running); } else if (EventAnimationController.Instance.IsAnimating == false) { EPdoneStartAnimation = false; ControlAreaManager.Instance.SetControlBlockerEnabled(true); return(BTStatus.Success); } return(BTStatus.Running); } ); BTAction BTAct_MoveEnemyPieces = new BTAction( () => { EnemyPiece curEnemy = null; if (EPcurEnemyIndex < EnemyList.Count) { curEnemy = EnemyList[EPcurEnemyIndex]; } switch (curEnemy.TurnStatus) { case EnemyTurnStatus.Unprocessed: curEnemy.ExecuteTurn(); break; case EnemyTurnStatus.Running: return(BTStatus.Running); // Do nothing, just let it run. default: // Both processed and waiting, move on to the next EnemyPiece. EPcurEnemyIndex++; if (EPcurEnemyIndex >= EnemyList.Count) // If went through the whole thing once already. { EPcurEnemyIndex = 0; BoardScroller.Instance.FocusCameraToPos( DungeonManager.Instance.GridPosToWorldPos(GameManager.Instance.Player.PosX, GameManager.Instance.Player.PosY), 0.2f, Graph.InverseExponential); return(BTStatus.Success); } break; } return(BTStatus.Running); } ); BTAction BTAct_AttackPlayer = new BTAction( () => { EnemyPiece curEnemy = null; if (EPcurEnemyIndex < EnemyList.Count) { curEnemy = EnemyList[EPcurEnemyIndex]; } switch (curEnemy.TurnStatus) { case EnemyTurnStatus.Waiting: curEnemy.ExecuteTurn(); break; case EnemyTurnStatus.Running: return(BTStatus.Running); // Do nothing, just let it run. default: // Move on to the next one. Only search for those that are Waiting status. EPcurEnemyIndex++; if (EPcurEnemyIndex >= EnemyList.Count) // If went finish second pass. { return(BTStatus.Success); } break; } return(BTStatus.Running); } ); // Reduce the player's shield by 1 point after end of every enemy turn. BTAction BTAct_ReducePlayersShield = new BTAction( () => { Player.DeductShieldPoints(1); if (Player.TurnStatus == PlayerTurnStatus.Running) { return(BTStatus.Running); } else { EndEnemyPhase(); return(BTStatus.Success); } } ); // BT_Sequence only runs when there are enemy pieces. // Refer to BT_NullCheckSelector below. BTSequence BT_EnemyMovementSequence = new BTSequence(BTAct_MoveEnemyPieces, BTAct_AttackPlayer); // Root is Selector that checks for enemies. // If no enemies, immediately stops (BTAct_NoEnemyCheck returns success). BTSelector BT_NullCheckSelector = new BTSelector(BTAct_NoEnemyCheck, BT_EnemyMovementSequence); BTSequence BT_Root = new BTSequence(BTAct_EnemyPhaseStartAnimations, BT_NullCheckSelector, BTAct_ReducePlayersShield); mEnemyPhaseBehaviourTree = new BehaviourTree(BT_Root); }
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 void RemoveEnemy() { mEnemy = null; }
/// <summary> /// Adds the zombie piece to the zombie positions. /// </summary> /// <returns><c>true</c>, if zombie piece was added, <c>false</c> otherwise.</returns> /// <param name="zombiePiece">Zombie piece to add to the enemy positions.</param> public bool AddZombiePiece(EnemyPiece zombiePiece) { return EnemyPositions.Queue(zombiePiece); }
private void ExecuteAttack(int _targetX, int _targetY) { ActionSequence sequence = new ActionSequence(); // Player's logical position values set below, after attack. ScaleToAction scaleUp = new ScaleToAction(this.transform, Graph.SmoothStep, Vector3.one * DungeonManager.Instance.ScaleMultiplier * 1.75f, 0.5f); scaleUp.OnActionStart += () => { AudioManager.PlayPreAtkSound(); }; MoveToAction moveToPos = new MoveToAction(this.transform, Graph.Dipper, DungeonManager.Instance.GridPosToWorldPos(_targetX, _targetY), 0.25f); ScaleToAction scaleDownHit = new ScaleToAction(this.transform, Graph.Dipper, Vector3.one * DungeonManager.Instance.ScaleMultiplier * 1.1f, 0.25f); ActionParallel hitParallel = new ActionParallel(moveToPos, scaleDownHit); hitParallel.OnActionFinish += () => { EnemyPiece target = DungeonManager.Instance.DungeonBlocks[_targetX, _targetY].Enemy; target.TakeDamage(1); AudioManager.PlayPlayerAtkImpactSound(); if (target.Health <= 0) { ScaleToAction scaleDown = new ScaleToAction(this.transform, Graph.SmoothStep, Vector3.one * DungeonManager.Instance.ScaleMultiplier, 0.5f); scaleDown.OnActionStart += () => { BoardScroller.Instance.FocusCameraToPos(this.transform.position, 0.5f, Graph.InverseExponential); }; scaleDown.OnActionFinish += () => { // Repeat if needed. if (RepeatPanelControls.NumRepeatsLeft > 0) { if (RepeatPanelControls.NumRepeatsLeft > 0) { ControlAreaManager.ExecutedCard.Execute(); } } }; sequence.Add(scaleDown); SetPosition(_targetX, _targetY); } else { MoveToAction moveBack = new MoveToAction(this.transform, Graph.SmoothStep, DungeonManager.Instance.GridPosToWorldPos(PosX, PosY), 0.5f); ScaleToAction scaleDownReturn = new ScaleToAction(this.transform, Graph.SmoothStep, Vector3.one * DungeonManager.Instance.ScaleMultiplier, 0.5f); ActionParallel returnParallel = new ActionParallel(moveBack, scaleDownReturn); returnParallel.OnActionFinish += () => { // Repeat if needed. if (RepeatPanelControls.NumRepeatsLeft > 0) { if (RepeatPanelControls.NumRepeatsLeft > 0) { ControlAreaManager.ExecutedCard.Execute(); } } }; sequence.Add(returnParallel); } }; DelayAction returnDelay = new DelayAction(0.1f); sequence.Add(scaleUp, hitParallel, returnDelay); sequence.OnActionFinish = () => { mTurnStatus = PlayerTurnStatus.Waiting; mSpriteRen.sortingOrder = mnDefaultSpriteOrderInLayer; }; ActionHandler.RunAction(sequence); }
public override void SpecialDieEvents(EnemyPiece _enemy) { // Nothing speical here :) }
/// <summary> /// Removes the zombie piece passed from the zombie positions. /// </summary> /// <param name="zombieToRemove">Zombie to remove from enemy positions.</param> /// <returns><c>true</c>, if zombie piece was removed, <c>false</c> otherwise.</returns> public bool RemoveZombiePiece(EnemyPiece zombieToRemove) { return(EnemyPositions.Remove(zombieToRemove) != null); }