Пример #1
0
    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);
        }
Пример #4
0
    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);
    }
Пример #5
0
    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);
        }
Пример #8
0
 /// <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);
Пример #10
0
	/// <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;
	}
Пример #11
0
 public void PlaceEnemy(EnemyPiece _enemy)
 {
     mEnemy = _enemy;
 }
Пример #12
0
    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);
    }
Пример #13
0
        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);
        }
Пример #14
0
        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);
        }
Пример #15
0
        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);
        }
Пример #16
0
    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);
    }
Пример #17
0
    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++;
                }
            }
        }
    }
Пример #18
0
 public void RemoveEnemy()
 {
     mEnemy = null;
 }
Пример #19
0
	/// <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);
	}
Пример #20
0
    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 :)
 }
Пример #22
0
 /// <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);
 }