60 lines
1.8 KiB
Ruby
60 lines
1.8 KiB
Ruby
module Scene
|
|
class << self
|
|
# reachable via main menu or pause menu, allows for configuring the game
|
|
# for the player's preferences.
|
|
def tick_settings(args)
|
|
draw_bg(args, DARK_GREEN)
|
|
|
|
options = [
|
|
{
|
|
key: :sfx,
|
|
kind: :toggle,
|
|
setting_val: args.state.setting.sfx,
|
|
on_select: -> (args) do
|
|
GameSetting.save_after(args) do |args|
|
|
args.state.setting.sfx = !args.state.setting.sfx
|
|
end
|
|
end
|
|
},
|
|
{
|
|
key: :music,
|
|
kind: :toggle,
|
|
setting_val: args.state.setting.music,
|
|
on_select: -> (args) do
|
|
GameSetting.save_after(args) do |args|
|
|
args.state.setting.music = !args.state.setting.music
|
|
set_music_vol(args)
|
|
end
|
|
end
|
|
},
|
|
{
|
|
key: :back,
|
|
on_select: -> (args) { Scene.switch(args, :back) }
|
|
},
|
|
]
|
|
|
|
if args.gtk.platform?(:desktop)
|
|
options.insert(options.length - 1, {
|
|
key: :fullscreen,
|
|
kind: :toggle,
|
|
setting_val: args.state.setting.fullscreen,
|
|
on_select: -> (args) do
|
|
GameSetting.save_after(args) do |args|
|
|
args.state.setting.fullscreen = !args.state.setting.fullscreen
|
|
args.gtk.set_window_fullscreen(args.state.setting.fullscreen)
|
|
end
|
|
end
|
|
})
|
|
end
|
|
|
|
Menu.tick(args, :settings, options)
|
|
|
|
if secondary_down?(args.inputs)
|
|
play_sfx(args, :select)
|
|
options.find { |o| o[:key] == :back }[:on_select].call(args)
|
|
end
|
|
|
|
args.outputs.labels << label(:settings, x: args.grid.w / 2, y: args.grid.top - 200, align: ALIGN_CENTER, size: SIZE_LG, font: FONT_BOLD)
|
|
end
|
|
end
|
|
end
|