132 lines
5 KiB
Ruby
132 lines
5 KiB
Ruby
#==============================================================================
|
|
# ■ Scene_Base
|
|
#------------------------------------------------------------------------------
|
|
# ゲーム中の全てのシーンのスーパークラスです。
|
|
#==============================================================================
|
|
|
|
class Scene_Base
|
|
#--------------------------------------------------------------------------
|
|
# ● メイン
|
|
#--------------------------------------------------------------------------
|
|
def main
|
|
start
|
|
post_start
|
|
update until scene_changing?
|
|
pre_terminate
|
|
terminate
|
|
end
|
|
#--------------------------------------------------------------------------
|
|
# ● 開始処理
|
|
#--------------------------------------------------------------------------
|
|
def start
|
|
create_main_viewport
|
|
end
|
|
#--------------------------------------------------------------------------
|
|
# ● 開始後処理
|
|
#--------------------------------------------------------------------------
|
|
def post_start
|
|
perform_transition
|
|
Input.update
|
|
end
|
|
#--------------------------------------------------------------------------
|
|
# ● シーン変更中判定
|
|
#--------------------------------------------------------------------------
|
|
def scene_changing?
|
|
SceneManager.scene != self
|
|
end
|
|
#--------------------------------------------------------------------------
|
|
# ● フレーム更新
|
|
#--------------------------------------------------------------------------
|
|
def update
|
|
update_basic
|
|
end
|
|
#--------------------------------------------------------------------------
|
|
# ● フレーム更新(基本)
|
|
#--------------------------------------------------------------------------
|
|
def update_basic
|
|
Graphics.update
|
|
Input.update
|
|
update_all_windows
|
|
end
|
|
#--------------------------------------------------------------------------
|
|
# ● 終了前処理
|
|
#--------------------------------------------------------------------------
|
|
def pre_terminate
|
|
end
|
|
#--------------------------------------------------------------------------
|
|
# ● 終了処理
|
|
#--------------------------------------------------------------------------
|
|
def terminate
|
|
Graphics.freeze
|
|
dispose_all_windows
|
|
dispose_main_viewport
|
|
end
|
|
#--------------------------------------------------------------------------
|
|
# ● トランジション実行
|
|
#--------------------------------------------------------------------------
|
|
def perform_transition
|
|
Graphics.transition(transition_speed)
|
|
end
|
|
#--------------------------------------------------------------------------
|
|
# ● トランジション速度の取得
|
|
#--------------------------------------------------------------------------
|
|
def transition_speed
|
|
return 10
|
|
end
|
|
#--------------------------------------------------------------------------
|
|
# ● ビューポートの作成
|
|
#--------------------------------------------------------------------------
|
|
def create_main_viewport
|
|
@viewport = Viewport.new
|
|
@viewport.z = 200
|
|
end
|
|
#--------------------------------------------------------------------------
|
|
# ● ビューポートの解放
|
|
#--------------------------------------------------------------------------
|
|
def dispose_main_viewport
|
|
@viewport.dispose
|
|
end
|
|
#--------------------------------------------------------------------------
|
|
# ● 全ウィンドウの更新
|
|
#--------------------------------------------------------------------------
|
|
def update_all_windows
|
|
instance_variables.each do |varname|
|
|
ivar = instance_variable_get(varname)
|
|
ivar.update if ivar.is_a?(Window)
|
|
end
|
|
end
|
|
#--------------------------------------------------------------------------
|
|
# ● 全ウィンドウの解放
|
|
#--------------------------------------------------------------------------
|
|
def dispose_all_windows
|
|
instance_variables.each do |varname|
|
|
ivar = instance_variable_get(varname)
|
|
ivar.dispose if ivar.is_a?(Window)
|
|
end
|
|
end
|
|
#--------------------------------------------------------------------------
|
|
# ● 呼び出し元のシーンへ戻る
|
|
#--------------------------------------------------------------------------
|
|
def return_scene
|
|
SceneManager.return
|
|
end
|
|
#--------------------------------------------------------------------------
|
|
# ● 各種サウンドとグラフィックの一括フェードアウト
|
|
#--------------------------------------------------------------------------
|
|
def fadeout_all(time = 1000)
|
|
RPG::BGM.fade(time)
|
|
RPG::BGS.fade(time)
|
|
RPG::ME.fade(time)
|
|
Graphics.fadeout(time * Graphics.frame_rate / 1000)
|
|
RPG::BGM.stop
|
|
RPG::BGS.stop
|
|
RPG::ME.stop
|
|
end
|
|
#--------------------------------------------------------------------------
|
|
# ● ゲームオーバー判定
|
|
# パーティが全滅状態ならゲームオーバー画面へ遷移する。
|
|
#--------------------------------------------------------------------------
|
|
def check_gameover
|
|
SceneManager.goto(Scene_Gameover) if $game_party.all_dead?
|
|
end
|
|
end
|