ゲーム中の全てのウィンドウのスーパークラスです。
- A
- C
- D
-
- deactivate,
- dispose,
- draw_actor_class,
- draw_actor_face,
- draw_actor_graphic,
- draw_actor_hp,
- draw_actor_icons,
- draw_actor_level,
- draw_actor_mp,
- draw_actor_name,
- draw_actor_nickname,
- draw_actor_param,
- draw_actor_simple_status,
- draw_actor_tp,
- draw_character,
- draw_currency_value,
- draw_current_and_max_values,
- draw_face,
- draw_gauge,
- draw_icon,
- draw_item_name,
- draw_text,
- draw_text_ex
- F
- G
- H
- K
- L
- M
- N
- O
- P
- R
- S
- T
- U
オブジェクト初期化
Source: show
# File Window_Base.rb, line 10 def initialize(x, y, width, height) super self.windowskin = Cache.system("Window") update_padding update_tone create_contents @opening = @closing = false end
ウィンドウのアクティブ化
Source: show
# File Window_Base.rb, line 151 def activate self.active = true self end
アクター n 番の名前を取得
Source: show
# File Window_Base.rb, line 269 def actor_name(n) actor = n >= 1 ? $game_actors[n] : nil actor ? actor.name : "" end
行の高さを計算
restore_font_size : 計算後にフォントサイズを元に戻す
Source: show
# File Window_Base.rb, line 382 def calc_line_height(text, restore_font_size = true) result = [line_height, contents.font.size].max last_font_size = contents.font.size text.slice(/^.*$/).scan(/\e[\{\}]/).each do |esc| make_font_bigger if esc == "\e{" make_font_smaller if esc == "\e}" result = [result, contents.font.size].max end contents.font.size = last_font_size if restore_font_size result end
テキスト描画色の変更
enabled : 有効フラグ。false のとき半透明で描画
Source: show
# File Window_Base.rb, line 209 def change_color(color, enabled = true) contents.font.color.set(color) contents.font.color.alpha = translucent_alpha unless enabled end
ウィンドウを閉じる
Source: show
# File Window_Base.rb, line 126 def close @closing = true unless close? @opening = false self end
ウィンドウ内容の高さを計算
Source: show
# File Window_Base.rb, line 58 def contents_height height - standard_padding * 2 end
ウィンドウ内容の幅を計算
Source: show
# File Window_Base.rb, line 51 def contents_width width - standard_padding * 2 end
制御文字の事前変換
実際の描画を始める前に、原則として文字列に変わるものだけを置き換える。 文字「」はエスケープ文字(e)に変換。
Source: show
# File Window_Base.rb, line 254 def convert_escape_characters(text) result = text.to_s.clone result.gsub!(/\/) { "\e" } result.gsub!(/\e\e/) { "\\" } result.gsub!(/\eV\[(\d+)\]/) { $game_variables[$1.to_i] } result.gsub!(/\eV\[(\d+)\]/) { $game_variables[$1.to_i] } result.gsub!(/\eN\[(\d+)\]/) { actor_name($1.to_i) } result.gsub!(/\eP\[(\d+)\]/) { party_member_name($1.to_i) } result.gsub!(/\eG/) { Vocab::currency_unit } result end
ウィンドウ内容の作成
Source: show
# File Window_Base.rb, line 79 def create_contents contents.dispose if contents_width > 0 && contents_height > 0 self.contents = Bitmap.new(contents_width, contents_height) else self.contents = Bitmap.new(1, 1) end end
Source: show
# File Window_Base.rb, line 177 def crisis_color; text_color(17); end
ウィンドウの非アクティブ化
Source: show
# File Window_Base.rb, line 159 def deactivate self.active = false self end
解放
Source: show
# File Window_Base.rb, line 22 def dispose contents.dispose unless disposed? super end
職業の描画
Source: show
# File Window_Base.rb, line 496 def draw_actor_class(actor, x, y, width = 112) change_color(normal_color) draw_text(x, y, width, line_height, actor.class.name) end
アクターの顔グラフィック描画
Source: show
# File Window_Base.rb, line 481 def draw_actor_face(actor, x, y, enabled = true) draw_face(actor.face_name, actor.face_index, x, y, enabled) end
アクターの歩行グラフィック描画
Source: show
# File Window_Base.rb, line 474 def draw_actor_graphic(actor, x, y) draw_character(actor.character_name, actor.character_index, x, y) end
HP の描画
Source: show
# File Window_Base.rb, line 550 def draw_actor_hp(actor, x, y, width = 124) draw_gauge(x, y, width, actor.hp_rate, hp_gauge_color1, hp_gauge_color2) change_color(system_color) draw_text(x, y, 30, line_height, Vocab::hp_a) draw_current_and_max_values(x, y, width, actor.hp, actor.mhp, hp_color(actor), normal_color) end
ステートおよび強化/弱体のアイコンを描画
Source: show
# File Window_Base.rb, line 522 def draw_actor_icons(actor, x, y, width = 96) icons = (actor.state_icons + actor.buff_icons)[0, width / 24] icons.each_with_index {|n, i| draw_icon(n, x + 24 * i, y) } end
レベルの描画
Source: show
# File Window_Base.rb, line 512 def draw_actor_level(actor, x, y) change_color(system_color) draw_text(x, y, 32, line_height, Vocab::level_a) change_color(normal_color) draw_text(x + 32, y, 24, line_height, actor.level, 2) end
MP の描画
Source: show
# File Window_Base.rb, line 561 def draw_actor_mp(actor, x, y, width = 124) draw_gauge(x, y, width, actor.mp_rate, mp_gauge_color1, mp_gauge_color2) change_color(system_color) draw_text(x, y, 30, line_height, Vocab::mp_a) draw_current_and_max_values(x, y, width, actor.mp, actor.mmp, mp_color(actor), normal_color) end
名前の描画
Source: show
# File Window_Base.rb, line 488 def draw_actor_name(actor, x, y, width = 112) change_color(hp_color(actor)) draw_text(x, y, width, line_height, actor.name) end
二つ名の描画
Source: show
# File Window_Base.rb, line 504 def draw_actor_nickname(actor, x, y, width = 180) change_color(normal_color) draw_text(x, y, width, line_height, actor.nickname) end
能力値の描画
Source: show
# File Window_Base.rb, line 595 def draw_actor_param(actor, x, y, param_id) change_color(system_color) draw_text(x, y, 120, line_height, Vocab::param(param_id)) change_color(normal_color) draw_text(x + 120, y, 36, line_height, actor.param(param_id), 2) end
シンプルなステータスの描画
Source: show
# File Window_Base.rb, line 583 def draw_actor_simple_status(actor, x, y) draw_actor_name(actor, x, y) draw_actor_level(actor, x, y + line_height * 1) draw_actor_icons(actor, x, y + line_height * 2) draw_actor_class(actor, x + 120, y) draw_actor_hp(actor, x + 120, y + line_height * 1) draw_actor_mp(actor, x + 120, y + line_height * 2) end
TP の描画
Source: show
# File Window_Base.rb, line 572 def draw_actor_tp(actor, x, y, width = 124) draw_gauge(x, y, width, actor.tp_rate, tp_gauge_color1, tp_gauge_color2) change_color(system_color) draw_text(x, y, 30, line_height, Vocab::tp_a) change_color(tp_color(actor)) draw_text(x + width - 42, y, 42, line_height, actor.tp.to_i, 2) end
歩行グラフィックの描画
Source: show
# File Window_Base.rb, line 431 def draw_character(character_name, character_index, x, y) return unless character_name bitmap = Cache.character(character_name) sign = character_name[/^[\!\$]./] if sign && sign.include?('$') cw = bitmap.width / 3 ch = bitmap.height / 4 else cw = bitmap.width / 12 ch = bitmap.height / 8 end n = character_index src_rect = Rect.new((n%4*3+1)*cw, (n/4*4)*ch, cw, ch) contents.blt(x - cw / 2, y - ch, bitmap, src_rect) end
通貨単位つき数値(所持金など)の描画
Source: show
# File Window_Base.rb, line 616 def draw_currency_value(value, unit, x, y, width) cx = text_size(unit).width change_color(normal_color) draw_text(x, y, width - cx - 2, line_height, value, 2) change_color(system_color) draw_text(x, y, width, line_height, unit, 2) end
現在値/最大値を分数形式で描画
current : 現在値 max : 最大値 color1 : 現在値の色 color2 : 最大値の色
Source: show
# File Window_Base.rb, line 534 def draw_current_and_max_values(x, y, width, current, max, color1, color2) change_color(color1) xr = x + width if width < 96 draw_text(xr - 40, y, 42, line_height, current, 2) else draw_text(xr - 92, y, 42, line_height, current, 2) change_color(color2) draw_text(xr - 52, y, 12, line_height, "/", 2) draw_text(xr - 42, y, 42, line_height, max, 2) end end
顔グラフィックの描画
enabled : 有効フラグ。false のとき半透明で描画
Source: show
# File Window_Base.rb, line 421 def draw_face(face_name, face_index, x, y, enabled = true) bitmap = Cache.face(face_name) rect = Rect.new(face_index % 4 * 96, face_index / 4 * 96, 96, 96) contents.blt(x, y, bitmap, rect, enabled ? 255 : translucent_alpha) bitmap.dispose end
ゲージの描画
rate : 割合(1.0 で満タン) color1 : グラデーション 左端 color2 : グラデーション 右端
Source: show
# File Window_Base.rb, line 400 def draw_gauge(x, y, width, rate, color1, color2) fill_w = (width * rate).to_i gauge_y = y + line_height - 8 contents.fill_rect(x, gauge_y, width, 6, gauge_back_color) contents.gradient_fill_rect(x, gauge_y, fill_w, 6, color1, color2) end
アイコンの描画
enabled : 有効フラグ。false のとき半透明で描画
Source: show
# File Window_Base.rb, line 411 def draw_icon(icon_index, x, y, enabled = true) bitmap = Cache.system("Iconset") rect = Rect.new(icon_index % 16 * 24, icon_index / 16 * 24, 24, 24) contents.blt(x, y, bitmap, rect, enabled ? 255 : translucent_alpha) end
アイテム名の描画
enabled : 有効フラグ。false のとき半透明で描画
Source: show
# File Window_Base.rb, line 606 def draw_item_name(item, x, y, enabled = true, width = 172) return unless item draw_icon(item.icon_index, x, y, enabled) change_color(normal_color, enabled) draw_text(x + 24, y, width, line_height, item.name) end
テキストの描画
args : Bitmap#draw_text と同じ
Source: show
# File Window_Base.rb, line 218 def draw_text(*args) contents.draw_text(*args) end
制御文字つきテキストの描画
Source: show
# File Window_Base.rb, line 232 def draw_text_ex(x, y, text) reset_font_settings text = convert_escape_characters(text) pos = {:x => x, :y => y, :new_x => x, :height => calc_line_height(text)} process_character(text.slice!(0, 1), text, pos) until text.empty? end
指定行数に適合するウィンドウの高さを計算
Source: show
# File Window_Base.rb, line 65 def fitting_height(line_number) line_number * line_height + standard_padding * 2 end
Source: show
# File Window_Base.rb, line 179 def gauge_back_color; text_color(19); end
ウィンドウの非表示
Source: show
# File Window_Base.rb, line 143 def hide self.visible = false self end
HP の文字色を取得
Source: show
# File Window_Base.rb, line 450 def hp_color(actor) return knockout_color if actor.hp == 0 return crisis_color if actor.hp < actor.mhp / 4 return normal_color end
Source: show
# File Window_Base.rb, line 180 def hp_gauge_color1; text_color(20); end
Source: show
# File Window_Base.rb, line 181 def hp_gauge_color2; text_color(21); end
Source: show
# File Window_Base.rb, line 178 def knockout_color; text_color(18); end
行の高さを取得
Source: show
# File Window_Base.rb, line 30 def line_height return 24 end
フォントを大きくする
Source: show
# File Window_Base.rb, line 367 def make_font_bigger contents.font.size += 8 if contents.font.size <= 64 end
フォントを小さくする
Source: show
# File Window_Base.rb, line 374 def make_font_smaller contents.font.size -= 8 if contents.font.size >= 16 end
MP の文字色を取得
Source: show
# File Window_Base.rb, line 459 def mp_color(actor) return crisis_color if actor.mp < actor.mmp / 4 return normal_color end
Source: show
# File Window_Base.rb, line 184 def mp_cost_color; text_color(23); end
Source: show
# File Window_Base.rb, line 182 def mp_gauge_color1; text_color(22); end
Source: show
# File Window_Base.rb, line 183 def mp_gauge_color2; text_color(23); end
各種文字色の取得
Source: show
# File Window_Base.rb, line 175 def normal_color; text_color(0); end
制御文字の本体を破壊的に取得
Source: show
# File Window_Base.rb, line 328 def obtain_escape_code(text) text.slice!(/^[\$\.\|\^!><\{\}\]|^[A-Z]+/) end
制御文字の引数を破壊的に取得
Source: show
# File Window_Base.rb, line 335 def obtain_escape_param(text) text.slice!(/^\[\d+\]/)[/\d+/].to_i rescue 0 end
ウィンドウを開く
Source: show
# File Window_Base.rb, line 117 def open @opening = true unless open? @closing = false self end
能力値変化の描画色取得
Source: show
# File Window_Base.rb, line 627 def param_change_color(change) return power_up_color if change > 0 return power_down_color if change < 0 return normal_color end
パーティメンバー n 番の名前を取得
Source: show
# File Window_Base.rb, line 277 def party_member_name(n) actor = n >= 1 ? $game_party.members[n - 1] : nil actor ? actor.name : "" end
保留項目の背景色を取得
Source: show
# File Window_Base.rb, line 194 def pending_color windowskin.get_pixel(80, 80) end
Source: show
# File Window_Base.rb, line 186 def power_down_color; text_color(25); end
Source: show
# File Window_Base.rb, line 185 def power_up_color; text_color(24); end
文字の処理
c : 文字 text : 描画処理中の文字列バッファ(必要なら破壊的に変更) pos : 描画位置 {:x, :y, :new_x, :height}
Source: show
# File Window_Base.rb, line 288 def process_character(c, text, pos) case c when "\n" # 改行 process_new_line(text, pos) when "\f" # 改ページ process_new_page(text, pos) when "\e" # 制御文字 process_escape_character(obtain_escape_code(text), text, pos) else # 普通の文字 process_normal_character(c, pos) end end
制御文字によるアイコン描画の処理
Source: show
# File Window_Base.rb, line 359 def process_draw_icon(icon_index, pos) draw_icon(icon_index, pos[:x], pos[:y]) pos[:x] += 24 end
制御文字の処理
code : 制御文字の本体部分(「C」なら「C」)
Source: show
# File Window_Base.rb, line 343 def process_escape_character(code, text, pos) case code.upcase when 'C' change_color(text_color(obtain_escape_param(text))) when 'I' process_draw_icon(obtain_escape_param(text), pos) when '{' make_font_bigger when '}' make_font_smaller end end
改行文字の処理
Source: show
# File Window_Base.rb, line 313 def process_new_line(text, pos) pos[:x] = pos[:new_x] pos[:y] += pos[:height] pos[:height] = calc_line_height(text) end
改ページ文字の処理
Source: show
# File Window_Base.rb, line 322 def process_new_page(text, pos) end
通常文字の処理
Source: show
# File Window_Base.rb, line 304 def process_normal_character(c, pos) text_width = text_size(c).width draw_text(pos[:x], pos[:y], text_width * 2, pos[:height], c) pos[:x] += text_width end
フォント設定のリセット
Source: show
# File Window_Base.rb, line 242 def reset_font_settings change_color(normal_color) contents.font.size = Font.default_size contents.font.bold = false contents.font.italic = false end
ウィンドウの表示
Source: show
# File Window_Base.rb, line 135 def show self.visible = true self end
標準パディングサイズの取得
Source: show
# File Window_Base.rb, line 37 def standard_padding return 12 end
Source: show
# File Window_Base.rb, line 176 def system_color; text_color(16); end
文字色取得
n : 文字色番号(0..31)
Source: show
# File Window_Base.rb, line 168 def text_color(n) windowskin.get_pixel(64 + (n % 8) * 8, 96 + (n / 8) * 8) end
テキストサイズの取得
Source: show
# File Window_Base.rb, line 225 def text_size(str) contents.text_size(str) end
TP の文字色を取得
Source: show
# File Window_Base.rb, line 467 def tp_color(actor) return normal_color end
Source: show
# File Window_Base.rb, line 189 def tp_cost_color; text_color(29); end
Source: show
# File Window_Base.rb, line 187 def tp_gauge_color1; text_color(28); end
Source: show
# File Window_Base.rb, line 188 def tp_gauge_color2; text_color(29); end
半透明描画用のアルファ値を取得
Source: show
# File Window_Base.rb, line 201 def translucent_alpha return 160 end
フレーム更新
Source: show
# File Window_Base.rb, line 91 def update super update_tone update_open if @opening update_close if @closing end
閉じる処理の更新
Source: show
# File Window_Base.rb, line 109 def update_close self.openness -= 48 @closing = false if close? end
開く処理の更新
Source: show
# File Window_Base.rb, line 101 def update_open self.openness += 48 @opening = false if open? end