#==============================================================================
# ■ Blink_Window_Command vol.3.00
# 選択肢、点滅文字ウィンドウの作成
#------------------------------------------------------------------------------
# 『Window_digits_numbe 5.40以上』必須
# 『Cursor_Icon_type2』『Cursor_Icon_type3』より下に挿入
# 11/09/25
#==============================================================================
class Window_Selectable < Window_Base
  attr_accessor :draw_width     # 文字幅を格納(自動で文字幅を補正する仕様に対応)
  attr_accessor :blink_min      # 一番薄い状態(透明度0〜255)
  attr_accessor :blink_max      # 一番濃い状態(透明度0〜255)
  attr_accessor :blink_speed    # 変化する速さ(0=点滅なし 大＝速い　小＝遅い)
  attr_accessor :blink_stop     # 点滅の停止状態の透明度(カーソル選択済み)
  attr_accessor :fonts          # Copy_Fontを格納
  #--------------------------------------------------------------------------
  # ■ オブジェクト初期化(外部操作 = self.blink_ )
  #--------------------------------------------------------------------------
  if !$@;alias hidesp_blink_selectable_initialize initialize;end
  def initialize(x, y, width, height)
    #…………………………………………………………………………………………………
    # ■カスタマイズ項目 # ※以外
    #…………………………………………………………………………………………………
    @blink_min = 50
    @blink_max = 250
    @blink_speed = 8
    @blink_stop = 250
    @fonts = Copy_Font.new # ※
    # □点滅文字色を指定(半透明色を指定した方が見た目がキレイ)
    @fonts.color = Color.new(255,255,0,250)
    #…………………………………………………………………………………………………
    # □元の処理を実行
    hidesp_blink_selectable_initialize(x, y, width, height)
  end
  #--------------------------------------------------------------------------
  # ■ 点滅文字ウィンドウの作成
  #     ch    : self.cursor_rect.heightを指定(Viewport.height)
  #     x     : Viewport.x
  #     y     : Viewport.y
  #     w     : Viewport.width
  #     bw    : Bitmap.width
  #     bh    : Bitmap.height
  #--------------------------------------------------------------------------
  def make_blink_window?(ch = 32,x = self.x+16,y = self.y+16,
    w = self.width/@column_max-32,bw = width,bh = row_max*ch)
    # □文字幅を格納
    if @blink_window == nil or @blink_window.disposed?
      @draw_width = self.width / @column_max-32
      @blink_window = Sprite.new(Viewport.new(x,y,w,ch))
      @blink_window.bitmap = Bitmap.new(bw,bh)
      @blink_window.viewport.z = self.z + 2
      ##@blink_window.viewport.color = Color.new(255,255,255,50)
      @blink_window.bitmap.font.color = @fonts.color
      @blink_window.opacity = @blink_stop
      # □点滅文字ウィンドウの座標更新
      set_blink_window?(self.index)
    end
  end
  #--------------------------------------------------------------------------
  # ■ 点滅文字の更新
  #--------------------------------------------------------------------------
  if !$@;alias hidesp_blink_selectable_update update;end
  def update
    if self.active && @blink_window != nil && @blink_speed != 0
      if @blink_opa
        if @blink_window.opacity >= @blink_max
          @blink_opa = false
        end
        @back_opa = -@blink_speed
      else
        if @blink_window.opacity <= @blink_min
          @blink_opa = true
        end
        @back_opa = @blink_speed
      end
      @blink_window.opacity -= @back_opa
    end
    # □元の処理を実行
    hidesp_blink_selectable_update
  end
  #--------------------------------------------------------------------------
  # ■ カーソルの矩形更新
  #--------------------------------------------------------------------------
  if !$@;alias hidesp_blink_update_cursor_rect update_cursor_rect;end
  def update_cursor_rect
    # □元の処理を実行
    hidesp_blink_update_cursor_rect
    # □点滅文字ウィンドウの更新
    set_blink_window?(self.index)
  end
  #--------------------------------------------------------------------------
  # ■ 点滅文字ウィンドウの座標更新
  #     index    : カーソルのindex
  #     ch       : カーソルの移動幅
  #--------------------------------------------------------------------------
  def set_blink_window?(index,ch = self.cursor_rect.height,
    x = self.cursor_rect.x + self.x + 16,y = self.cursor_rect.y + self.y + 16)
    # □カーソルウィンドウの不可視化
    unless @blink_window == nil or @blink_window.disposed?
      if index == -1
        @blink_window.visible = false
        return
      end
      @blink_window.viewport.rect.x = x
      @blink_window.viewport.ox = index % @column_max * (self.width/@column_max)
      @blink_window.viewport.rect.y = y
      @blink_window.viewport.oy = index / @column_max * ch
    end
  end
  #--------------------------------------------------------------------------
  # ■ カーソルウィンドウの削除
  #--------------------------------------------------------------------------
  if !$@;alias hidesp_blink_selectable_dispose dispose;end
  def dispose
    unless @blink_window == nil or @blink_window.disposed?
      @blink_window.viewport.dispose
      @blink_window.bitmap.dispose
      @blink_window.dispose
      @blink_window = nil
    end
    # □元の処理を実行
    hidesp_blink_selectable_dispose
  end
  #--------------------------------------------------------------------------
  # ■ カーソル位置の設定
  #--------------------------------------------------------------------------
  def index=(index)
    unless @blink_window == nil or @blink_window.disposed?
      @blink_window.visible = index != -1
    end
    @index = index
    # ヘルプテキストを更新 (update_help は継承先で定義される)
    if self.active and @help_window != nil
      update_help
    end
    # カーソルの矩形を更新
    update_cursor_rect
  end
  #--------------------------------------------------------------------------
  # ■ カーソルの停止
  #--------------------------------------------------------------------------
  def active=(active)
    unless @blink_window == nil or @blink_window.disposed?
      if active == false
        @blink_window.opacity = @blink_stop
      end
    end
    super
  end
  #--------------------------------------------------------------------------
  # ■ カーソルウィンドウの可視化
  #--------------------------------------------------------------------------
  def visible=(visible)
    unless @blink_window == nil or @blink_window.disposed?
      if self.index != -1
        @blink_window.visible = visible
      end
    end
    super
  end
  #--------------------------------------------------------------------------
  # ■ X座標の更新
  #--------------------------------------------------------------------------
  def x=(x)
    unless @blink_window == nil or @blink_window.disposed?
      @blink_window.viewport.rect.x = self.cursor_rect.x + x + 16
    end
    super
  end
  #--------------------------------------------------------------------------
  # ■ Y座標の更新
  #--------------------------------------------------------------------------
  def y=(y)
    unless @blink_window == nil or @blink_window.disposed?
      @blink_window.viewport.rect.y = self.cursor_rect.y + y + 16
    end
    super
  end
  #--------------------------------------------------------------------------
  # ■ Z座標の更新
  #--------------------------------------------------------------------------
  def z=(z)
    unless @blink_window == nil or @blink_window.disposed?
      @blink_window.viewport.z = z + 2
    end
    super
  end
end