//----------------------------------------------------------------------------------------- //ダイレクトアタック処理Update------------------------------------------------------------------------ void EnemyDirectAttackUpdate( ) { for (int i = 0; i < ConstantStorehouse.SQUARE_ROW_NUM; i++) { Square square = _field.getSquare((ConstantStorehouse.SQUARE_ROW_NUM * ConstantStorehouse.FIFTH_ROW_INDEX) + i); // ( 横のマス数 × 五列目 ) + 左からの番号 if (square.On_Card == null) { continue; } if (square.On_Card.gameObject.tag != ConstantStorehouse.TAG_PLAYER2) { continue; } CardMain directAttackCard = square.On_Card; int nowAP = _enemyActivePoint.Point_Num; if (directAttackCard.Card_Data._necessaryAP > nowAP) { continue; } if (directAttackCard.Action_Count >= directAttackCard.MAX_ACTION_COUNT) { continue; } _enemy.DirectAttack(_player, directAttackCard.Card_Data._necessaryAP, directAttackCard); return; } _enemyBehaviorStatus = ENEMY_BEHAVIOR_STATUS.MOVE; }
//------------------------------------------------------------------------------------------------------- //移動処理Update-------------------------------------------------- void EnemyCardMoveUpdate( ) { if (_enemy.Card_In_Field.Count == 0) { _enemyUpdateFlag = false; _enemyBehaviorStatus = ENEMY_BEHAVIOR_STATUS.SUMMON; return; } MoveCardSearch( ); }
//召喚処理Update------------------------------------------------------------------- void EnemySummonUpdate( ) { List <Square> summonSquares = _field.SummonSquare(_enemy.gameObject.tag); if (summonSquares.Count == 0) { _enemyBehaviorStatus = ENEMY_BEHAVIOR_STATUS.DIRECT_ATTACK; return; } CardMain summonCard = null; summonCard = SummonCardSearch( ); if (summonCard == null) { _enemyBehaviorStatus = ENEMY_BEHAVIOR_STATUS.DIRECT_ATTACK; return; } Square summonSquare = null; //第一条件 summonSquare = FirstPrioritySquareSearch( ); if (summonSquare != null) { Summon(summonCard, summonSquare); return; } //第二条件 summonSquare = SecondPrioritySquareSearch( ); if (summonSquare != null) { Summon(summonCard, summonSquare); return; } //第三条件 summonSquare = ThirdPrioritySquareSearch( ); if (summonSquare != null) { Summon(summonCard, summonSquare); return; } if (summonSquare == null) { _enemyBehaviorStatus = ENEMY_BEHAVIOR_STATUS.DIRECT_ATTACK; return; } }
//------------------------------------------------------- //移動するカードを探す------------------------------------------------------------------------- void MoveCardSearch( ) { if (FirstPriorityMoveCard( )) { return; } if (SecondPriorityMoveCard( )) { return; } _enemyBehaviorStatus = ENEMY_BEHAVIOR_STATUS.SUMMON; _enemyUpdateFlag = false; }
IEnumerator EnemyUpdate( ) { while (true) { if (!_enemyUpdateFlag) { yield break; } if (MainPhase._precedenceOneTurnFlag && _enemyBehaviorStatus != ENEMY_BEHAVIOR_STATUS.SUMMON) { _enemyBehaviorStatus = ENEMY_BEHAVIOR_STATUS.SUMMON; _enemyUpdateFlag = false; yield break; } switch (_enemyBehaviorStatus) { case ENEMY_BEHAVIOR_STATUS.SUMMON: EnemySummonUpdate( ); Debug.Log("S"); break; case ENEMY_BEHAVIOR_STATUS.DIRECT_ATTACK: EnemyDirectAttackUpdate( ); Debug.Log("D"); break; case ENEMY_BEHAVIOR_STATUS.MOVE: EnemyCardMoveUpdate( ); Debug.Log("M"); break; default: Assert.IsTrue(false, "エネミーの状態が想定外です"); break; } yield return(new WaitForSeconds(_enemyUpdateTime)); } }