diff --git a/i-mic-fps.rb b/i-mic-fps.rb index 3af21a9..643b0fb 100644 --- a/i-mic-fps.rb +++ b/i-mic-fps.rb @@ -5,6 +5,7 @@ require "abbrev" require "time" require "socket" require "tmpdir" +require "securerandom" require "opengl" require "glu" diff --git a/lib/hud/widgets/score_board.rb b/lib/hud/widgets/score_board.rb index 8d62243..50404e8 100644 --- a/lib/hud/widgets/score_board.rb +++ b/lib/hud/widgets/score_board.rb @@ -24,7 +24,7 @@ class IMICFPS end def update - @text.x = window.width - (@text.width + Widget.margin) + @text.x = window.width - (@text.markup_width + Widget.margin) end def generate_random_data diff --git a/lib/overlay.rb b/lib/overlay.rb index ab5ddf4..1457c7e 100644 --- a/lib/overlay.rb +++ b/lib/overlay.rb @@ -12,7 +12,7 @@ class IMICFPS def draw 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(2, 2, width - 4, (@text.height + 4) - 4, Gosu::Color.rgba(100, 100, 100, 100)) diff --git a/lib/tools/asset_viewer/lib/turn_table.rb b/lib/tools/asset_viewer/lib/turn_table.rb index 7da44c5..c63afae 100644 --- a/lib/tools/asset_viewer/lib/turn_table.rb +++ b/lib/tools/asset_viewer/lib/turn_table.rb @@ -56,7 +56,6 @@ class IMICFPS def update super - # @camera.update @light.position = @camera.position.clone @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)}" @@ -75,7 +74,6 @@ class IMICFPS super InputMapper.keyup(id) - @camera.button_up(id) end end diff --git a/lib/ui/menus/settings_menu.rb b/lib/ui/menus/settings_menu.rb index c39d1d1..ef1bf9b 100644 --- a/lib/ui/menus/settings_menu.rb +++ b/lib/ui/menus/settings_menu.rb @@ -2,6 +2,12 @@ class IMICFPS class SettingsMenu < Menu 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 @categories = [ "Display", @@ -68,46 +74,52 @@ class IMICFPS check_box "Fullscreen", padding_top: 25, padding_bottom: 25 - flow do - stack do - label "Gamma Correction" - label "Brightness" - label "Contrast" + stack do + longest_string = "Gamma Correction" + flow do + label "Gamma Correction".ljust(longest_string.length, " ") + @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 - stack do - slider - slider - slider - end - stack do - label "0.0" - label "0.0" - label "0.0" + flow do + label "Brightness".ljust(longest_string.length, " ") + @display_brightness = slider range: 0.0..1.0, value: 0.5 + @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 do + 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 def create_page_audio label "Audio", text_size: 50 + longest_string = "Dialogue".length + volumes = [:sound, :music, :dialogue] - flow do - stack do - label "Master Volume" - label "Sound Effects" - label "Dialog" - label "Cinematic" - end - stack do - slider range: 0.0..1.0, value: 1.0 - slider range: 0.0..1.0, value: 1.0 - slider range: 0.0..1.0, value: 1.0 - slider range: 0.0..1.0, value: 1.0 - end - stack do - label "0.0" - label "0.0" - label "0.0" - label "0.0" + stack do + volumes.each do |volume| + config_value = window.config.get(:options, :audio, :"volume_#{volume}") + + flow do + label volume.to_s.split("_").join(" ").capitalize.ljust(longest_string, " ") + instance_variable_set(:"@volume_#{volume}", slider(range: 0.0..1.0, value: config_value)) + instance_variable_get(:"@volume_#{volume}").subscribe(:changed) do |sender, value| + instance_variable_get(:"@volume_#{volume}_label").value = "%03.2f%%" % [value * 100.0] + window.config[:options, :audio, :"volume_#{volume}"] = value + end + instance_variable_set(:"@volume_#{volume}_label", label("%03.2f%%" % [config_value * 100.0])) + end end end end @@ -120,7 +132,12 @@ class IMICFPS label "#{key}" [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 @@ -129,66 +146,61 @@ class IMICFPS def create_page_graphics label "Graphics", text_size: 50 + longest_string = "Surface Effect Detail" + flow do - check_box "V-Sync" - label "(No Supported)" + check_box "V-Sync (Not Disableable, Yet.)", checked: true, enabled: false end flow do - label "Field of View" - slider range: 70.0..110.0 - label "90.0" + label "Field of View".ljust(longest_string.length, " ") + @fov = slider range: 70.0..110.0 + @fov.subscribe(:changed) do |sender, value| + @fov_label.value = value.round.to_s + end + @fov_label = label "90.0" end flow do - stack do - label "Detail" - end - stack do - slider range: 1..3 - end - stack do - label "High" - end + label "Detail".ljust(longest_string.length, " ") + list_box items: [:high, :medium, :low], width: 250 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 - flow do - stack do - label "Geometry Detail" - label "Shadow Detail" - label "Texture Detail" - label "Particle Detail" - label "Surface Effect Detail" + stack do + flow do + label "Geometry Detail".ljust(longest_string.length, " ") + list_box items: [:high, :medium, :low], width: 250 end - stack do - slider - slider - slider - slider - slider + flow do + label "Shadow Detail".ljust(longest_string.length, " ") + list_box items: [:high, :medium, :low, :off], width: 250 end - stack do - label "High" - label "High" - label "High" - label "High" - label "High" + flow do + label "Texture Detail".ljust(longest_string.length, " ") + list_box items: [:high, :medium, :low], width: 250 end - end - - flow do - stack do - label "Lighting Mode" - edit_line "" + flow do + label "Particle Detail".ljust(longest_string.length, " ") + list_box items: [:high, :medium, :low, :off], width: 250 end - stack do - label "Texture Filtering" - edit_line "" + flow do + label "Surface Effect Detail".ljust(longest_string.length, " ") + 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 @@ -202,6 +214,10 @@ class IMICFPS def create_page_multiplayer label "Multiplayer", text_size: 50 + flow do + label "Player Name" + edit_line "player-#{SecureRandom.hex(2)}" + end check_box "Show player names" end end diff --git a/lib/window.rb b/lib/window.rb index 6e12689..11239ec 100644 --- a/lib/window.rb +++ b/lib/window.rb @@ -22,6 +22,7 @@ class IMICFPS @show_console = false @console = Console.new Commands::Command.setup + SettingsMenu.set_defaults @renderer = Renderer.new preload_default_shaders