Example #1
0
        void BaseCloseStrike(List <Player> baseList, Enemy thisEnemy)
        {
            if (thisEnemy.currentVigor == emptyVigor)
            {
                return;
            }

            foreach (var player in baseList)
            {
                if (_areaCheck.CanSee(player, thisEnemy))
                {
                    var playNearNode = _areaCheck.NearNode(player);
                    var shortNode    = ShortNode(GameUtility.Coordinate(thisEnemy.transform.position), playNearNode);

                    if (shortNode != null)
                    {
                        StartCoroutine(AttackClose(player, thisEnemy, shortNode));
                    }
                    thisEnemy.currentVigor = emptyVigor;
                    break;
                }
            }
        }
Example #2
0
        void MoveRangeStrike(List <Player> moveList, Enemy thisEnemy)
        {
            if (thisEnemy.currentVigor == emptyVigor)
            {
                return;
            }

            Player   targetPlayer   = null;
            TileNode targetTileNode = null;

            // Check Player and TileNode
            foreach (var player in moveList)
            {
                var tileList = _gameManager.areaCheck.ShootTileList(player, thisEnemy);
                GameUtility.ShuffleList(tileList);

                foreach (var node in tileList)
                {
                    if (_areaCheck.CanMove(thisEnemy, node))
                    {
                        if (_areaCheck.CanRange(player, node))
                        {
                            targetPlayer   = player;
                            targetTileNode = node;
                            break;
                        }
                    }
                }
            }

            if (targetPlayer != null && targetTileNode != null)
            {
                print("ShootRange");
                thisEnemy.currentVigor = emptyVigor;
                StartCoroutine(ShootRange(targetPlayer, targetTileNode, thisEnemy));
            }
        }
Example #3
0
        IEnumerator CloseSelectEnemy(List <Enemy> currentEnemyList, float farFrom = 2f)
        {
            StartAllEnemy();

            GameUtility.ShuffleList(currentEnemyList);
            var enemy = currentEnemyList[0];

            animator.SetTrigger(BaseAttack);

            transform.LookAt(enemy.transform);
            if (enemy != currentEnemyList[0])
            {
                _cameraController.RotateButton(1);
            }

            StartCoroutine(WaitCloseSkill(enemy, farFrom));

            while (giveHit == GiveHit.GiveHit)
            {
                yield return(null);
            }

            var victory = _gameManager.CheckVictory();

            EndAllEnemy();

            while (enemy.getHit == GetHit.GetHit)
            {
                yield return(null);
            }

            if (!victory)
            {
                CheckPlayerTurn();
            }
        }
Example #4
0
 public void ResetBoundary()
 {
     GameUtility.ResetObjects(boundary, _gameManager.holder);
 }
Example #5
0
        IEnumerator StartEnemies()
        {
            currentEnemy = null;
            GameUtility.ShuffleList(_gameManager.activeEnemyList);
            var gameOver = false;

            foreach (var thisEnemy in _gameManager.activeEnemyList.ToList())
            {
                currentEnemy = thisEnemy;
                print("Current enemy is " + currentEnemy.name);

                var doSomething = this.currentEnemy.baseVigor;
                var something   = doSomething;
                var oneMore     = new WaitUntil(() => this.currentEnemy.currentVigor < something);


                if (currentEnemy.characterType == CharacterType.SwordMaster)
                {
                    var baseList   = _areaCheck.BaseList(currentEnemy);
                    var doubleList = _areaCheck.DoubleList(currentEnemy, baseList);

                    print(currentEnemy + " base count : " + baseList.Count + ", double count : " + doubleList.Count);

                    // hit
                    if (baseList.Count != emptyCount && currentEnemy.currentVigor >= halfVigor)
                    {
                        GameUtility.ShuffleList(baseList);
                        BaseCloseStrike(baseList, currentEnemy);

                        if (currentEnemy.currentVigor >= fullVigor)
                        {
                            BaseCloseObstacle(baseList, currentEnemy);
                        }
                    }
                    else if (doubleList.Count != emptyCount && currentEnemy.currentVigor >= fullVigor)
                    {
                        DoubleCloseStrike(doubleList, currentEnemy);

                        if (currentEnemy.currentVigor >= fullVigor)
                        {
                            DoubleCloseObstacle(doubleList, currentEnemy);
                        }
                    }

                    // chase
                    if (currentEnemy.currentVigor >= fullVigor)
                    {
                        var chaseList = _areaCheck.ChasePlayerList(_gameManager.activePlayerList, currentEnemy);
                        print(currentEnemy + " chase count : " + chaseList.Count);

                        GameUtility.ShuffleList(chaseList);
                        ChaseCloseStrike(chaseList, currentEnemy);
                    }

                    // protect friends
                    if (currentEnemy.currentVigor >= fullVigor)
                    {
                        GoNear(currentEnemy);
                    }

                    RandomBase(currentEnemy);
                    currentEnemy.currentVigor = emptyVigor;
                }

                else if (currentEnemy.characterType == CharacterType.Ranger)
                {
                    var doubleList = _areaCheck.DoubleList(currentEnemy);
                    var moveList   = _areaCheck.ShootPlayerList(_gameManager.activePlayerList, currentEnemy);

                    print(currentEnemy + " range count : " + doubleList.Count + ", move and shoot count : " + moveList.Count);

                    if (doubleList.Count != emptyCount && currentEnemy.currentVigor >= halfVigor)
                    {
                        GameUtility.ShuffleList(doubleList);
                        DoubleRangeStrike(doubleList, currentEnemy);
                    }
                    if (moveList.Count != emptyCount && currentEnemy.currentVigor >= fullVigor)
                    {
                        GameUtility.ShuffleList(moveList);
                        MoveRangeStrike(moveList, currentEnemy);
                    }
                    else if (currentEnemy.currentVigor >= halfVigor)
                    {
                        GoNear(currentEnemy);
                    }

                    RandomBase(currentEnemy);

                    currentEnemy.currentVigor = emptyVigor;
                }

                // if you make skill set, it'll need to change
                var condition = new WaitUntil(() => this.currentEnemy.currentVigor <= emptyVigor);
                yield return(condition);

                while (currentEnemy.activeState == ActiveState.Moving)
                {
                    yield return(null);
                }

                while (currentEnemy.buyHit == BuyHit.BuyHit)
                {
                    yield return(null);
                }

                currentEnemy.turnState = TurnState.Ending;

                gameOver = _gameManager.CheckGameOver();
                if (gameOver)
                {
                    break;
                }
            }

            foreach (var player in _gameManager.activePlayerList.ToList())
            {
                while (player.beHit == BeHit.BeHit)
                {
                    yield return(null);
                }
            }

            if (!gameOver)
            {
                _gameManager.EnemyTurnEnding();
            }
        }
Example #6
0
        void DoubleCloseObstacle(List <Player> doubleList, Enemy thisEnemy)
        {
            if (thisEnemy.currentVigor == emptyVigor)
            {
                return;
            }

            if (thisEnemy.currentVigor >= fullVigor)
            {
                print("No one can see!");

                Player   targetPlayer = null;
                TileNode middleNode   = null;
                TileNode endTileNode  = null;

                GameUtility.ShuffleList(doubleList);

                // Check Player and TileNode
                foreach (var player in doubleList)
                {
                    if (player.marked <= emptyCount)
                    {
                        continue;
                    }

                    var rushTileList = _gameManager.areaCheck.RushTileList(player, thisEnemy);
                    GameUtility.ShuffleList(rushTileList);

                    foreach (var node in rushTileList)
                    {
                        if (_areaCheck.CanMove(thisEnemy, node))
                        {
                            if (_areaCheck.CanMove(player, node))
                            {
                                var playNearNode = _areaCheck.NearNode(player);

                                foreach (var nearNode in playNearNode)
                                {
                                    GameUtility.ShuffleList(playNearNode);

                                    if (_areaCheck.CanMove(node, nearNode))
                                    {
                                        targetPlayer = player;
                                        middleNode   = node;
                                        endTileNode  = nearNode;
                                        break;
                                    }
                                }
                            }
                        }
                    }
                }

                if (targetPlayer != null && middleNode != null && endTileNode != null)
                {
                    StartCoroutine(RushClose(targetPlayer, thisEnemy, middleNode, endTileNode));
                    thisEnemy.currentVigor = emptyVigor;
                }
                else
                {
                    print("They are over the wall!");
                }
            }
        }
Example #7
0
 public void ResetClose()
 {
     GameUtility.ResetObjects(close, holder);
 }
Example #8
0
        void DoByType()
        {
            if (_gameManager.currentPlayer.characterType == CharacterType.SwordMaster)
            {
                if (skillState == SkillState.BaseCloseAttack || CheckSign("Enemy", _sword))
                {
                    if (_gameManager.doubleClose)
                    {
                        if (_gameManager.currentPlayer.currentVigor > 0)
                        {
                            Moving(true);
                            StartCoroutine(AfterMoving(true));
                        }
                    }
                    else
                    {
                        if (_gameManager.currentPlayer.currentVigor > 1)
                        {
                            Moving(true);
                            StartCoroutine(AfterMoving(true));
                        }
                    }
                }
                if (skillState == SkillState.Non)
                {
                    Moving(false);
                    StartCoroutine(AfterMoving(false));
                }
            }

            else if (_gameManager.currentPlayer.characterType == CharacterType.Ranger)
            {
                var currentEnemy = _gameManager.activeEnemyList.Find(i =>
                                                                     GameUtility.Coordinate(transform.position) == GameUtility.Coordinate(i.transform.position));

                if (skillState == SkillState.Non)
                {
                    Moving(false);
                    StartCoroutine(AfterMoving(false));
                }
            }
        }
Example #9
0
        public List <Enemy> RangeEnemyList(Player player, AreaCheckOption checkOption, Vector3 position)
        {
            var rangeEnemyList = new List <Enemy>();
            var areaList       = new List <TileNode>();

            _board.ResetBoard();

            if (checkOption == AreaCheckOption.Round)
            {
                player.rangeArea.transform.position = position;
                player.rangeArea.SetActive(true);
            }
            else if (checkOption == AreaCheckOption.Player)
            {
                player.rangeArea.transform.position = player.transform.position;
                player.rangeArea.SetActive(true);
            }

            foreach (var node in _board.NodeList)
            {
                if (Physics.CheckBox(node.transform.position, GameUtility.Box, Quaternion.identity,
                                     LayerMask.GetMask("RangeArea")))
                {
                    areaList.Add(node);
                }
            }

            if (checkOption == AreaCheckOption.Round)
            {
                player.rangeArea.transform.position = player.transform.position;
                player.rangeArea.SetActive(false);
            }
            else if (checkOption == AreaCheckOption.Player)
            {
                player.rangeArea.transform.position = player.transform.position;
                player.rangeArea.SetActive(false);
            }

            foreach (var node in areaList)
            {
                if (Physics.CheckBox(node.transform.position, GameUtility.Box, Quaternion.identity, LayerMask.GetMask("Enemy")))
                {
                    rangeEnemyList.Add(_gameManager.activeEnemyList.Find(enemy => GameUtility.Coordinate(enemy.transform.position) == GameUtility.Coordinate(node.transform.position)));
                }
            }

            return(rangeEnemyList);
        }