lunariafantasia/Scripts/Scene_CGView.rb
2024-01-12 03:12:38 -06:00

341 lines
No EOL
14 KiB
Ruby
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#==============================================================================
# □ Scene_CGView
#------------------------------------------------------------------------------
#  クラスです。
#==============================================================================
class Scene_CGView < Scene_Base
#--------------------------------------------------------------------------
# ○ オブジェクト初期化
#--------------------------------------------------------------------------
def initialize(id, num, name, skip)
@id = id
@num = num
@name = name
@skip = skip
end
#--------------------------------------------------------------------------
# ● 開始処理
#--------------------------------------------------------------------------
def start
super
create_background
create_cg
create_command_window
end
#--------------------------------------------------------------------------
# ● トランジション速度の取得
#--------------------------------------------------------------------------
def transition_speed
return 20
end
#--------------------------------------------------------------------------
# ● 終了処理
#--------------------------------------------------------------------------
def terminate
super
dispose_background
dispose_cg
end
#--------------------------------------------------------------------------
# CG背景の作成
#--------------------------------------------------------------------------
def create_background
@sprite1 = Sprite.new
@sprite1.bitmap = Cache.cg_back("cg_back")
center_sprite(@sprite1)
end
#--------------------------------------------------------------------------
# CG背景の解放
#--------------------------------------------------------------------------
def dispose_background
@sprite1.bitmap.dispose
@sprite1.dispose
end
#--------------------------------------------------------------------------
# ● スプライトを画面中央に移動
#--------------------------------------------------------------------------
def center_sprite(sprite)
sprite.ox = sprite.bitmap.width / 2
sprite.oy = sprite.bitmap.height / 2
sprite.x = Graphics.width / 2
sprite.y = Graphics.height / 2
end
#--------------------------------------------------------------------------
# CGの作成
#--------------------------------------------------------------------------
def create_cg
#name = Cache.picture("#{@name}_#{format("%02d",@id)}_01")
#$game_map.screen.pictures[1].show(name, 0, 0, 0, 100, 100, 255, 0)
@cg_sprite = Sprite.new
@cg_sprite.bitmap = Bitmap.new(Graphics.width, Graphics.height)
name = "#{@name}_#{format("%02d",@id)}_01"
name = FAKEREAL.cg_select(name)
#name = "DMZ/" + name if !$game_switches[Option::EXH_D] && FAKEREAL.cg_exists?(name)
@cg_sprite.bitmap = Cache.picture(name)
@cg_sprite.z = 100
end
#--------------------------------------------------------------------------
# CG背景の解放
#--------------------------------------------------------------------------
def dispose_cg
@cg_sprite.bitmap.dispose
@cg_sprite.dispose
end
#--------------------------------------------------------------------------
# ● コマンドウィンドウの作成
#--------------------------------------------------------------------------
def create_command_window
@command_window = Window_CG_Command.new(@num)
@command_window.set_handler(:next, method(:change_cg))
@command_window.set_handler(:back, method(:change_cg))
@command_window.set_handler(:hide, method(:window_hide))
@command_window.set_handler(:cancel, method(:return_scene))
end
#--------------------------------------------------------------------------
#
#--------------------------------------------------------------------------
def change_cg
#show(name, origin, x, y, zoom_x, zoom_y, opacity, blend_type)
i = 0
@skip.each {|sn| i += 1 if @command_window.page_index >= sn }
num = @command_window.page_index + i
@cg_sprite.bitmap.dispose
name = "#{@name}_#{format("%02d",@id)}_#{format("%02d",num)}"
name = FAKEREAL.cg_select(name)
#name = "DMZ/" + name if !$game_switches[Option::EXH_D] && FAKEREAL.cg_exists?(name)
@cg_sprite.bitmap = Cache.picture(name)
#@cg_sprite.bitmap = Cache.picture("#{@name}_#{format("%02d",@id)}_#{format("%02d",num)}")
#name = $game_map.screen.pictures[1].name
#if name =~ /^\w+_\d+?_(\d+?)$/
#name = name.gsub(/\d+?$/) { format("%02d",num) }
#$game_map.screen.pictures[1].change(name)
#end
end
#--------------------------------------------------------------------------
#
#--------------------------------------------------------------------------
def window_hide
@command_window.visible ^= true
end
end
class Window_CG_Command < Window_Selectable
#--------------------------------------------------------------------------
# ○ 公開インスタンス変数
#--------------------------------------------------------------------------
attr_reader :page_index # 現在のページ数
#--------------------------------------------------------------------------
# ● オブジェクト初期化
#-------------------------------------------------------------------------
def initialize(num)
super(window_x, window_y, window_width, window_height)
@page_index = 1
@page_max = num
self.opacity = 0
refresh
activate
end
#--------------------------------------------------------------------------
#
#--------------------------------------------------------------------------
def window_x
Graphics.width - window_width
end
#--------------------------------------------------------------------------
#
#--------------------------------------------------------------------------
def window_y
Graphics.height - window_height
end
#--------------------------------------------------------------------------
#
#--------------------------------------------------------------------------
def window_width
180
end
#--------------------------------------------------------------------------
# ウィンドウ高さの取得
#--------------------------------------------------------------------------
def window_height
fitting_height(visible_line_number)
end
#--------------------------------------------------------------------------
# 表示行数の取得
#--------------------------------------------------------------------------
def visible_line_number
2
end
#--------------------------------------------------------------------------
# ● カーソルの移動処理
#--------------------------------------------------------------------------
def process_cursor_move
end
#--------------------------------------------------------------------------
# 決定やキャンセルなどのハンドリング処理
#--------------------------------------------------------------------------
def process_handling
return unless open? && active
return process_ok if ok_enabled? && Input.trigger?(:C)
return process_cancel if cancel_enabled? && Input.trigger?(:B)
return process_pagedown if handle?(:pagedown) && Input.trigger?(:R)
return process_pageup if handle?(:pageup) && Input.trigger?(:L)
return process_next if ok_next? && Input.trigger?(:RIGHT)
return process_back if ok_back? && Input.trigger?(:LEFT)
return process_hide if ok_hide? && Input.trigger?(:Z)
end
#--------------------------------------------------------------------------
# キャンセル処理の有効状態を取得
#--------------------------------------------------------------------------
def ok_next?
handle?(:next)
end
#--------------------------------------------------------------------------
# 決定処理の有効状態を取得
#--------------------------------------------------------------------------
def ok_back?
handle?(:back)
end
#--------------------------------------------------------------------------
# 決定処理の有効状態を取得
#--------------------------------------------------------------------------
def ok_hide?
handle?(:hide)
end
#--------------------------------------------------------------------------
# 決定ボタンが押されたときの処理
#--------------------------------------------------------------------------
def process_next
Sound.play_cursor
Input.update
activate
@page_index += 1
@page_index = 1 if @page_index > @page_max
call_next_handler
refresh
end
#--------------------------------------------------------------------------
# 決定ボタンが押されたときの処理
#--------------------------------------------------------------------------
def process_back
Sound.play_cursor
Input.update
activate
@page_index -= 1
@page_index = @page_max if @page_index < 1
call_back_handler
refresh
end
#--------------------------------------------------------------------------
# 決定ボタンが押されたときの処理
#--------------------------------------------------------------------------
def process_hide
Sound.play_cursor
Input.update
activate
call_hide_handler
end
#--------------------------------------------------------------------------
# 決定ハンドラの呼び出し
#--------------------------------------------------------------------------
def call_next_handler
call_handler(:next)
end
#--------------------------------------------------------------------------
# 決定ハンドラの呼び出し
#--------------------------------------------------------------------------
def call_back_handler
call_handler(:back)
end
#--------------------------------------------------------------------------
# 決定ハンドラの呼び出し
#--------------------------------------------------------------------------
def call_hide_handler
call_handler(:hide)
end
#--------------------------------------------------------------------------
# ● フレーム更新
#--------------------------------------------------------------------------
def update
super
end
#--------------------------------------------------------------------------
# ● 背景の描画
#--------------------------------------------------------------------------
def draw_background(rect)
#temp_rect = rect.clone
#temp_rect.width /= 2
contents.fill_rect(rect, back_color1)
#contents.gradient_fill_rect(temp_rect, back_color2, back_color1)
#temp_rect.x = temp_rect.width
#contents.gradient_fill_rect(temp_rect, back_color1, back_color2)
end
#--------------------------------------------------------------------------
# ● 背景色 1 の取得
#--------------------------------------------------------------------------
def back_color1
Color.new(0, 0, 0, 192)
end
#--------------------------------------------------------------------------
# ● 背景色 2 の取得
#--------------------------------------------------------------------------
def back_color2
Color.new(0, 0, 0, 0)
end
#--------------------------------------------------------------------------
#
#--------------------------------------------------------------------------
def draw_page
draw_text(0, 0, contents_width, line_height, "#{@page_index}/#{@page_max}", 1)
contents.font.size -= 8
draw_text(0, line_height, contents_width, line_height, "#{key_button("d")}で非表示", 1)
contents.font.size += 8
end
#--------------------------------------------------------------------------
# リフレッシュ
#--------------------------------------------------------------------------
def refresh
contents.clear
draw_background(contents.rect)
draw_page
end
end
#==============================================================================
# ■ Cache
#------------------------------------------------------------------------------
#  各種グラフィックを読み込み、Bitmap オブジェクトを作成、保持するモジュール
# です。読み込みの高速化とメモリ節約のため、作成した Bitmap オブジェクトを内部
# のハッシュに保存し、同じビットマップが再度要求されたときに既存のオブジェクト
# を返すようになっています。
#==============================================================================
module Cache
#--------------------------------------------------------------------------
# ● タイトル(背景)グラフィックの取得
#--------------------------------------------------------------------------
def self.cg_back(filename)
load_bitmap("Graphics/Pictures/", filename)
end
end
#==============================================================================
# ■ SceneManager
#------------------------------------------------------------------------------
#  シーン遷移を管理するモジュール ※追加分
#==============================================================================
module SceneManager
#--------------------------------------------------------------------------
# ○
#--------------------------------------------------------------------------
def self.cg_call(scene_class, id, num, name = "ev", skip = [])
@stack.push(@scene)
@scene = scene_class.new(id, num, name, skip)
Fiber.yield
end
end