#============================================================================== # ■ VX-RGSS2-18 調合屋 [ウィンドウクラス] by Claimh #============================================================================== #============================================================================== # ■ Window_MixtureCmd #============================================================================== class Window_MixtureCmd < Window_Selectable #-------------------------------------------------------------------------- # ● オブジェクト初期化 #-------------------------------------------------------------------------- def initialize super(0, WLH + 32, 544-160, WLH + 32) @commands = ["アイテムの調合", "やめる"] @item_max = @column_max = @commands.size refresh self.index = 0 end #-------------------------------------------------------------------------- # ● リフレッシュ #-------------------------------------------------------------------------- def refresh self.contents.clear for i in 0...@item_max draw_item(i) end end #-------------------------------------------------------------------------- # ● 項目の描画 # index : 項目番号 #-------------------------------------------------------------------------- def draw_item(index) x = 4 + index * self.width / 2 self.contents.draw_text(x, 0, self.contents.width / 2, WLH, @commands[index]) end end #============================================================================== # ■ Window_MixtureList #============================================================================== class Window_MixtureList < Window_Selectable attr_accessor :info_window #-------------------------------------------------------------------------- # ● オブジェクト初期化 #-------------------------------------------------------------------------- def initialize super(0, (WLH+32)*2, 304, 416-(WLH+32)*2) @data = $game_system.mix.make_list @item_max = @data.size create_contents @info_window = nil data_refresh end #-------------------------------------------------------------------------- # ● データリフレッシュ #-------------------------------------------------------------------------- def data_refresh for d in @data d.update_status end refresh end #-------------------------------------------------------------------------- # ● リフレッシュ #-------------------------------------------------------------------------- def refresh self.contents.clear for i in 0...@item_max draw_i(i) end end #-------------------------------------------------------------------------- # ● 項目描画 #-------------------------------------------------------------------------- def draw_i(i) d = data_i(i) y = i * WLH self.contents.font.color.alpha = d.enable? ? 255 : 128 draw_item_name(d.obj, 4, y, d.enable?) self.contents.draw_text(self.contents.width-100-4, y, 100, WLH, d.price.to_s, 2) end #-------------------------------------------------------------------------- # ● アイテム取得 #-------------------------------------------------------------------------- def data_i(i) return nil if i < 0 return @data[i] end def data return data_i(@index) end #-------------------------------------------------------------------------- # ● ヘルプテキスト更新 #-------------------------------------------------------------------------- def update_help @help_window.set_text(data.nil? ? "" : data.obj.description) @info_window.data = data unless @info_window.nil? end end #============================================================================== # ■ Window_MixtureInfo #============================================================================== class Window_MixtureInfo < Window_Base #-------------------------------------------------------------------------- # ● オブジェクト初期化 #-------------------------------------------------------------------------- def initialize super(304, (WLH+32)*2, 544-304, 416-(WLH+32)*2) @num = 1 @data = nil end def refresh_num @num = 0 self.num = 1 end def num=(n) return if @num == n @num = n refresh end def data=(d) return if @data == d @data = d refresh end #-------------------------------------------------------------------------- # ● リフレッシュ #-------------------------------------------------------------------------- def refresh self.contents.clear return if @data.nil? self.contents.font.color = system_color self.contents.draw_text(4, 0, 200, WLH, "所持数:") self.contents.draw_text(4, 32, 200, WLH, "調合材料:") self.contents.font.color = normal_color xx = self.contents.width-100-4 self.contents.draw_text(xx, 0, 100, WLH, @data.num.to_s, 2) for i in 0...@data.size y = 64 + i * 32 d = @data.cond[i] enable = d.enable?(@num) self.contents.font.color.alpha = enable ? 255 :128 draw_item_name(d.obj, 20, y, enable) self.contents.draw_text(250, y, 32, WLH, "×") self.contents.draw_text(xx, y, 100, WLH, (d.num*@num).to_s, 2) end end end #============================================================================== # ■ Window_MixtureNumber #============================================================================== class Window_MixtureNumber < Window_Base attr_reader :number #-------------------------------------------------------------------------- # ● オブジェクト初期化 #-------------------------------------------------------------------------- def initialize super(20, (WLH+32)*2+50, 304-20*2, WLH*3+32) @item = nil @max = 1 @price = 0 @number = 1 self.z = 200 self.visible = false end #-------------------------------------------------------------------------- # ● アイテム、最大個数、価格の設定 #-------------------------------------------------------------------------- def set(data) @data = data @max = data.enable_num @price = data.price @number = 1 refresh self.visible = true self.active = true end #-------------------------------------------------------------------------- # ● リフレッシュ #-------------------------------------------------------------------------- def refresh self.contents.clear draw_item_name(@data.obj, 4, 0) self.contents.font.color = normal_color self.contents.draw_text(178, WLH, 32, WLH, "×") self.contents.draw_text(self.contents.width-32-4, WLH, 32, WLH, @number.to_s, 2) self.cursor_rect.set(self.contents.width-28, WLH, 28, WLH) # 合計価格と通貨単位を描画 domination = $data_system.terms.gold cx = contents.text_size(domination).width total_price = @price * @number self.contents.font.color = normal_color self.contents.draw_text(44, WLH*2, 188-cx-2, WLH, total_price.to_s, 2) self.contents.font.color = system_color self.contents.draw_text(232-cx, WLH*2, cx, WLH, domination, 2) end #-------------------------------------------------------------------------- # ● フレーム更新 #-------------------------------------------------------------------------- def update super if self.active last_number = @number if Input.repeat?(Input::RIGHT) and @number < @max @number += 1 end if Input.repeat?(Input::LEFT) and @number > 1 @number -= 1 end if Input.repeat?(Input::UP) and @number < @max @number = [@number + 10, @max].min end if Input.repeat?(Input::DOWN) and @number > 1 @number = [@number - 10, 1].max end if @number != last_number Sound.play_cursor refresh end end end end #============================================================================== # ■ Window_MixtureCaution #============================================================================== class Window_MixtureCaution < Window_Base include Mixture::MesCmd WAIT_TIME = 40 # 表示ウェイト時間[frame] FADE_F = WAIT_TIME / 4 def xx(w) return (544-w)/2 end #-------------------------------------------------------------------------- # ● オブジェクト初期化 #-------------------------------------------------------------------------- def initialize super(xx(240), 160, 240, WLH+32) @wait = 0 self.z = 600 self.visible = false end #-------------------------------------------------------------------------- # ● リフレッシュ #-------------------------------------------------------------------------- def set_text(type, item=nil) return unless Mixture::MESSAGE case type when M_S_C; text = "#{item.name}を調合しました" when M_N_P; text = "所持金が足りません" when M_N_I; text = "材料が足りません" when M_N_N; text = "これ以上、持てません" else; p "bad arg", type; return end w = self.contents.text_size(text).width self.width = w + 32 self.x = xx(self.width) self.contents.dispose self.contents = Bitmap.new(w, WLH) self.contents.draw_text(0, 0, w, WLH, text) @wait = WAIT_TIME self.visible = true self.opacity = self.contents_opacity = 255 end #-------------------------------------------------------------------------- # ● リフレッシュ #-------------------------------------------------------------------------- def update super @wait -= 1 if @wait < FADE_F self.opacity = self.contents_opacity = 255 / FADE_F * @wait self.visible = false if @wait == 0 end end end