class Scene_File < Scene_MenuBase
  
  #--------------------------------------------------------------------------
  # ● 開始処理
  #--------------------------------------------------------------------------
  alias takodddbmsstart start
  def start
    @pindex_max = DataManager.savefile_pindex_max
    takodddbmsstart
    show_windows
  end  
  #--------------------------------------------------------------------------
  # ● カーソルの更新
  #--------------------------------------------------------------------------
  def update_cursor
    last_index = @index
    cursor_down (Input.trigger?(:DOWN))  if Input.repeat?(:DOWN)
    cursor_up   (Input.trigger?(:UP))    if Input.repeat?(:UP)
    cursor_right (Input.trigger?(:RIGHT))  if Input.repeat?(:RIGHT)
    cursor_left   (Input.trigger?(:LEFT))  if Input.repeat?(:LEFT)        
    cursor_pagedown   if Input.trigger?(:R)
    cursor_pageup     if Input.trigger?(:L)
    if @index != last_index
      Sound.play_cursor
      @savefile_windows[last_index].selected = false
      @savefile_windows[@index].selected = true
    end
  end  
  
  # ● ページ
  def page
    return 0 unless @index
    @index / @pindex_max
  end  
  
  # ● ページにおけるindex
  def pindex
    return 0 unless @index
    @index % @pindex_max
  end    
  
  def cursor_right(wrap)
    @index = (@index + @pindex_max) % item_max if @index < item_max - 1 || wrap
    ensure_cursor_visible    
  end  
  
  def cursor_left(wrap)
    @index = (@index - @pindex_max) % item_max if @index < item_max - 1 || wrap
    ensure_cursor_visible       
  end 

  #--------------------------------------------------------------------------
  # ● カーソル位置が画面内になるようにスクロール
  #--------------------------------------------------------------------------
  def ensure_cursor_visible
    self.top_index = pindex if pindex < top_index
    self.bottom_index = pindex if pindex > bottom_index
  end  
  
  
  #--------------------------------------------------------------------------
  # ● 終了処理
  #--------------------------------------------------------------------------
  def terminate
    super
    @savefile_viewport.dispose
    @savefile_windows.each {|window| window.dispose }
  end
  #--------------------------------------------------------------------------
  # ● フレーム更新
  #--------------------------------------------------------------------------
  alias tako442saveupdate update
  def update
    tako442saveupdate
    show_windows
  end

  
  #--------------------------------------------------------------------------
  # ● 先頭のインデックスの設定
  #--------------------------------------------------------------------------
  def top_index=(index)
    index = 0 if index < 0
    index = @pindex_max - visible_max if index > @pindex_max - visible_max
    @savefile_viewport.oy = index * savefile_height
  end

  #--------------------------------------------------------------------------
  # ● セーブファイルウィンドウの作成
  #--------------------------------------------------------------------------
  def create_savefile_windows
    @savefile_windows = Array.new(item_max) do |i|
      Window_SaveFile.new(savefile_height, i % @pindex_max)
    end
    @savefile_windows.each {|window| window.viewport = @savefile_viewport }
    @savefile_windows.each_with_index {|window , index| window.set_page(index , @pindex_max) } 
    

  end
  
  #--------------------------------------------------------------------------
  # ● ファイルwindowの表示
  #--------------------------------------------------------------------------
  def show_windows
    @savefile_windows.each do |window|
      if window.page == page
        window.show 
      else
        window.hide
      end  
    end  
    
  end 
  
  
end  