#==============================================================================
# ■ Skill_Sort
#------------------------------------------------------------------------------
# 　スキルの並び替え
#   『A』ボタンは、スキルの自動整列(ID順に並び替え)
#==============================================================================
 #06/12/02

class Game_Actor < Game_Battler
  #--------------------------------------------------------------------------
  # ■ スキルを覚える(再定義)
  #--------------------------------------------------------------------------
  def learn_skill(skill_id)
    if skill_id > 0 and not skill_learn?(skill_id)
      @skills.push(skill_id)
      # ■配列をソートしない
      ##@skills.sort!
    end
  end
end

class Window_Skill < Window_Selectable
  # □2nd_Cursor_Iconの導入が必須
  include HIDESP_CRS2
end

class Scene_Skill
  #--------------------------------------------------------------------------
  # ■ フレーム更新 (再定義)
  #--------------------------------------------------------------------------
  def update_skill
    # A ボタンが押された場合
    if Input.trigger?(Input::A)
      # カーソル SE を演奏
      $game_system.se_play($data_system.cursor_se)
      # ■配列をソート
      @actor.skills.sort!
      @skill_window.refresh
      return
    end
    
    # B ボタンが押された場合
    if Input.trigger?(Input::B)
      # キャンセル SE を演奏
      $game_system.se_play($data_system.cancel_se)
      if @skill_window.index2 != -1
        @skill_window.index2 = -1
        @skill_window.refresh
      else
        # メニュー画面に切り替え
        $scene = Scene_Menu.new(1)
      end
      return
    end
    # C ボタンが押された場合
    if Input.trigger?(Input::C)
      # スキルウィンドウで現在選択されているデータを取得
      @skill = @skill_window.skill
      #…………………………………………………………………………………………………
      # ■第2カーソルがOFFの場合
      #…………………………………………………………………………………………………
      if @skill_window.index2 == -1
        # 決定 SE を演奏
        $game_system.se_play($data_system.decision_se)
        @skill_window.index2 = @skill_window.index
        return
      #…………………………………………………………………………………………………
      # ■スキルの交換
      #…………………………………………………………………………………………………
      elsif @skill_window.index != @skill_window.index2
        # 決定 SE を演奏
        $game_system.se_play($data_system.decision_se)
        # □スキルの交換
        @actor.skills[@skill_window.index],@actor.skills[@skill_window.index2] = @actor.skills[@skill_window.index2],@actor.skills[@skill_window.index]
        @skill_window.refresh
        @skill_window.index2 = -1
        return
      end
      #…………………………………………………………………………………………………
      # ■index2を不可視
      #…………………………………………………………………………………………………
      @skill_window.index2 = -1
      
      # 使用できない場合
      if @skill == nil or not @actor.skill_can_use?(@skill.id)
        # ブザー SE を演奏
        $game_system.se_play($data_system.buzzer_se)
        return
      end
      # 決定 SE を演奏
      $game_system.se_play($data_system.decision_se)
      # 効果範囲が味方の場合
      if @skill.scope >= 3
        # ターゲットウィンドウをアクティブ化
        @skill_window.active = false
        @target_window.x = (@skill_window.index + 1) % 2 * 304
        @target_window.visible = true
        @target_window.active = true
        # 効果範囲 (単体/全体) に応じてカーソル位置を設定
        if @skill.scope == 4 || @skill.scope == 6
          @target_window.index = -1
        elsif @skill.scope == 7
          @target_window.index = @actor_index - 10
        else
          @target_window.index = 0
        end
      # 効果範囲が味方以外の場合
      else
        # コモンイベント ID が有効の場合
        if @skill.common_event_id > 0
          # コモンイベント呼び出し予約
          $game_temp.common_event_id = @skill.common_event_id
          # スキルの使用時 SE を演奏
          $game_system.se_play(@skill.menu_se)
          # SP 消費
          @actor.sp -= @skill.sp_cost
          # 各ウィンドウの内容を再作成
          @status_window.refresh
          @skill_window.refresh
          @target_window.refresh
          # マップ画面に切り替え
          $scene = Scene_Map.new
          return
        end
      end
      return
    end
    # R ボタンが押された場合
    if Input.trigger?(Input::R)
      # カーソル SE を演奏
      $game_system.se_play($data_system.cursor_se)
      # 次のアクターへ
      @actor_index += 1
      @actor_index %= $game_party.actors.size
      # 別のスキル画面に切り替え
      $scene = Scene_Skill.new(@actor_index)
      return
    end
    # L ボタンが押された場合
    if Input.trigger?(Input::L)
      # カーソル SE を演奏
      $game_system.se_play($data_system.cursor_se)
      # 前のアクターへ
      @actor_index += $game_party.actors.size - 1
      @actor_index %= $game_party.actors.size
      # 別のスキル画面に切り替え
      $scene = Scene_Skill.new(@actor_index)
      return
    end
  end
end