/// <summary> /// 実際に攻撃を行い、ゲームを進める /// </summary> /// <param name="on_first">1マス先を取るのに使用</param> void Attack_Process(int adjust_value1, int adjust_value2) { var enemy_manager = new Enemy_Manager(); // 隣接してるエネミーを調べる GameObject side_enemy = enemy_manager.Find_Enemy(player_script.position.x + adjust_value1, player_script.position.y + adjust_value2); // 隣接してるエネミーのステータスを取ってくる var enemy_status = side_enemy.GetComponent <Enemy_Controller>().enemy_status; enemy_status.hit_point -= damage_calculation.Damage(player_status.attack, enemy_status.defence); // ダメージのログを流す Log_Scroll.Player_Attack_Log(player_status, side_enemy, damage_calculation.Damage(player_status.attack, enemy_status.defence)); // 攻撃した敵が死んでいたら経験値を取得 if (enemy_status.hit_point <= 0) { // レベルアップより先に経験値を取得 Log_Scroll.Get_Experience_Point(player_status, side_enemy, enemy_status.experience_point); // 実際に経験値を取得し、次レベルに必要な経験値量に達しているかを見る player_status.Add_Experience_Point(enemy_status.experience_point); // ダンジョンに出現中の敵のリストを取得 List <GameObject> enemy_list = Enemy_Manager.Instance.enemies; // プレイヤーに隣接しているものを抽出 enemy_manager.Dead_Enemy(enemy_list.IndexOf(side_enemy)); } // 移動状態に戻す player_action.Set_Action(ePlayer_State.Move); }
/// <summary> /// エネミーの行動を制御 /// </summary> public void Action() { for (int i = 0; i < enemy_manager.enemies.Count; ++i) { // 全部Getしていたら重いのでこれを使う var enemy_status = enemy_manager.enemies[i].GetComponent <Enemy_Controller>().enemy_status; // AIによって入れる処理を変える switch (enemy_status.AI_pattern) { case 1: if (Search_Player(i)) { player_status.hit_point.Value -= damage_calculation.Damage(enemy_status.attack, player_status.defence); break; } else { enemy_manager.enemies[i].GetComponent <Enemy_Controller>().enemy_move.Move_Action(i); Set_Enemy_State(enemy_manager.enemies[i].GetComponent <Enemy>().mode, enemy_manager.enemies[i].GetComponent <Enemy>().Feet); break; } } // ターンを終える enemy_status.End_Turn(); } }