void DoubleCloseStrike(List <Player> doubleList, Enemy thisEnemy) { if (thisEnemy.currentVigor == emptyVigor) { return; } if (_gameManager.doubleClose) { GameUtility.ShuffleList(doubleList); foreach (var player in doubleList) { 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; } } } }
void GoNear(Enemy thisEnemy) { if (!CheckMarked()) { return; } if (thisEnemy.currentVigor == emptyVigor) { return; } var endingEnemyList = MakeEndList(); foreach (var endingEnemy in endingEnemyList) { var baseNodeList = _areaCheck.BaseNode(endingEnemy); GameUtility.ShuffleList(baseNodeList); foreach (var node in baseNodeList) { if (_areaCheck.CanMove(thisEnemy, node)) { var otherWalk = thisEnemy.UnitWalk(AreaOrder.Double, WalkOrder.Base, node); if (otherWalk) { print("Go Near"); thisEnemy.currentVigor = emptyVigor; } return; } } } }
void BaseCloseObstacle(List <Player> baseList, 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(baseList); // Check Player and TileNode foreach (var player in baseList) { 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!"); } } }
void ChaseCloseStrike(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.ChaseTileList(player, thisEnemy); GameUtility.ShuffleList(tileList); foreach (var node in tileList) { if (_areaCheck.CanMove(thisEnemy, node)) { if (_areaCheck.CanChase(player, node)) { targetPlayer = player; targetTileNode = node; break; } } } } if (targetPlayer != null && targetTileNode != null) { print("ChaseClose"); var way = thisEnemy.UnitWalk(AreaOrder.Double, WalkOrder.Base, targetTileNode); if (way) { thisEnemy.currentVigor = emptyVigor; } } }
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)); } }
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(); } }
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(); } }