#==============================================================================
# ■ Coin_Chenge vol.3.00
#------------------------------------------------------------------------------
# ※『Window_digits_number 5.40以上』(必須)
# ※『Picture_Blink_Cursor 1.20以上』(必須)
# ※『Coin_Base 1.00以上』(必須)より下に挿入
# 12/02/03
#==============================================================================
module HIDE_CHENGE
  #==============================================================================
  # ■ イベントコマンド『スクリプト』に以下を追加
  #------------------------------------------------------------------------------
  #   make_coin_shop(type,pattern)
  #------------------------------------------------------------------------------
  #   type=0 コイン交換(コインの購入) pattern=n 景品リスト
  #==============================================================================
  # ■ 音の設定 ※ファイル名を指定 ※Audioフォルダ内 #()のファイル名
  #==============================================================================
  C_BGM = "019-Field02"            # コイン交換所実行中のBGM(BGM)
  #==============================================================================
  # ■ コイン購入パターンを設定(手動設定)
  #==============================================================================
  #--------------------------------------------------------------------------
  # コイン1枚を購入できる金額(n = $game_temp.coin_shop_pattern から参照される)
  #--------------------------------------------------------------------------
  C_RATE = []
  C_RATE[0] = 20 # コイン1枚は20G
  C_RATE[1] = 10
  C_RATE[2] = 40
  #==============================================================================
  # ■ 文字設定
  #==============================================================================
  AN_COLOR = Color.new(255,255,255,255)    # 通常色
  BN_COLOR = Color.new(80,80,80,255)       # 影色(SHADOW/ROUND)
  AS_COLOR = Color.new(192,224,255,255)    # システム色
  BS_COLOR = Color.new(0,128,128,255)      # システム影色(SHADOW/ROUND)
  AT_COLOR = Color.new(0,128,255,255)      # タイトル色
  BT_COLOR = Color.new(149,202,255,255)    # タイトル影色(SHADOW/ROUND)
  AM_COLOR = Color.new(100,100,100,255)    # 電卓数値色
  BM_COLOR = Color.new(180,180,180,255)    # 電卓数値影色(SHADOW/ROUND)
  #--------------------------------------------------------------------------
  # ■ 数値 の文字設定
  #--------------------------------------------------------------------------
  N_SIZE = 22                              # 文字サイズ
  N_BOLD = false                           # 太文字フラグ[true/false]
  N_ITALIC = false                         # 斜め文字フラグ[true/false]
  N_SHADOW = false                         # 影文字フラグ[true/false]
  N_ROUND = true                           # 囲み文字フラグ[true/false]
  N_NAME = ["ＭＳ Ｐゴシック"]             # フォント名
  #--------------------------------------------------------------------------
  # ■ システム の文字設定
  #--------------------------------------------------------------------------
  W_SIZE = 20                              # 文字サイズ
  W_BOLD = false                           # 太文字フラグ[true/false]
  W_ITALIC = false                         # 斜め文字フラグ[true/false]
  W_SHADOW = false                         # 影文字フラグ[true/false]
  W_ROUND =  true                          # 囲み文字フラグ[true/false]
  W_NAME = ["ＭＳ ゴシック"]               # フォント名
  #--------------------------------------------------------------------------
  # ■ 電卓の文字(数値)設定
  #--------------------------------------------------------------------------
  M_SIZE = 24                              # 文字サイズ
  M_BOLD = false                           # 太文字フラグ[true/false]
  M_ITALIC = false                         # 斜め文字フラグ[true/false]
  M_SHADOW = true                          # 影文字フラグ[true/false]
  M_ROUND =  false                         # 囲み文字フラグ[true/false]
  M_NAME = ["Arial","ＭＳ Ｐゴシック"]     # フォント名
  #==============================================================================
  # ■ メニュー文字設定
  #==============================================================================
  TEXT1 = "COIN"
  TEXT2 = "コイン1枚"
  TEXT3 = "購入数"
  TEXT4 = "合計金額"
  TEXT5 = "所持金"
  TEXT6 = "数値【"
  TEXT6_2 = "】を入力します。"
  TEXT7 = "コインを購入します。"
  TEXT8 = "入力を取り消します。"
  TEXT9 = "最大購入数:"
  TEXT10 = "枚" # コインの単位
  KEY0 = ["0","=","C"]
  KEY1 = ["1","2","3"]
  KEY2 = ["4","5","6"]
  KEY3 = ["7","8","9"]  
  #==============================================================================
  # ■ コイン購入グラフィック設定 ※Windowskinsフォルダ内のファイル名を指定
  #==============================================================================
  BACK = "coin_shop1"         # COIN購入の背景画像
  SELECT = ""                 # COIN購入のカーソル画像
  CURSOR = "cursor_anim"      # カーソルアイコン画像
  #==============================================================================
  
  #==============================================================================
  M_FONT = Copy_Font.new(M_SIZE,M_BOLD,M_ITALIC,M_SHADOW,M_ROUND,M_NAME,AM_COLOR,BM_COLOR)
  W_FONT = Copy_Font.new(W_SIZE,W_BOLD,W_ITALIC,W_SHADOW,W_ROUND,W_NAME,AN_COLOR,BN_COLOR)
  S_FONT = Copy_Font.new(W_SIZE,W_BOLD,W_ITALIC,W_SHADOW,W_ROUND,W_NAME,AS_COLOR,BS_COLOR)
  N_FONT = Copy_Font.new(W_SIZE,W_BOLD,W_ITALIC,W_SHADOW,W_ROUND,W_NAME,AN_COLOR,BN_COLOR)
  T_FONT = Copy_Font.new(W_SIZE,W_BOLD,W_ITALIC,W_SHADOW,W_ROUND,W_NAME,AT_COLOR,BT_COLOR)
end
#==============================================================================
# ■ Scene_Coin_Chenge
#==============================================================================
class Scene_Coin_Chenge
  include HIDE_CHENGE
  #--------------------------------------------------------------------------
  # ■ オブジェクト初期化
  #--------------------------------------------------------------------------
  def initialize
    # □マップ BGM を記憶し、BGM を停止
    $game_temp.map_bgm = $game_system.playing_bgm
    $game_system.bgm_stop
    # □アイテム交換 BGM を演奏
    $game_system.bgm_play(RPG::AudioFile.new(HIDE_CHENGE::C_BGM))
  end
  #--------------------------------------------------------------------------
  # ■ メイン処理
  #--------------------------------------------------------------------------
  def main
    #…………………………………………………………………………………………………
    # ■文字装飾を取得
    #…………………………………………………………………………………………………
    @s_font = HIDE_CHENGE::S_FONT ; @m_font = HIDE_CHENGE::M_FONT
    @w_font = HIDE_CHENGE::W_FONT ; @n_font = HIDE_CHENGE::N_FONT
    @t_font = HIDE_CHENGE::T_FONT
    #…………………………………………………………………………………………………
    # ■背景を作成
    #…………………………………………………………………………………………………
    @coin_chenge_back = Picture_Blink_Cursor.new(RPG::Cache.windowskin(HIDE_CHENGE::BACK))
    @rate = HIDE_CHENGE::C_RATE[$game_temp.coin_shop_pattern]
    #…………………………………………………………………………………………………
    # ■文字を描画
    #…………………………………………………………………………………………………
    g = $data_system.words.gold
    @coin_chenge_back.draw_text(60+4,32*3,160,32,HIDE_CHENGE::TEXT3,0,@s_font)
    @coin_chenge_back.draw_text(380,32*3,160,32,HIDE_CHENGE::TEXT10,0,@s_font)
    
    @coin_chenge_back.draw_text(60+4,32*4,160,32,HIDE_CHENGE::TEXT4,0,@s_font)
    @coin_chenge_back.draw_text(380,32*4,160,32,g,0,@s_font)
    @coin_chenge_back.draw_text(60+4,32*8,160,32,HIDE_CHENGE::TEXT5,0,@s_font)
    
    @coin_chenge_back.draw_text(60+4,32*7,360,32,HIDE_CHENGE::TEXT1,0,@s_font)
    @coin_chenge_back.draw_text(380,32*7,160,32,HIDE_CHENGE::TEXT10,0,@s_font)
    
    # □タイトルとMax購入値の描画
    draw_max?
    
    @coin_chenge_back.draw_text(380,32*8,160,32,g,0,@s_font)
    @key = 1
    @buy_coins = []
    @buy_coin = 0 ; @buy_gold = 0
    #…………………………………………………………………………………………………
    # ■所持コインウィンドウを作成
    #…………………………………………………………………………………………………
    @coin_window = Window_digits_number.new(240+16,16+32*6,100,$game_party.coin,10,10,@n_font)
    #…………………………………………………………………………………………………
    # ■所持金ウィンドウを作成
    #…………………………………………………………………………………………………
    @gold_window = Window_digits_number.new(240+16,16+32*7,100,$game_party.gold,10,10,@n_font)
    #…………………………………………………………………………………………………
    # ■購入コインウィンドウを作成
    #…………………………………………………………………………………………………
    @buy_coin_window = Window_digits_number.new(240+16,16+32*2,100,@buy_coin,10,10,@n_font)
    #…………………………………………………………………………………………………
    # ■購入金額ウィンドウを作成
    #…………………………………………………………………………………………………
    @buy_gold_window = Window_digits_number.new(240+16,16+32*3,100,@buy_gold,10,10,@n_font)
    #…………………………………………………………………………………………………
    # ■ゲーム開始選択ウィンドウを作成
    #…………………………………………………………………………………………………
    pic = RPG::Cache.windowskin(HIDE_CHENGE::SELECT)
    icon = RPG::Cache.windowskin(HIDE_CHENGE::CURSOR)
    com = [HIDE_CHENGE::KEY0,HIDE_CHENGE::KEY1,HIDE_CHENGE::KEY2,HIDE_CHENGE::KEY3]
    @game_select_window = []
    y_es = [144,90,44,2]
    t0 = HIDE_CHENGE::TEXT6 ; t1 = HIDE_CHENGE::TEXT6_2
    l0 = [t0 + KEY0[0] + t1,HIDE_CHENGE::TEXT7,HIDE_CHENGE::TEXT8]
    l1 = [t0 + KEY1[0] + t1,t0 + KEY1[1] + t1,t0 + KEY1[2] + t1]
    l2 = [t0 + KEY2[0] + t1,t0 + KEY2[1] + t1,t0 + KEY2[2] + t1]
    l3 = [t0 + KEY3[0] + t1,t0 + KEY3[1] + t1,t0 + KEY3[2] + t1]
    
    helps = [l0,l1,l2,l3]
    for i in 0...4
      @game_select_window[i] = Picture_Blink_Cursor.new(482,286+y_es[i],32,32,8,0,3,3,true)
      @game_select_window[i].draw_cursor(pic,com[i],@m_font,icon)
      if i == 1
        @game_select_window[i].start
      end
      # □ヘルプウィンドウの関連付け
      @game_select_window[i].make_helps(60,32*5,helps[i],@n_font)
    end
    @game_select_window.each{|a| a.visible = true }
    
    
    # トランジション実行
    Graphics.transition
    # メインループ
    loop do
      # ゲーム画面を更新
      Graphics.update
      # 入力情報を更新
      Input.update
      # フレーム更新
      update
      # 画面が切り替わったらループを中断
      if $scene != self
        break
      end
    end
    # トランジション準備
    Graphics.freeze
    # ウィンドウを解放
    @coin_chenge_back.dispose
    @coin_window.dispose
    @gold_window.dispose
    @buy_coin_window.dispose
    @buy_gold_window.dispose
    @game_select_window.each{|a| a.dispose }
  end
  #--------------------------------------------------------------------------
  # ■ タイトルとMax購入値の描画
  #--------------------------------------------------------------------------
  def draw_max?
    g = $data_system.words.gold
    s = $game_party.gold != 0 ? $game_party.gold / @rate : 0
    max = HIDE_CHENGE::TEXT9 + s.to_s + HIDE_CHENGE::TEXT10
    text = HIDE_CHENGE::TEXT2 + ":" + @rate.to_s + g + "  " + max
    @coin_chenge_back.draw_text(40+4,32*2-4,320,32,text,0,@t_font)
  end
  #--------------------------------------------------------------------------
  # ■ フレーム更新
  #--------------------------------------------------------------------------
  def update
    #…………………………………………………………………………………………………
    # ■ 回転数値の更新(所持コイン)
    #…………………………………………………………………………………………………
    @coin_window.update($game_party.coin)
    @gold_window.update($game_party.gold)
    
    @buy_coin_window.refresh(@buy_coin)
    @buy_gold_window.refresh(@buy_gold)
    
    if @game_select_window[0].active
      @key = 0
      @game_select_window[0].update
    end
    if @game_select_window[1].active
      @key = 1
      @game_select_window[1].update
    end
    if @game_select_window[2].active
      @key = 2
      @game_select_window[2].update
    end
    if @game_select_window[3].active
      @key = 3
      @game_select_window[3].update
    end
    #…………………………………………………………………………………………………
    # ■ 上 ボタンが押された場合
    #…………………………………………………………………………………………………
    if Input.repeat?(Input::UP)
      if @game_select_window[1].active
        $game_system.se_play($data_system.cursor_se)
        @game_select_window[1].active = false
        @game_select_window[2].active = true
        @game_select_window[2].index = @game_select_window[1].index
        @game_select_window[1].index = -1
        return
      end
      if @game_select_window[2].active
        $game_system.se_play($data_system.cursor_se)
        @game_select_window[2].active = false
        @game_select_window[3].active = true
        @game_select_window[3].index = @game_select_window[2].index
        @game_select_window[2].index = -1
        return
      end
      if @game_select_window[3].active
        $game_system.se_play($data_system.cursor_se)
        @game_select_window[3].active = false
        @game_select_window[0].active = true
        @game_select_window[0].index = @game_select_window[3].index
        @game_select_window[3].index = -1
        return
      end
      if @game_select_window[0].active
        $game_system.se_play($data_system.cursor_se)
        @game_select_window[0].active = false
        @game_select_window[1].active = true
        @game_select_window[1].index = @game_select_window[0].index
        @game_select_window[0].index = -1
        return
      end
    end
    #…………………………………………………………………………………………………
    # ■ 下 ボタンが押された場合
    #…………………………………………………………………………………………………
    if Input.repeat?(Input::DOWN)
      if @game_select_window[1].active
        $game_system.se_play($data_system.cursor_se)
        @game_select_window[1].active = false
        @game_select_window[0].active = true
        @game_select_window[0].index = @game_select_window[1].index
        @game_select_window[1].index = -1
        return
      end
      if @game_select_window[2].active
        $game_system.se_play($data_system.cursor_se)
        @game_select_window[2].active = false
        @game_select_window[1].active = true
        @game_select_window[1].index = @game_select_window[2].index
        @game_select_window[2].index = -1
        return
      end
      if @game_select_window[3].active
        $game_system.se_play($data_system.cursor_se)
        @game_select_window[3].active = false
        @game_select_window[2].active = true
        @game_select_window[2].index = @game_select_window[3].index
        @game_select_window[3].index = -1
        return
      end
      if @game_select_window[0].active
        $game_system.se_play($data_system.cursor_se)
        @game_select_window[0].active = false
        @game_select_window[3].active = true
        @game_select_window[3].index = @game_select_window[0].index
        @game_select_window[0].index = -1
        return
      end
    end
    # □フレーム更新
    if @game_select_window[@key].active
      update_key
      return
    end
  end
  #--------------------------------------------------------------------------
  # ■ フレーム更新
  #--------------------------------------------------------------------------
  def update_key
    #…………………………………………………………………………………………………
    # ■ B ボタンが押された場合
    #…………………………………………………………………………………………………
    if Input.repeat?(Input::B)
      # □キャンセル SE を演奏
      $game_system.se_play($data_system.cancel_se)
      # □アイテム交換開始前の BGM に戻す
      $game_system.bgm_play($game_temp.map_bgm)
      # □マップ画面に切り替え
      $scene = Scene_Map.new
      return
    end
    #…………………………………………………………………………………………………
    # ■ C ボタンが押された場合
    #…………………………………………………………………………………………………
    if Input.trigger?(Input::C)
      case @key
      when 0
        case @game_select_window[@key].index
        when 0
          if @buy_coins == [] or @buy_coins.size >= 10
            # □ブザー SE を演奏
            $game_system.se_play($data_system.buzzer_se)
            return
          end
          @buy_coins.unshift(0)
        when 1
          if @buy_coin == 0
            # □ブザー SE を演奏
            $game_system.se_play($data_system.buzzer_se)
            return
          end
          # 決定 SE を演奏
          $game_system.se_play($data_system.decision_se)
          # □購入
          $game_party.lose_gold(@buy_gold)
          $game_party.gain_coin(@buy_coin)
          # □タイトルとMax購入値の描画
          draw_max?
          
          # □入力解除
          @buy_coins = []
          @buy_coin = 0 ; @buy_gold = 0
          return
        when 2
          if @buy_coin == 0
            # □ブザー SE を演奏
            $game_system.se_play($data_system.buzzer_se)
            return
          end
          # 決定 SE を演奏
          $game_system.se_play($data_system.decision_se)
          # □入力解除
          @buy_coins = []
          @buy_coin = 0 ; @buy_gold = 0
          return
        end
      when 1
        if @buy_coins.size >= 10
          # □ブザー SE を演奏
          $game_system.se_play($data_system.buzzer_se)
          return
        end
        @buy_coins.unshift(1+@game_select_window[@key].index)
      when 2
        if @buy_coins.size >= 10
          # □ブザー SE を演奏
          $game_system.se_play($data_system.buzzer_se)
          return
        end
        @buy_coins.unshift(4+@game_select_window[@key].index)
      when 3
        if @buy_coins.size >= 10
          # □ブザー SE を演奏
          $game_system.se_play($data_system.buzzer_se)
          return
        end
        @buy_coins.unshift(7+@game_select_window[@key].index)
      end
      # □入力値をコイン数に変換
      if @buy_coins != []
        buy_coin = @buy_coins[0]
        for i in 1...@buy_coins.size
          b = 10**i
          buy_coin += b * @buy_coins[i]
        end
      else
        return
      end
      # □合計金額を計算
      buy_gold = @rate * buy_coin
      # □合計金額の桁数を取得
      ds = buy_gold.abs > 0 ? [[(Math.log10(buy_gold.abs).to_i) + 1, 1].max,10].min : 1
      # □金額7桁数以上はエラー/所持金不足/所持コインMax
      if ds > 7 or $game_party.gold < buy_gold or ($game_party.coin + buy_coin) >  9999999999
        # □ブザー SE を演奏
        $game_system.se_play($data_system.buzzer_se)
        @buy_coins.delete_at(0)
        return
      end
      # 決定 SE を演奏
      $game_system.se_play($data_system.decision_se)
      @buy_coin = buy_coin
      @buy_gold = buy_gold
      return
    end
  end
end
