#============================================================================== # ■ XP-RGSS-57 調合屋 [ウィンドウクラス] by Claimh #============================================================================== #============================================================================== # ■ Window_MixtureCmd #============================================================================== class Window_MixtureCmd < Window_Selectable #-------------------------------------------------------------------------- # ● オブジェクト初期化 #-------------------------------------------------------------------------- def initialize super(0, 64, 480, 64) self.contents = Bitmap.new(width - 32, height - 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, 32, @commands[index]) end end #============================================================================== # ■ Window_MixtureList #============================================================================== class Window_MixtureList < Window_Selectable attr_accessor :info_window #-------------------------------------------------------------------------- # ● オブジェクト初期化 #-------------------------------------------------------------------------- def initialize super(0, 128, 360, 480-128) @data = $game_system.mix.make_list @item_max = @data.size @info_window = nil self.contents = Bitmap.new(width - 32, @item_max * 32) 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 * 32 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, 32, d.price.to_s, 2) end #-------------------------------------------------------------------------- # ● アイテム名の描画 #-------------------------------------------------------------------------- def draw_item_name(item, x, y, enable=true) return if item == nil bitmap = RPG::Cache.icon(item.icon_name) self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), enable ? 255 : 128) self.contents.draw_text(x + 28, y, 212, 32, item.name) 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(360, 128, 280, 480-128) self.contents = Bitmap.new(width - 32, height - 32) @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, 32, "所持数:") self.contents.draw_text(4, 32, 200, 32, "調合材料:") self.contents.font.color = normal_color xx = self.contents.width-100-4 self.contents.draw_text(xx, 0, 100, 32, @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, 32, "×") self.contents.draw_text(xx, y, 100, 32, (d.num*@num).to_s, 2) end end #-------------------------------------------------------------------------- # ● アイテム名の描画 #-------------------------------------------------------------------------- def draw_item_name(item, x, y, enable=true) return if item == nil bitmap = RPG::Cache.icon(item.icon_name) self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), enable ? 255 : 128) self.contents.draw_text(x + 28, y, 212, 32, item.name) end end #============================================================================== # ■ Window_MixtureNumber #============================================================================== class Window_MixtureNumber < Window_Base attr_reader :number #-------------------------------------------------------------------------- # ● オブジェクト初期化 #-------------------------------------------------------------------------- def initialize super(20, 128+70, 360-20*2, 96+8+32) self.contents = Bitmap.new(width - 32, height - 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(202, 32, 32, 32, "×") self.contents.draw_text(self.contents.width-32-4, 32, 32, 32, @number.to_s, 2) self.cursor_rect.set(self.contents.width-32, 32, 32, 32) # 合計価格と通貨単位を描画 domination = $data_system.words.gold cx = contents.text_size(domination).width total_price = @price * @number self.contents.font.color = normal_color self.contents.draw_text(44, 64, 218-cx-2, 32, total_price.to_s, 2) self.contents.font.color = system_color self.contents.draw_text(262-cx, 64, cx, 32, domination, 2) end #-------------------------------------------------------------------------- # ● フレーム更新 #-------------------------------------------------------------------------- def update super if self.active # カーソル右 (+1) if Input.repeat?(Input::RIGHT) and @number < @max $game_system.se_play($data_system.cursor_se) @number += 1 refresh end # カーソル左 (-1) if Input.repeat?(Input::LEFT) and @number > 1 $game_system.se_play($data_system.cursor_se) @number -= 1 refresh end # カーソル上 (+10) if Input.repeat?(Input::UP) and @number < @max $game_system.se_play($data_system.cursor_se) @number = [@number + 10, @max].min refresh end # カーソル下 (-10) if Input.repeat?(Input::DOWN) and @number > 1 $game_system.se_play($data_system.cursor_se) @number = [@number - 10, 1].max 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 (640-w)/2 end #-------------------------------------------------------------------------- # ● オブジェクト初期化 #-------------------------------------------------------------------------- def initialize super(xx(240), 200, 240, 64) self.contents = Bitmap.new(width - 32, height - 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, 32) self.contents.draw_text(0, 0, w, 32, 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