#=============================================================================
#  [RGSS2] 割り込みシーン - v1.0.1
# ---------------------------------------------------------------------------
#  Copyright (c) 2021 CACAO
#  Released under the MIT License.
#  https://opensource.org/licenses/mit-license.php
# ---------------------------------------------------------------------------
#  [Twitter] https://twitter.com/cacao_soft/
#  [GitHub]  https://github.com/cacao-soft/
#=============================================================================

=begin

 -- 概    要 ----------------------------------------------------------------

  メインのシーンとは別のシーンを作成・実行する機能を追加します。

 -- 使用方法 ----------------------------------------------------------------

  ★ クラス定義
   Scene_Interrupt を継承したクラスを定義します。
   基本的には Scene_Base とかわりません。
   Scene_Interrupt#new の結果は、インスタンスではなく
   実行結果(@@result)が返ります。
   @exit の値を true にすると、割り込みを終了して元の処理に戻ります。
   終了前に @@result の値を変更しておくと実行結果として取得できます。
   初期値は nil です。
   Scene_Interrupt::WINDOW_Z は、スプライトのクラスのｚ座標です。
   割り込みシーンで使用する Sprite や Window は、この値を基準とします。
   
  ★ 割り込みシーンの処理を開始する。
   result = Scene_○○.new のように開始します。
   new の戻り値が返るときには、処理はすべて終わっているので
   外部からシーンの操作を行うことはできません。
  ※ 実行結果の取得にクラス変数を使用しているため、割り込み処理を
     ネストする際などには、ご注意ください。

=end


#/////////////////////////////////////////////////////////////////////////////#
#                                                                             #
#                  このスクリプトに設定項目はありません。                     #
#                                                                             #
#/////////////////////////////////////////////////////////////////////////////#


class Scene_Interrupt < Scene_Base
  #--------------------------------------------------------------------------
  # ● 定数
  #--------------------------------------------------------------------------
  WINODW_Z = 9999                 # ｚ座標
  #--------------------------------------------------------------------------
  # ● オブジェクトの作成
  #--------------------------------------------------------------------------
  def self.new(*argv)
    super
    return @@result               # 処理結果を返す
  end
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #--------------------------------------------------------------------------
  def initialize
    @exit = false                 # 処理の終了フラグ
    @@result = nil                # 処理結果
    main
  end
  #--------------------------------------------------------------------------
  # ● メイン処理
  #--------------------------------------------------------------------------
  def main
    start                         # 開始処理
    perform_transition            # トランジション実行
    post_start                    # 開始後処理
    Input.update                  # 入力情報を更新
    loop do
      Graphics.update             # ゲーム画面を更新
      Input.update                # 入力情報を更新
      update                      # フレーム更新
      break if @exit              # 処理が終わったらループを中断
    end
    Graphics.update
    pre_terminate                 # 終了前処理
    terminate                     # 終了処理
    Input.update                  # 入力情報を更新
  end
  #--------------------------------------------------------------------------
  # ● 元の画面へ戻る
  #--------------------------------------------------------------------------
  def return_scene
    @exit = true
  end
  #--------------------------------------------------------------------------
  # ● メニュー画面系の背景作成
  #     中断前の画面の上から処理するため、必ずしも必要ではない。
  #--------------------------------------------------------------------------
  def create_menu_background
    @menuback_sprite = Sprite.new
    @menuback_sprite.bitmap = $game_temp.background_bitmap
    @menuback_sprite.color.set(16, 16, 16, 128)
    @menuback_sprite.z = WINODW_Z
    update_menu_background
  end
end
