-
Notifications
You must be signed in to change notification settings - Fork 4
/
main.rb
34 lines (25 loc) · 1.32 KB
/
main.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
require 'mittsu'
Dir.glob('src/lib/*.rb') { |path| require_relative path }
Dir.glob('src/directors/*.rb') { |path| require_relative path }
SCREEN_WIDTH = 1024
SCREEN_HEIGHT = 768
ASPECT_RATIO = SCREEN_WIDTH / SCREEN_HEIGHT.to_f
# 全体で共通のレンダラーを生成
renderer = Mittsu::OpenGLRenderer.new width: SCREEN_WIDTH, height: SCREEN_HEIGHT, title: 'Virus Busters // RubyCamp 2022 Spring'
# 初期シーンのディレクターオブジェクトを生成
director = Directors::TitleDirector.new(screen_width: SCREEN_WIDTH, screen_height: SCREEN_HEIGHT, renderer:)
# キー押下時のイベントハンドラを登録
renderer.window.on_key_pressed do |glfw_key|
director.on_key_pressed(glfw_key:)
end
# メインループ
renderer.window.run do
# 現在のディレクターオブジェクトに、処理対象となるディレクターオブジェクトを返させる
# ※ これによって、シーン切替を実現している。メカニズムの詳細はdirectors/base.rb参照
director = director.current_director
# 処理対象のディレクターオブジェクトが返ってこない(nilが返ってくる)場合はメインループを抜ける
break unless director
# 1フレーム分、最新のディレクターオブジェクトを進行させる
director.play
director.render
end