mirror of
https://github.com/cyberarm/i-mic-fps.git
synced 2025-12-15 07:32:35 +00:00
258 lines
8.5 KiB
Ruby
258 lines
8.5 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
class IMICFPS
|
|
class SettingsMenu < Menu
|
|
include CommonMethods
|
|
|
|
def self.set_defaults
|
|
if CyberarmEngine::Window.instance.config.get(:options, :audio, :volume_master).nil?
|
|
CyberarmEngine::Window.instance.config[:options, :audio, :volume_master] = 1.0
|
|
end
|
|
|
|
if CyberarmEngine::Window.instance.config.get(:options, :audio, :volume_sound_effects).nil?
|
|
CyberarmEngine::Window.instance.config[:options, :audio, :volume_sound_effects] = 1.0
|
|
end
|
|
|
|
if CyberarmEngine::Window.instance.config.get(:options, :audio, :volume_music).nil?
|
|
CyberarmEngine::Window.instance.config[:options, :audio, :volume_music] = 0.7
|
|
end
|
|
|
|
if CyberarmEngine::Window.instance.config.get(:options, :audio, :volume_dialogue).nil?
|
|
CyberarmEngine::Window.instance.config[:options, :audio, :volume_dialogue] = 0.7
|
|
end
|
|
end
|
|
|
|
def setup
|
|
@pages = {}
|
|
@current_page = nil
|
|
|
|
flow(width: 1.0, height: 1.0) do
|
|
stack(width: 0.25, height: 1.0) do
|
|
end
|
|
|
|
stack(fill: true, height: 1.0) do
|
|
title "Settings", width: 1.0, text_align: :center
|
|
|
|
stack(width: 1.0, height: 96) do
|
|
flow(width: 1.0) do
|
|
link I18n.t("menus.back"), width: nil do
|
|
pop_state
|
|
end
|
|
|
|
flow(fill: true)
|
|
|
|
button get_image("#{GAME_ROOT_PATH}/static/icons/settings_display.png"), image_width: 64, tip: I18n.t("settings.display") do
|
|
show_page(:display)
|
|
end
|
|
|
|
button get_image("#{GAME_ROOT_PATH}/static/icons/settings_graphics.png"), image_width: 64, tip: I18n.t("settings.graphics") do
|
|
show_page(:graphics)
|
|
end
|
|
|
|
button get_image("#{GAME_ROOT_PATH}/static/icons/settings_audio.png"), image_width: 64, tip: I18n.t("settings.audio") do
|
|
show_page(:audio)
|
|
end
|
|
|
|
button get_image("#{GAME_ROOT_PATH}/static/icons/settings_controls.png"), image_width: 64, tip: I18n.t("settings.controls") do
|
|
show_page(:controls)
|
|
end
|
|
|
|
button get_image("#{GAME_ROOT_PATH}/static/icons/settings_multiplayer.png"), image_width: 64, tip: I18n.t("settings.multiplayer") do
|
|
show_page(:multiplayer)
|
|
end
|
|
end
|
|
end
|
|
|
|
@page_container = stack(width: 1.0, fill: true, scroll: true, padding: 10) do
|
|
end
|
|
end
|
|
|
|
stack(width: 0.25, height: 1.0) do
|
|
end
|
|
end
|
|
|
|
# @categories.each do |category|
|
|
# stack(width: 0.5, height: 1.0) do |element|
|
|
# @pages[:"#{category}".downcase] = element
|
|
# element.hide
|
|
|
|
# send(:"create_page_#{category}".downcase) if respond_to?(:"create_page_#{category}".downcase)
|
|
# end
|
|
# end
|
|
# end
|
|
|
|
show_page(:display)
|
|
end
|
|
|
|
def show_page(page)
|
|
@page_container.clear do
|
|
send(:"page_#{page}")
|
|
end
|
|
|
|
@page_container.scroll_top = 0
|
|
end
|
|
|
|
def page_display
|
|
label "Display", text_size: 50
|
|
|
|
stack(width: 1.0, height: 128) do
|
|
flow(width: 1.0) do
|
|
label "Width", width: 96
|
|
edit_line window.width.to_s, fill: true
|
|
end
|
|
|
|
flow(width: 1.0) do
|
|
label "Height", width: 96
|
|
edit_line window.height.to_s, fill: true
|
|
end
|
|
end
|
|
|
|
# check_box "Fullscreen", margin_top: 25, margin_bottom: 25, width: 1.0
|
|
|
|
stack(width: 1.0, height: 128, margin_top: 20) do
|
|
flow(width: 1.0, fill: true) do
|
|
label "Gamma Correction", width: 256
|
|
@display_gamma_correction = slider range: 0.0..1.0, value: 0.5, fill: true
|
|
@display_gamma_correction.subscribe(:changed) do |_sender, value|
|
|
@display_gamma_correction_label.value = value.round(1).to_s
|
|
end
|
|
@display_gamma_correction_label = label "0.0"
|
|
end
|
|
|
|
flow(width: 1.0, fill: true) do
|
|
label "Brightness", width: 256
|
|
@display_brightness = slider range: 0.0..1.0, value: 0.5, fill: true
|
|
@display_brightness.subscribe(:changed) do |_sender, value|
|
|
@display_brightness_label.value = value.round(1).to_s
|
|
end
|
|
@display_brightness_label = label "0.0"
|
|
end
|
|
|
|
flow(width: 1.0, fill: true) do
|
|
label "Contrast", width: 256
|
|
@display_contrast = slider range: 0.0..1.0, value: 0.5, fill: true
|
|
@display_contrast.subscribe(:changed) do |_sender, value|
|
|
@display_contrast_label.value = value.round(1).to_s
|
|
end
|
|
@display_contrast_label = label "0.0"
|
|
end
|
|
end
|
|
end
|
|
|
|
def page_audio
|
|
label "Audio", text_size: 50
|
|
volumes = %i[master sound_effects music dialogue]
|
|
|
|
stack(width: 1.0, height: 48 * volumes.count) do
|
|
volumes.each do |volume|
|
|
config_value = window.config.get(:options, :audio, :"volume_#{volume}")
|
|
|
|
flow(width: 1.0, fill: true, margin_bottom: 10) do
|
|
label volume.to_s.split("_").map(&:capitalize).join(" "), width: 172
|
|
|
|
instance_variable_set(:"@volume_#{volume}", slider(range: 0.0..1.0, value: config_value, fill: true))
|
|
instance_variable_get(:"@volume_#{volume}").subscribe(:changed) do |_sender, value|
|
|
instance_variable_get(:"@volume_#{volume}_label").value = format("%03.2f%%", value * 100.0)
|
|
window.config[:options, :audio, :"volume_#{volume}"] = value
|
|
end
|
|
|
|
instance_variable_set(:"@volume_#{volume}_label", label(format("%03.2f%%", config_value * 100.0), width: 96, text_align: :right))
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
def page_controls
|
|
label "Controls", text_size: 50
|
|
|
|
InputMapper.keymap.each do |key, values|
|
|
flow(width: 1.0, height: 64) do
|
|
label key.to_s, width: 0.5, max_width: 312
|
|
|
|
[values].flatten.each do |value|
|
|
unless (name = Gosu.button_name(value))
|
|
name = Gosu.constants.find { |const| Gosu.const_get(const) == value }
|
|
name = name.to_s.capitalize.split("_").join(" ") if name
|
|
end
|
|
|
|
button name, fill: true
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
def page_graphics
|
|
label "Graphics", text_size: 50
|
|
|
|
check_box "V-Sync (Not Disableable, Yet.)", checked: true, enabled: false, width: 1.0
|
|
|
|
flow(width: 1.0, height: 64) do
|
|
label "Field of View", width: 128
|
|
@fov = slider range: 70.0..110.0, fill: true
|
|
@fov.subscribe(:changed) do |_sender, value|
|
|
@fov_label.value = value.round.to_s
|
|
end
|
|
@fov_label = label "90.0"
|
|
end
|
|
|
|
flow(width: 1.0, height: 64) do
|
|
label "Detail", width: 128
|
|
list_box items: %i[high medium low], fill: true
|
|
end
|
|
|
|
advanced_mode = check_box "Advanced Settings", margin_top: 20, margin_bottom: 20
|
|
|
|
advanced_settings = stack(width: 1.0) do |element|
|
|
element.hide
|
|
|
|
stack(width: 1.0, height: 64 * 7) do
|
|
flow(width: 1.0, height: 64) do
|
|
label "Geometry Detail", width: 312
|
|
list_box items: %i[high medium low], fill: true
|
|
end
|
|
flow(width: 1.0, height: 64) do
|
|
label "Shadow Detail", width: 312
|
|
list_box items: %i[high medium low off], fill: true
|
|
end
|
|
flow(width: 1.0, height: 64) do
|
|
label "Texture Detail", width: 312
|
|
list_box items: %i[high medium low], fill: true
|
|
end
|
|
flow(width: 1.0, height: 64) do
|
|
label "Particle Detail", width: 312
|
|
list_box items: %i[high medium low off], fill: true
|
|
end
|
|
flow(width: 1.0, height: 64) do
|
|
label "Surface Effect Detail", width: 312
|
|
list_box items: %i[high medium low], fill: true
|
|
end
|
|
flow(width: 1.0, height: 64) do
|
|
label "Lighting Mode", width: 312
|
|
list_box items: %i[per_pixel per_vertex], fill: true
|
|
end
|
|
flow(width: 1.0, height: 64) do
|
|
label "Texture Filtering", width: 312
|
|
list_box items: [:none], fill: true
|
|
end
|
|
end
|
|
end
|
|
|
|
advanced_mode.subscribe(:changed) do |_element, value|
|
|
advanced_settings.show if value
|
|
advanced_settings.hide unless value
|
|
end
|
|
end
|
|
|
|
def page_multiplayer
|
|
label "Multiplayer", text_size: 50
|
|
|
|
flow(width: 1.0, height: 64) do
|
|
label "Player Name", width: 172
|
|
edit_line "player-#{SecureRandom.hex(2)}", fill: true
|
|
end
|
|
|
|
check_box "Show player names"
|
|
end
|
|
end
|
|
end
|