update settings menu, misc tweaks and fixes

This commit is contained in:
2020-09-24 10:45:15 -05:00
parent 9558370ab9
commit 4c8e6c3d5f
6 changed files with 97 additions and 81 deletions

View File

@@ -5,6 +5,7 @@ require "abbrev"
require "time" require "time"
require "socket" require "socket"
require "tmpdir" require "tmpdir"
require "securerandom"
require "opengl" require "opengl"
require "glu" require "glu"

View File

@@ -24,7 +24,7 @@ class IMICFPS
end end
def update def update
@text.x = window.width - (@text.width + Widget.margin) @text.x = window.width - (@text.markup_width + Widget.margin)
end end
def generate_random_data def generate_random_data

View File

@@ -12,7 +12,7 @@ class IMICFPS
def draw def draw
return if @text.text.empty? return if @text.text.empty?
width = @text.width + 8 width = @text.markup_width + 8
Gosu.draw_rect(0, 0, width, (@text.height + 4), Gosu::Color.rgba(0, 0, 0, 100)) Gosu.draw_rect(0, 0, width, (@text.height + 4), Gosu::Color.rgba(0, 0, 0, 100))
Gosu.draw_rect(2, 2, width - 4, (@text.height + 4) - 4, Gosu::Color.rgba(100, 100, 100, 100)) Gosu.draw_rect(2, 2, width - 4, (@text.height + 4) - 4, Gosu::Color.rgba(100, 100, 100, 100))

View File

@@ -56,7 +56,6 @@ class IMICFPS
def update def update
super super
# @camera.update
@light.position = @camera.position.clone @light.position = @camera.position.clone
@light.position.y += 1.5 @light.position.y += 1.5
@camera_position.value = "Camera Position: X #{@camera.position.x.round(2)}, Y #{@camera.position.y.round(2)}, Z #{@camera.position.z.round(2)}" @camera_position.value = "Camera Position: X #{@camera.position.x.round(2)}, Y #{@camera.position.y.round(2)}, Z #{@camera.position.z.round(2)}"
@@ -75,7 +74,6 @@ class IMICFPS
super super
InputMapper.keyup(id) InputMapper.keyup(id)
@camera.button_up(id)
end end
end end

View File

@@ -2,6 +2,12 @@ class IMICFPS
class SettingsMenu < Menu class SettingsMenu < Menu
include CommonMethods include CommonMethods
def self.set_defaults
$window.config[:options, :audio, :volume_sound] = 1.0 if $window.config.get(:options, :audio, :volume_sound).nil?
$window.config[:options, :audio, :volume_music] = 0.7 if $window.config.get(:options, :audio, :volume_music).nil?
$window.config[:options, :audio, :volume_dialogue] = 0.7 if $window.config.get(:options, :audio, :volume_dialogue).nil?
end
def setup def setup
@categories = [ @categories = [
"Display", "Display",
@@ -68,46 +74,52 @@ class IMICFPS
check_box "Fullscreen", padding_top: 25, padding_bottom: 25 check_box "Fullscreen", padding_top: 25, padding_bottom: 25
flow do stack do
stack do longest_string = "Gamma Correction"
label "Gamma Correction" flow do
label "Brightness" label "Gamma Correction".ljust(longest_string.length, " ")
label "Contrast" @display_gamma_correction = slider range: 0.0..1.0, value: 0.5
@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 end
stack do flow do
slider label "Brightness".ljust(longest_string.length, " ")
slider @display_brightness = slider range: 0.0..1.0, value: 0.5
slider @display_brightness.subscribe(:changed) do |sender, value|
end @display_brightness_label.value = value.round(1).to_s
stack do end
label "0.0" @display_brightness_label = label "0.0" end
label "0.0" flow do
label "0.0" label "Contrast".ljust(longest_string.length, " ")
@display_contrast = slider range: 0.0..1.0, value: 0.5
@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 end
end end
def create_page_audio def create_page_audio
label "Audio", text_size: 50 label "Audio", text_size: 50
longest_string = "Dialogue".length
volumes = [:sound, :music, :dialogue]
flow do stack do
stack do volumes.each do |volume|
label "Master Volume" config_value = window.config.get(:options, :audio, :"volume_#{volume}")
label "Sound Effects"
label "Dialog" flow do
label "Cinematic" label volume.to_s.split("_").join(" ").capitalize.ljust(longest_string, " ")
end instance_variable_set(:"@volume_#{volume}", slider(range: 0.0..1.0, value: config_value))
stack do instance_variable_get(:"@volume_#{volume}").subscribe(:changed) do |sender, value|
slider range: 0.0..1.0, value: 1.0 instance_variable_get(:"@volume_#{volume}_label").value = "%03.2f%%" % [value * 100.0]
slider range: 0.0..1.0, value: 1.0 window.config[:options, :audio, :"volume_#{volume}"] = value
slider range: 0.0..1.0, value: 1.0 end
slider range: 0.0..1.0, value: 1.0 instance_variable_set(:"@volume_#{volume}_label", label("%03.2f%%" % [config_value * 100.0]))
end end
stack do
label "0.0"
label "0.0"
label "0.0"
label "0.0"
end end
end end
end end
@@ -120,7 +132,12 @@ class IMICFPS
label "#{key}" label "#{key}"
[values].flatten.each do |value| [values].flatten.each do |value|
button Gosu.button_id_to_char(value) if name = Gosu.button_name(value)
else
name = Gosu.constants.find { |const| Gosu.const_get(const) == value }
name = name.to_s.capitalize.split("_").join(" ") if name
end
button name
end end
end end
end end
@@ -129,66 +146,61 @@ class IMICFPS
def create_page_graphics def create_page_graphics
label "Graphics", text_size: 50 label "Graphics", text_size: 50
longest_string = "Surface Effect Detail"
flow do flow do
check_box "V-Sync" check_box "V-Sync (Not Disableable, Yet.)", checked: true, enabled: false
label "(No Supported)"
end end
flow do flow do
label "Field of View" label "Field of View".ljust(longest_string.length, " ")
slider range: 70.0..110.0 @fov = slider range: 70.0..110.0
label "90.0" @fov.subscribe(:changed) do |sender, value|
@fov_label.value = value.round.to_s
end
@fov_label = label "90.0"
end end
flow do flow do
stack do label "Detail".ljust(longest_string.length, " ")
label "Detail" list_box items: [:high, :medium, :low], width: 250
end
stack do
slider range: 1..3
end
stack do
label "High"
end
end end
advanced_mode = check_box "Advanced Mode" label ""
advanced_mode = check_box "Advanced Settings"
label ""
advanced_settings = stack do |element| advanced_settings = stack width: 1.0 do |element|
element.hide element.hide
flow do stack do
stack do flow do
label "Geometry Detail" label "Geometry Detail".ljust(longest_string.length, " ")
label "Shadow Detail" list_box items: [:high, :medium, :low], width: 250
label "Texture Detail"
label "Particle Detail"
label "Surface Effect Detail"
end end
stack do flow do
slider label "Shadow Detail".ljust(longest_string.length, " ")
slider list_box items: [:high, :medium, :low, :off], width: 250
slider
slider
slider
end end
stack do flow do
label "High" label "Texture Detail".ljust(longest_string.length, " ")
label "High" list_box items: [:high, :medium, :low], width: 250
label "High"
label "High"
label "High"
end end
end flow do
label "Particle Detail".ljust(longest_string.length, " ")
flow do list_box items: [:high, :medium, :low, :off], width: 250
stack do
label "Lighting Mode"
edit_line ""
end end
stack do flow do
label "Texture Filtering" label "Surface Effect Detail".ljust(longest_string.length, " ")
edit_line "" list_box items: [:high, :medium, :low], width: 250
end
flow do
label "Lighting Mode".ljust(longest_string.length, " ")
list_box items: [:per_pixel, :per_vertex], width: 250
end
flow do
label "Texture Filtering".ljust(longest_string.length, " ")
list_box items: [:none], width: 250
end end
end end
end end
@@ -202,6 +214,10 @@ class IMICFPS
def create_page_multiplayer def create_page_multiplayer
label "Multiplayer", text_size: 50 label "Multiplayer", text_size: 50
flow do
label "Player Name"
edit_line "player-#{SecureRandom.hex(2)}"
end
check_box "Show player names" check_box "Show player names"
end end
end end

View File

@@ -22,6 +22,7 @@ class IMICFPS
@show_console = false @show_console = false
@console = Console.new @console = Console.new
Commands::Command.setup Commands::Command.setup
SettingsMenu.set_defaults
@renderer = Renderer.new @renderer = Renderer.new
preload_default_shaders preload_default_shaders