#============================================================================== # ■ XP-RGSS-37 用語辞典[シーンクラス] by Claimh #------------------------------------------------------------------------------ # 用語辞典の表示状態を制御するシーンクラス。 # 各用語の未読から既読への表示更新もここで行う。 #------------------------------------------------------------------------------ #【用語辞典呼び出し】 # $scene = Scene_Dictionary.new(menu_index, category) # menu_index : 0 以上=メニュー画面へ戻るときのindex # 0 未満=Map画面に戻る <デフォルト> # category : DESGIN=1のときに使える。辞典で表示するカテゴリID <デフォルト:-1> #============================================================================== class Scene_Dictionary #-------------------------------------------------------------------------- # ● メイン処理 #-------------------------------------------------------------------------- def initialize(index=-1, category=-1) @back_index = index @category = category @word_frame = Dictionary::INFO_TIMEOUT end #-------------------------------------------------------------------------- # ● メイン処理 #-------------------------------------------------------------------------- def main start # 開始処理 Graphics.transition # トランジション実行 loop do Graphics.update # ゲーム画面を更新 Input.update # 入力情報を更新 update # フレーム更新 break if $scene != self # 画面が切り替わったらループを中断 end Graphics.update Graphics.freeze # トランジション準備 terminate # 終了処理 end #-------------------------------------------------------------------------- # ● 開始処理 #-------------------------------------------------------------------------- def start # ウィンドウを作成 @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 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 @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) $game_system.se_play($data_system.cancel_se) eixt_dictionary # C ボタンが押された場合 elsif Input.trigger?(Input::C) if $game_system.dictionary[@ct_window.index].size==0 $game_system.se_play($data_system.buzzer_se) return end $game_system.se_play($data_system.decision_se) @ct_window.active = false if Dictionary.d_category_shorten @ct_window.height = 64 @ct_top_row = @ct_window.top_row @ct_window.update_cursor_rect 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 を演奏 $game_system.se_play($data_system.cancel_se) 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_rect end else eixt_dictionary end @info_window.refresh(nil) # C ボタンが押された場合 elsif Input.trigger?(Input::C) if @words_window.current_dict.nil? $game_system.se_play($data_system.buzzer_se) return elsif Dictionary.d_info_visible # infoが常時表示なら色更新のみ if @words_window.current_dict.show_flg and @words_window.current_dict.color != 0 $game_system.se_play($data_system.decision_se) @words_window.update_dict_color end return elsif !@words_window.current_dict.show_flg $game_system.se_play($data_system.buzzer_se) return end # 未読/更新から既読へ更新 @words_window.update_dict_color # 決定 SE を演奏 $game_system.se_play($data_system.decision_se) # インフォウィンドウをアクティブ化 @words_window.active = false @info_window.active = true @info_window.visible = true unless Dictionary.d_info_visible end end #-------------------------------------------------------------------------- # ● フレーム更新 (インフォウィンドウがvisibleの場合) #-------------------------------------------------------------------------- def update_info # B ボタンが押された場合 if Input.trigger?(Input::B) or Input.trigger?(Input::C) # キャンセル SE を演奏 $game_system.se_play($data_system.cancel_se) # ターゲットウィンドウを消去 @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 を演奏 $game_system.se_play($data_system.cursor_se) # 未読/更新から既読へ更新 @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 を演奏 $game_system.se_play($data_system.cursor_se) # 未読/更新から既読へ更新 @words_window.update_dict_color # 再表示 @info_window.refresh(@words_window.current_dict, 0) end end end