280 lines
11 KiB
Ruby
280 lines
11 KiB
Ruby
#==============================================================================
|
|
# ■ Scene_Map
|
|
#------------------------------------------------------------------------------
|
|
# マップ画面の処理を行うクラスです。
|
|
#==============================================================================
|
|
|
|
class Scene_Map < Scene_Base
|
|
#--------------------------------------------------------------------------
|
|
# ● 開始処理
|
|
#--------------------------------------------------------------------------
|
|
def start
|
|
super
|
|
SceneManager.clear
|
|
$game_player.straighten
|
|
$game_map.refresh
|
|
$game_message.visible = false
|
|
create_spriteset
|
|
create_all_windows
|
|
@menu_calling = false
|
|
end
|
|
#--------------------------------------------------------------------------
|
|
# ● トランジション実行
|
|
# 戦闘後やロード直後など、画面が暗転しているときはフェードインを行う。
|
|
#--------------------------------------------------------------------------
|
|
def perform_transition
|
|
if Graphics.brightness == 0
|
|
Graphics.transition(0)
|
|
fadein(fadein_speed)
|
|
else
|
|
super
|
|
end
|
|
end
|
|
#--------------------------------------------------------------------------
|
|
# ● トランジション速度の取得
|
|
#--------------------------------------------------------------------------
|
|
def transition_speed
|
|
return 15
|
|
end
|
|
#--------------------------------------------------------------------------
|
|
# ● 終了前処理
|
|
#--------------------------------------------------------------------------
|
|
def pre_terminate
|
|
super
|
|
pre_battle_scene if SceneManager.scene_is?(Scene_Battle)
|
|
pre_title_scene if SceneManager.scene_is?(Scene_Title)
|
|
end
|
|
#--------------------------------------------------------------------------
|
|
# ● 終了処理
|
|
#--------------------------------------------------------------------------
|
|
def terminate
|
|
super
|
|
SceneManager.snapshot_for_background
|
|
dispose_spriteset
|
|
perform_battle_transition if SceneManager.scene_is?(Scene_Battle)
|
|
end
|
|
#--------------------------------------------------------------------------
|
|
# ● フレーム更新
|
|
#--------------------------------------------------------------------------
|
|
def update
|
|
super
|
|
$game_map.update(true)
|
|
$game_player.update
|
|
$game_timer.update
|
|
@spriteset.update
|
|
update_scene if scene_change_ok?
|
|
end
|
|
#--------------------------------------------------------------------------
|
|
# ● シーン遷移の可能判定
|
|
#--------------------------------------------------------------------------
|
|
def scene_change_ok?
|
|
!$game_message.busy? && !$game_message.visible
|
|
end
|
|
#--------------------------------------------------------------------------
|
|
# ● シーン遷移に関連する更新
|
|
#--------------------------------------------------------------------------
|
|
def update_scene
|
|
check_gameover
|
|
update_transfer_player unless scene_changing?
|
|
update_encounter unless scene_changing?
|
|
update_call_menu unless scene_changing?
|
|
update_call_debug unless scene_changing?
|
|
end
|
|
#--------------------------------------------------------------------------
|
|
# ● フレーム更新(フェード用)
|
|
#--------------------------------------------------------------------------
|
|
def update_for_fade
|
|
update_basic
|
|
$game_map.update(false)
|
|
@spriteset.update
|
|
end
|
|
#--------------------------------------------------------------------------
|
|
# ● 汎用フェード処理
|
|
#--------------------------------------------------------------------------
|
|
def fade_loop(duration)
|
|
duration.times do |i|
|
|
yield 255 * (i + 1) / duration
|
|
update_for_fade
|
|
end
|
|
end
|
|
#--------------------------------------------------------------------------
|
|
# ● 画面のフェードイン
|
|
#--------------------------------------------------------------------------
|
|
def fadein(duration)
|
|
fade_loop(duration) {|v| Graphics.brightness = v }
|
|
end
|
|
#--------------------------------------------------------------------------
|
|
# ● 画面のフェードアウト
|
|
#--------------------------------------------------------------------------
|
|
def fadeout(duration)
|
|
fade_loop(duration) {|v| Graphics.brightness = 255 - v }
|
|
end
|
|
#--------------------------------------------------------------------------
|
|
# ● 画面のフェードイン(白)
|
|
#--------------------------------------------------------------------------
|
|
def white_fadein(duration)
|
|
fade_loop(duration) {|v| @viewport.color.set(255, 255, 255, 255 - v) }
|
|
end
|
|
#--------------------------------------------------------------------------
|
|
# ● 画面のフェードアウト(白)
|
|
#--------------------------------------------------------------------------
|
|
def white_fadeout(duration)
|
|
fade_loop(duration) {|v| @viewport.color.set(255, 255, 255, v) }
|
|
end
|
|
#--------------------------------------------------------------------------
|
|
# ● スプライトセットの作成
|
|
#--------------------------------------------------------------------------
|
|
def create_spriteset
|
|
@spriteset = Spriteset_Map.new
|
|
end
|
|
#--------------------------------------------------------------------------
|
|
# ● スプライトセットの解放
|
|
#--------------------------------------------------------------------------
|
|
def dispose_spriteset
|
|
@spriteset.dispose
|
|
end
|
|
#--------------------------------------------------------------------------
|
|
# ● 全ウィンドウの作成
|
|
#--------------------------------------------------------------------------
|
|
def create_all_windows
|
|
create_message_window
|
|
create_scroll_text_window
|
|
create_location_window
|
|
end
|
|
#--------------------------------------------------------------------------
|
|
# ● メッセージウィンドウの作成
|
|
#--------------------------------------------------------------------------
|
|
def create_message_window
|
|
@message_window = Window_Message.new
|
|
end
|
|
#--------------------------------------------------------------------------
|
|
# ● スクロール文章ウィンドウの作成
|
|
#--------------------------------------------------------------------------
|
|
def create_scroll_text_window
|
|
@scroll_text_window = Window_ScrollText.new
|
|
end
|
|
#--------------------------------------------------------------------------
|
|
# ● マップ名ウィンドウの作成
|
|
#--------------------------------------------------------------------------
|
|
def create_location_window
|
|
@map_name_window = Window_MapName.new
|
|
end
|
|
#--------------------------------------------------------------------------
|
|
# ● 場所移動の更新
|
|
#--------------------------------------------------------------------------
|
|
def update_transfer_player
|
|
perform_transfer if $game_player.transfer?
|
|
end
|
|
#--------------------------------------------------------------------------
|
|
# ● エンカウントの更新
|
|
#--------------------------------------------------------------------------
|
|
def update_encounter
|
|
SceneManager.call(Scene_Battle) if $game_player.encounter
|
|
end
|
|
#--------------------------------------------------------------------------
|
|
# ● キャンセルボタンによるメニュー呼び出し判定
|
|
#--------------------------------------------------------------------------
|
|
def update_call_menu
|
|
if $game_system.menu_disabled || $game_map.interpreter.running?
|
|
@menu_calling = false
|
|
else
|
|
@menu_calling ||= Input.trigger?(:B)
|
|
call_menu if @menu_calling && !$game_player.moving?
|
|
end
|
|
end
|
|
#--------------------------------------------------------------------------
|
|
# ● メニュー画面の呼び出し
|
|
#--------------------------------------------------------------------------
|
|
def call_menu
|
|
Sound.play_ok
|
|
SceneManager.call(Scene_Menu)
|
|
Window_MenuCommand::init_command_position
|
|
end
|
|
#--------------------------------------------------------------------------
|
|
# ● F9 キーによるデバッグ呼び出し判定
|
|
#--------------------------------------------------------------------------
|
|
def update_call_debug
|
|
SceneManager.call(Scene_Debug) if $TEST && Input.press?(:F9)
|
|
end
|
|
#--------------------------------------------------------------------------
|
|
# ● 場所移動の処理
|
|
#--------------------------------------------------------------------------
|
|
def perform_transfer
|
|
pre_transfer
|
|
$game_variables[62] =0#紅茶走
|
|
RPG::BGS.stop#紅茶走
|
|
$game_player.perform_transfer
|
|
post_transfer
|
|
end
|
|
#--------------------------------------------------------------------------
|
|
# ● 場所移動前の処理
|
|
#--------------------------------------------------------------------------
|
|
def pre_transfer
|
|
@map_name_window.close
|
|
case $game_temp.fade_type
|
|
when 0
|
|
fadeout(fadeout_speed)
|
|
when 1
|
|
white_fadeout(fadeout_speed)
|
|
end
|
|
end
|
|
#--------------------------------------------------------------------------
|
|
# ● 場所移動後の処理
|
|
#--------------------------------------------------------------------------
|
|
def post_transfer
|
|
case $game_temp.fade_type
|
|
when 0
|
|
Graphics.wait(fadein_speed / 2)
|
|
fadein(fadein_speed)
|
|
when 1
|
|
Graphics.wait(fadein_speed / 2)
|
|
white_fadein(fadein_speed)
|
|
end
|
|
@map_name_window.open
|
|
end
|
|
#--------------------------------------------------------------------------
|
|
# ● バトル画面遷移の前処理
|
|
#--------------------------------------------------------------------------
|
|
def pre_battle_scene
|
|
if $game_variables[214] == 1000
|
|
SceneManager.goto(Scene_Title)
|
|
end
|
|
Graphics.update
|
|
Graphics.freeze
|
|
@spriteset.dispose_characters
|
|
BattleManager.save_bgm_and_bgs
|
|
BattleManager.play_battle_bgm
|
|
Sound.play_battle_start
|
|
end
|
|
#--------------------------------------------------------------------------
|
|
# ● タイトル画面遷移の前処理
|
|
#--------------------------------------------------------------------------
|
|
def pre_title_scene
|
|
fadeout(fadeout_speed_to_title)
|
|
end
|
|
#--------------------------------------------------------------------------
|
|
# ● 戦闘前トランジション実行
|
|
#--------------------------------------------------------------------------
|
|
def perform_battle_transition
|
|
Graphics.transition(60, "Graphics/System/BattleStart", 100)
|
|
Graphics.freeze
|
|
end
|
|
#--------------------------------------------------------------------------
|
|
# ● フェードアウト速度の取得
|
|
#--------------------------------------------------------------------------
|
|
def fadeout_speed
|
|
return 30
|
|
end
|
|
#--------------------------------------------------------------------------
|
|
# ● フェードイン速度の取得
|
|
#--------------------------------------------------------------------------
|
|
def fadein_speed
|
|
return 30
|
|
end
|
|
#--------------------------------------------------------------------------
|
|
# ● タイトル画面遷移用フェードアウト速度の取得
|
|
#--------------------------------------------------------------------------
|
|
def fadeout_speed_to_title
|
|
return 60
|
|
end
|
|
end
|