#============================================================================== # ■ VX-RGSS2-5 用語辞典[シーンクラス] by Claimh #------------------------------------------------------------------------------ # 用語辞典の表示状態を制御するシーンクラス。 # 各用語の未読から既読への表示更新もここで行う。 #------------------------------------------------------------------------------ #【用語辞典呼び出し】 # $scene = Scene_Dictionary.new(menu_index, category) # menu_index : 0 以上=メニュー画面へ戻るときのindex # 0 未満=Map画面に戻る <デフォルト> # category : DESGIN=1のときに使える。辞典で表示するカテゴリID <デフォルト:-1> #============================================================================== class Scene_Dictionary < Scene_Base #-------------------------------------------------------------------------- # ● メイン処理 #-------------------------------------------------------------------------- def initialize(index=-1, category=-1) @back_index = index @category = category @word_frame = Dictionary::INFO_TIMEOUT end #-------------------------------------------------------------------------- # ● 開始処理 #-------------------------------------------------------------------------- def start super create_menu_background # ウィンドウを作成 @ct_window = Window_DictMenu.new @words_window = Window_Dictionary.new @info_window = Window_DictInfo.new @collect_window = Window_DictCollect.new(@category) ## マルチデザイン if Dictionary.d_category_visible @ct_window.help_window = @words_window if Dictionary.d_category_shorten @words_window.visible = false end else @ct_window.active = false @ct_window.visible = false @words_window.active = true @words_window.data_refresh(@category, true) @words_window.index = 0 end @words_window.help_window = @info_window end #-------------------------------------------------------------------------- # ● 終了処理 #-------------------------------------------------------------------------- def terminate super dispose_menu_background @words_window.dispose @ct_window.dispose @info_window.dispose @collect_window.dispose end #-------------------------------------------------------------------------- # ● シーンチェンジ #-------------------------------------------------------------------------- def eixt_dictionary if @back_index < 0 $scene = Scene_Map.new else $scene = Scene_Menu.new(@back_index) end end #-------------------------------------------------------------------------- # ● フレーム更新 #-------------------------------------------------------------------------- def update # メニューウィンドウがアクティブの場合 if @ct_window.active @ct_window.update update_menu # メインウィンドウがアクティブの場合 elsif @words_window.active update_main # インフォウィンドウがアクティブの場合 elsif @info_window.active @info_window.update_arrow update_info end end #-------------------------------------------------------------------------- # ● フレーム更新 (カテゴリウィンドウがアクティブの場合) #-------------------------------------------------------------------------- def update_menu # B ボタンが押された場合 if Input.trigger?(Input::B) Sound.play_cancel eixt_dictionary # C ボタンが押された場合 elsif Input.trigger?(Input::C) if $game_system.dictionary[@ct_window.index].size==0 Sound.play_buzzer return end Sound.play_decision @ct_window.active = false if Dictionary.d_category_shorten @ct_window.height = Window_Base::WLH+32 @ct_top_row = @ct_window.top_row @ct_window.update_cursor @words_window.visible = true end @words_window.active = true @word_frame = Dictionary::INFO_TIMEOUT end end #-------------------------------------------------------------------------- # ● フレーム更新 (用語ウィンドウがアクティブの場合) #-------------------------------------------------------------------------- def update_main if Dictionary.d_info_visible # infoが常時表示なら @info_window.update_arrow # Lボタンが押された場合 if Input.repeat?(Input::L) @info_window.page_up return # Rボタンが押された場合 elsif Input.repeat?(Input::R) @info_window.page_dw return end unless Dictionary::INFO_TIMEOUT.nil? or @words_window.current_dict.nil? if Input.repeat?(Input::UP) or Input.repeat?(Input::DOWN) @word_frame = Dictionary::INFO_TIMEOUT elsif @words_window.current_dict.color != 0 @word_frame -= 1 if @word_frame <= 0 ## timeout発生なら概読へ @words_window.update_dict_color @word_frame = Dictionary::INFO_TIMEOUT end end end end @words_window.update # B ボタンが押された場合 if Input.trigger?(Input::B) # キャンセル SE を演奏 Sound.play_cancel if Dictionary.d_category_visible # メニューウィンドウに切り替え @ct_window.active = true @words_window.active = false if Dictionary.d_category_shorten @ct_window.height = Dictionary.d_category_rect.height @ct_window.top_row = @ct_top_row @ct_window.update_cursor @words_window.visible = false end else eixt_dictionary end @info_window.refresh(nil) # C ボタンが押された場合 elsif Input.trigger?(Input::C) if @words_window.current_dict.nil? Sound.play_buzzer return elsif Dictionary.d_info_visible # infoが常時表示なら色更新のみ if @words_window.current_dict.show_flg and @words_window.current_dict.color != 0 Sound.play_decision @words_window.update_dict_color end return elsif !@words_window.current_dict.show_flg Sound.play_buzzer return end # 未読/更新から既読へ更新 @words_window.update_dict_color # 決定 SE を演奏 Sound.play_decision # インフォウィンドウをアクティブ化 @words_window.active = false @info_window.active = true @info_window.visible = true unless Dictionary.d_info_visible # ★VXバグの対策 # 一度、visibleフラグをfalseにすると、 # visibleフラグをtrueにしてもcontentsが表示できない @info_window.contents_opacity = 255 end end #-------------------------------------------------------------------------- # ● フレーム更新 (インフォウィンドウがvisibleの場合) #-------------------------------------------------------------------------- def update_info # B ボタンが押された場合 if Input.trigger?(Input::B) or Input.trigger?(Input::C) # キャンセル SE を演奏 Sound.play_cancel # ターゲットウィンドウを消去 @words_window.active = true @info_window.visible = false unless Dictionary.d_info_visible @info_window.active = false # 上ボタンが押された場合 elsif Input.repeat?(Input::UP) or Input.repeat?(Input::L) @info_window.page_up # 下ボタンが押された場合 elsif Input.repeat?(Input::DOWN) or Input.repeat?(Input::R) @info_window.page_dw # 右ボタンが押された場合 elsif Input.repeat?(Input::RIGHT) return if @words_window.index == (@words_window.data_size-1) org_main_index = @words_window.index loop do @words_window.index += 1 break if @words_window.current_dict.show_flg # 表示可能 if @words_window.index == (@words_window.data_size-1) @words_window.index = org_main_index return end end # カーソル SE を演奏 Sound.play_cursor # 未読/更新から既読へ更新 @words_window.update_dict_color # 再表示 @info_window.refresh(@words_window.current_dict, 0) # 左ボタンが押された場合 elsif Input.repeat?(Input::LEFT) return if @words_window.index == 0 org_main_index = @words_window.index loop do @words_window.index -= 1 break if @words_window.current_dict.show_flg # 表示可能 if @words_window.index == 0 @words_window.index = org_main_index return end end # カーソル SE を演奏 Sound.play_cursor # 未読/更新から既読へ更新 @words_window.update_dict_color # 再表示 @info_window.refresh(@words_window.current_dict, 0) end end end