96 lines
3.9 KiB
Ruby
96 lines
3.9 KiB
Ruby
# -*- coding: utf-8 -*-
|
|
#==============================================================================
|
|
# ** SceneManager
|
|
#------------------------------------------------------------------------------
|
|
# This module manages scene transitions. For example, it can handle
|
|
# hierarchical structures such as calling the item screen from the main menu
|
|
# or returning from the item screen to the main menu.
|
|
#==============================================================================
|
|
|
|
module SceneManager
|
|
#--------------------------------------------------------------------------
|
|
# * Module Instance Variables
|
|
#--------------------------------------------------------------------------
|
|
@scene = nil # current scene object
|
|
@stack = [] # stack for hierarchical transitions
|
|
@background_bitmap = nil # background bitmap
|
|
#--------------------------------------------------------------------------
|
|
# * Execute
|
|
#--------------------------------------------------------------------------
|
|
def self.run
|
|
DataManager.init
|
|
Audio.setup_midi if use_midi?
|
|
@scene = first_scene_class.new
|
|
@scene.main while @scene
|
|
end
|
|
#--------------------------------------------------------------------------
|
|
# * Get First Scene Class
|
|
#--------------------------------------------------------------------------
|
|
def self.first_scene_class
|
|
$BTEST ? Scene_Battle : Scene_Title
|
|
end
|
|
#--------------------------------------------------------------------------
|
|
# * Use MIDI?
|
|
#--------------------------------------------------------------------------
|
|
def self.use_midi?
|
|
$data_system.opt_use_midi
|
|
end
|
|
#--------------------------------------------------------------------------
|
|
# * Get Current Scene
|
|
#--------------------------------------------------------------------------
|
|
def self.scene
|
|
@scene
|
|
end
|
|
#--------------------------------------------------------------------------
|
|
# * Determine Current Scene Class
|
|
#--------------------------------------------------------------------------
|
|
def self.scene_is?(scene_class)
|
|
@scene.instance_of?(scene_class)
|
|
end
|
|
#--------------------------------------------------------------------------
|
|
# * Direct Transition
|
|
#--------------------------------------------------------------------------
|
|
def self.goto(scene_class)
|
|
@scene = scene_class.new
|
|
end
|
|
#--------------------------------------------------------------------------
|
|
# * Call
|
|
#--------------------------------------------------------------------------
|
|
def self.call(scene_class)
|
|
@stack.push(@scene)
|
|
@scene = scene_class.new
|
|
end
|
|
#--------------------------------------------------------------------------
|
|
# * Return to Caller
|
|
#--------------------------------------------------------------------------
|
|
def self.return
|
|
@scene = @stack.pop
|
|
end
|
|
#--------------------------------------------------------------------------
|
|
# * Clear Call Stack
|
|
#--------------------------------------------------------------------------
|
|
def self.clear
|
|
@stack.clear
|
|
end
|
|
#--------------------------------------------------------------------------
|
|
# * Exit Game
|
|
#--------------------------------------------------------------------------
|
|
def self.exit
|
|
@scene = nil
|
|
end
|
|
#--------------------------------------------------------------------------
|
|
# * Create Snapshot to Use as Background
|
|
#--------------------------------------------------------------------------
|
|
def self.snapshot_for_background
|
|
@background_bitmap.dispose if @background_bitmap
|
|
@background_bitmap = Graphics.snap_to_bitmap
|
|
@background_bitmap.blur
|
|
end
|
|
#--------------------------------------------------------------------------
|
|
# * Get Background Bitmap
|
|
#--------------------------------------------------------------------------
|
|
def self.background_bitmap
|
|
@background_bitmap
|
|
end
|
|
end
|